From 4c7f03452313e747daa3950c5a503961c4f8541b Mon Sep 17 00:00:00 2001 From: brekk Date: Tue, 14 May 2024 10:04:40 -1000 Subject: [PATCH 01/22] fix: update build action --- .github/workflows/main.yml | 19 ++++++------------- 1 file changed, 6 insertions(+), 13 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 7f369a3..b63aedd 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -9,17 +9,10 @@ jobs: test: runs-on: ubuntu-latest steps: - - name: šŸ›’ Checking out repository... - uses: actions/checkout@v4 - - - name: āš™ļø Setting up node... - uses: actions/setup-node@v4 + - name: 😈 Building and testing Madlib project... + uses: madlib-lang/action-build@main with: - node-version: ${{ env.node-version }} - - - name: 😈 Installing and Testing Library... - run: | - npm install -g @madlib-lang/madlib - madlib install - madlib test --coverage -t llvm - madlib test --coverage -t node + madlibVersion: 0.23.14 + coverage: true + testLLVM: true + testJS: true From d8b0bcaf2e69145beca381be21c31af58238a72a Mon Sep 17 00:00:00 2001 From: brekk Date: Tue, 14 May 2024 11:02:06 -1000 Subject: [PATCH 02/22] ci: try configuring differently --- .github/workflows/main.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index b63aedd..28c1912 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -13,6 +13,6 @@ jobs: uses: madlib-lang/action-build@main with: madlibVersion: 0.23.14 - coverage: true - testLLVM: true - testJS: true + coverage: 'true' + testLLVM: 'true' + testJS: 'true' From 53ec7233a436e1bbd4883ca67cb59b2a38a89c02 Mon Sep 17 00:00:00 2001 From: brekk Date: Tue, 14 May 2024 18:12:21 -1000 Subject: [PATCH 03/22] ci: try this --- .github/workflows/main.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 28c1912..b63aedd 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -13,6 +13,6 @@ jobs: uses: madlib-lang/action-build@main with: madlibVersion: 0.23.14 - coverage: 'true' - testLLVM: 'true' - testJS: 'true' + coverage: true + testLLVM: true + testJS: true From 3ccbd71ba125d1c7b0ff9151776c01b2d0544340 Mon Sep 17 00:00:00 2001 From: brekk Date: Thu, 16 May 2024 14:30:37 -1000 Subject: [PATCH 04/22] ci: get tricky --- .github/workflows/docs.yml | 6 ++++++ package-lock.json | 13 +++++-------- 2 files changed, 11 insertions(+), 8 deletions(-) diff --git a/.github/workflows/docs.yml b/.github/workflows/docs.yml index c58768a..dfaccc2 100644 --- a/.github/workflows/docs.yml +++ b/.github/workflows/docs.yml @@ -29,6 +29,12 @@ jobs: madlib install madlib compile --bundle -i madlib_modules/MadDocCli/src/Main.mad -o build/src/maddoc-cli.js node build/src/maddoc-cli.js src + echo "GITHUB_EH_TRANSPILED_NAME=$(cat .docs/bundle.js | grep _wrapEventHandler_ -m 1 | cut -d" " -f4)" >> $GITHUB_ENV + echo "GITHUB_EC_TRANSPILED_NAME=$(cat .docs/bundle.js | grep _EventConstructors_ -m 1 | cut -d" " -f4)" >> $GITHUB_ENV + echo $GITHUB_EC_TRANSPILED_NAME + echo $GITHUB_EH_TRANSPILED_NAME + sed -i "s/const handler = wrapEventHandler/shitass\nconst handler = wrapEventHandler/g" + cat .docs/bundle.js | grep shitass -C5 - name: 🩺 Deploying documentation... uses: JamesIves/github-pages-deploy-action@4.1.1 diff --git a/package-lock.json b/package-lock.json index c88c6b7..9eafe1a 100644 --- a/package-lock.json +++ b/package-lock.json @@ -5,14 +5,14 @@ "packages": { "": { "dependencies": { - "maddoc-cli": "file:madlib_modules/MadDocCli", - "madmarkdown-renderer": "file:.github/workflows/madlib_modules/MadMarkdownRenderer", + "madmarkdown-renderer": "file:madlib_modules/MadMarkdownRenderer", "madui": "file:.github/workflows/madlib_modules/MadUI" } }, ".github/workflows/madlib_modules/MadMarkdownRenderer": { "name": "madmarkdown-renderer", "version": "0.0.1", + "extraneous": true, "license": "ISC", "dependencies": { "sass": "^1.32.6" @@ -60,7 +60,9 @@ "extraneous": true }, "madlib_modules/MadDocCli": { + "name": "maddoc-cli", "version": "0.0.11", + "extraneous": true, "license": "ISC", "dependencies": { "sass": "^1.32.8", @@ -74,7 +76,6 @@ "madlib_modules/MadMarkdownRenderer": { "name": "madmarkdown-renderer", "version": "0.0.1", - "extraneous": true, "license": "ISC", "dependencies": { "sass": "^1.32.6" @@ -1589,12 +1590,8 @@ "node": "14 || >=16.14" } }, - "node_modules/maddoc-cli": { - "resolved": "madlib_modules/MadDocCli", - "link": true - }, "node_modules/madmarkdown-renderer": { - "resolved": ".github/workflows/madlib_modules/MadMarkdownRenderer", + "resolved": "madlib_modules/MadMarkdownRenderer", "link": true }, "node_modules/madui": { From d60c4624613fef55a666994830307453f0c877ae Mon Sep 17 00:00:00 2001 From: brekk Date: Thu, 16 May 2024 14:36:19 -1000 Subject: [PATCH 05/22] ci: do stuff to stuff --- .github/workflows/docs.yml | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/.github/workflows/docs.yml b/.github/workflows/docs.yml index dfaccc2..83b88c0 100644 --- a/.github/workflows/docs.yml +++ b/.github/workflows/docs.yml @@ -1,10 +1,6 @@ name: Generate Docs -on: - workflow_dispatch: - push: - branches: - - main +on: [workflow_dispatch, push] env: node-version: 20.x @@ -34,6 +30,7 @@ jobs: echo $GITHUB_EC_TRANSPILED_NAME echo $GITHUB_EH_TRANSPILED_NAME sed -i "s/const handler = wrapEventHandler/shitass\nconst handler = wrapEventHandler/g" + ls -Algpe .docs cat .docs/bundle.js | grep shitass -C5 - name: 🩺 Deploying documentation... From c81a9f6b8069510d26bde190338260e7021ca28d Mon Sep 17 00:00:00 2001 From: brekk Date: Thu, 16 May 2024 14:40:18 -1000 Subject: [PATCH 06/22] ci: again --- .github/workflows/docs.yml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/.github/workflows/docs.yml b/.github/workflows/docs.yml index 83b88c0..043be97 100644 --- a/.github/workflows/docs.yml +++ b/.github/workflows/docs.yml @@ -27,11 +27,13 @@ jobs: node build/src/maddoc-cli.js src echo "GITHUB_EH_TRANSPILED_NAME=$(cat .docs/bundle.js | grep _wrapEventHandler_ -m 1 | cut -d" " -f4)" >> $GITHUB_ENV echo "GITHUB_EC_TRANSPILED_NAME=$(cat .docs/bundle.js | grep _EventConstructors_ -m 1 | cut -d" " -f4)" >> $GITHUB_ENV + echo "LIST TRANSPILED VARIABLE NAMES" echo $GITHUB_EC_TRANSPILED_NAME echo $GITHUB_EH_TRANSPILED_NAME sed -i "s/const handler = wrapEventHandler/shitass\nconst handler = wrapEventHandler/g" + echo "LIST CONTENTS OF DOCS" ls -Algpe .docs - cat .docs/bundle.js | grep shitass -C5 + grep shitass -C5 .docs/bundle.js - name: 🩺 Deploying documentation... uses: JamesIves/github-pages-deploy-action@4.1.1 From bb7298f122d8e0782f1606c6fbe8d08a1f5b8621 Mon Sep 17 00:00:00 2001 From: brekk Date: Thu, 16 May 2024 14:42:50 -1000 Subject: [PATCH 07/22] ci: again --- .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 043be97..ddeb3e4 100644 --- a/.github/workflows/docs.yml +++ b/.github/workflows/docs.yml @@ -25,8 +25,8 @@ jobs: madlib install madlib compile --bundle -i madlib_modules/MadDocCli/src/Main.mad -o build/src/maddoc-cli.js node build/src/maddoc-cli.js src - echo "GITHUB_EH_TRANSPILED_NAME=$(cat .docs/bundle.js | grep _wrapEventHandler_ -m 1 | cut -d" " -f4)" >> $GITHUB_ENV - echo "GITHUB_EC_TRANSPILED_NAME=$(cat .docs/bundle.js | grep _EventConstructors_ -m 1 | cut -d" " -f4)" >> $GITHUB_ENV + echo "GITHUB_EH_TRANSPILED_NAME=$(grep _wrapEventHandler_ -m 1 .docs/bundle.js | cut -d" " -f4)" >> $GITHUB_ENV + echo "GITHUB_EC_TRANSPILED_NAME=$(grep _EventConstructors_ -m 1 .docs/bundle.js | cut -d" " -f4)" >> $GITHUB_ENV echo "LIST TRANSPILED VARIABLE NAMES" echo $GITHUB_EC_TRANSPILED_NAME echo $GITHUB_EH_TRANSPILED_NAME From 0a7d0de0436780c3bc86368dc6cd519f58c9616d Mon Sep 17 00:00:00 2001 From: brekk Date: Thu, 16 May 2024 14:48:22 -1000 Subject: [PATCH 08/22] ci: I am the master kumba --- .github/workflows/docs.yml | 4 ++++ .github/workflows/main.yml | 3 ++- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/.github/workflows/docs.yml b/.github/workflows/docs.yml index ddeb3e4..f0389e6 100644 --- a/.github/workflows/docs.yml +++ b/.github/workflows/docs.yml @@ -25,7 +25,11 @@ jobs: madlib install madlib compile --bundle -i madlib_modules/MadDocCli/src/Main.mad -o build/src/maddoc-cli.js node build/src/maddoc-cli.js src + echo "wrapEventHandler..." + grep _wrapEventHandler_ -m 1 .docs/bundle.js | cut -d" " -f4 echo "GITHUB_EH_TRANSPILED_NAME=$(grep _wrapEventHandler_ -m 1 .docs/bundle.js | cut -d" " -f4)" >> $GITHUB_ENV + echo "EventConstructors..." + grep _EventConstructors_ -m 1 .docs/bundle.js | cut -d" " -f4 echo "GITHUB_EC_TRANSPILED_NAME=$(grep _EventConstructors_ -m 1 .docs/bundle.js | cut -d" " -f4)" >> $GITHUB_ENV echo "LIST TRANSPILED VARIABLE NAMES" echo $GITHUB_EC_TRANSPILED_NAME diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index b63aedd..0df96d8 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -1,6 +1,7 @@ name: Test Madlib Project -on: [push, workflow_dispatch] +# on: [push, workflow_dispatch] +on: [workflow_dispatch] env: node-version: 20.x From c469c41c6e27aa2f7d4ada26a4961e753c67e68b Mon Sep 17 00:00:00 2001 From: brekk Date: Thu, 16 May 2024 14:51:55 -1000 Subject: [PATCH 09/22] ci: varvar --- .github/workflows/docs.yml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/docs.yml b/.github/workflows/docs.yml index f0389e6..6329e5b 100644 --- a/.github/workflows/docs.yml +++ b/.github/workflows/docs.yml @@ -27,13 +27,13 @@ jobs: node build/src/maddoc-cli.js src echo "wrapEventHandler..." grep _wrapEventHandler_ -m 1 .docs/bundle.js | cut -d" " -f4 - echo "GITHUB_EH_TRANSPILED_NAME=$(grep _wrapEventHandler_ -m 1 .docs/bundle.js | cut -d" " -f4)" >> $GITHUB_ENV + echo "EH_TRANSPILED_NAME=$(grep _wrapEventHandler_ -m 1 .docs/bundle.js | cut -d" " -f4)" >> $GITHUB_ENV echo "EventConstructors..." grep _EventConstructors_ -m 1 .docs/bundle.js | cut -d" " -f4 - echo "GITHUB_EC_TRANSPILED_NAME=$(grep _EventConstructors_ -m 1 .docs/bundle.js | cut -d" " -f4)" >> $GITHUB_ENV + echo "EC_TRANSPILED_NAME=$(grep _EventConstructors_ -m 1 .docs/bundle.js | cut -d" " -f4)" >> $GITHUB_ENV echo "LIST TRANSPILED VARIABLE NAMES" - echo $GITHUB_EC_TRANSPILED_NAME - echo $GITHUB_EH_TRANSPILED_NAME + echo $EC_TRANSPILED_NAME + echo $EH_TRANSPILED_NAME sed -i "s/const handler = wrapEventHandler/shitass\nconst handler = wrapEventHandler/g" echo "LIST CONTENTS OF DOCS" ls -Algpe .docs From c60928a1e004e2f1fc945ce042707b79faa69843 Mon Sep 17 00:00:00 2001 From: brekk Date: Thu, 16 May 2024 14:55:57 -1000 Subject: [PATCH 10/22] ci: closer --- .github/workflows/docs.yml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/docs.yml b/.github/workflows/docs.yml index 6329e5b..275894c 100644 --- a/.github/workflows/docs.yml +++ b/.github/workflows/docs.yml @@ -27,13 +27,13 @@ jobs: node build/src/maddoc-cli.js src echo "wrapEventHandler..." grep _wrapEventHandler_ -m 1 .docs/bundle.js | cut -d" " -f4 - echo "EH_TRANSPILED_NAME=$(grep _wrapEventHandler_ -m 1 .docs/bundle.js | cut -d" " -f4)" >> $GITHUB_ENV + echo "EH_TRANSPILED_NAME=$(grep _wrapEventHandler_ -m 1 .docs/bundle.js | cut -d" " -f4)" >> "$GITHUB_ENV" echo "EventConstructors..." grep _EventConstructors_ -m 1 .docs/bundle.js | cut -d" " -f4 - echo "EC_TRANSPILED_NAME=$(grep _EventConstructors_ -m 1 .docs/bundle.js | cut -d" " -f4)" >> $GITHUB_ENV + echo "EC_TRANSPILED_NAME=$(grep _EventConstructors_ -m 1 .docs/bundle.js | cut -d" " -f4)" >> "$GITHUB_ENV" echo "LIST TRANSPILED VARIABLE NAMES" - echo $EC_TRANSPILED_NAME - echo $EH_TRANSPILED_NAME + echo "$EC_TRANSPILED_NAME" + echo "$EH_TRANSPILED_NAME" sed -i "s/const handler = wrapEventHandler/shitass\nconst handler = wrapEventHandler/g" echo "LIST CONTENTS OF DOCS" ls -Algpe .docs From 1587a8fe25e0b65ad0bbee48966ab38a2fa1bc3c Mon Sep 17 00:00:00 2001 From: brekk Date: Thu, 16 May 2024 15:04:35 -1000 Subject: [PATCH 11/22] ci: more more more --- .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 275894c..8d8db91 100644 --- a/.github/workflows/docs.yml +++ b/.github/workflows/docs.yml @@ -32,9 +32,9 @@ jobs: grep _EventConstructors_ -m 1 .docs/bundle.js | cut -d" " -f4 echo "EC_TRANSPILED_NAME=$(grep _EventConstructors_ -m 1 .docs/bundle.js | cut -d" " -f4)" >> "$GITHUB_ENV" echo "LIST TRANSPILED VARIABLE NAMES" - echo "$EC_TRANSPILED_NAME" - echo "$EH_TRANSPILED_NAME" - sed -i "s/const handler = wrapEventHandler/shitass\nconst handler = wrapEventHandler/g" + echo "event constructor: $EC_TRANSPILED_NAME" + echo "event handler: $EH_TRANSPILED_NAME" + sed -i "s/const handler = wrapEventHandler/shitass\nconst handler = wrapEventHandler/g" .docs/bundle.js echo "LIST CONTENTS OF DOCS" ls -Algpe .docs grep shitass -C5 .docs/bundle.js From 7e36b049ef1e2fe162e24bdef9cd21996a3141fc Mon Sep 17 00:00:00 2001 From: brekk Date: Thu, 16 May 2024 15:07:33 -1000 Subject: [PATCH 12/22] ci: more more more --- .github/workflows/docs.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.github/workflows/docs.yml b/.github/workflows/docs.yml index 8d8db91..6d94d4b 100644 --- a/.github/workflows/docs.yml +++ b/.github/workflows/docs.yml @@ -25,11 +25,14 @@ jobs: madlib install madlib compile --bundle -i madlib_modules/MadDocCli/src/Main.mad -o build/src/maddoc-cli.js node build/src/maddoc-cli.js src + ls -Algpe .docs echo "wrapEventHandler..." grep _wrapEventHandler_ -m 1 .docs/bundle.js | cut -d" " -f4 + echo "EH_TRANSPILED_NAME=$(grep _wrapEventHandler_ -m 1 .docs/bundle.js | cut -d" " -f4)" echo "EH_TRANSPILED_NAME=$(grep _wrapEventHandler_ -m 1 .docs/bundle.js | cut -d" " -f4)" >> "$GITHUB_ENV" echo "EventConstructors..." grep _EventConstructors_ -m 1 .docs/bundle.js | cut -d" " -f4 + echo "EC_TRANSPILED_NAME=$(grep _EventConstructors_ -m 1 .docs/bundle.js | cut -d" " -f4)" echo "EC_TRANSPILED_NAME=$(grep _EventConstructors_ -m 1 .docs/bundle.js | cut -d" " -f4)" >> "$GITHUB_ENV" echo "LIST TRANSPILED VARIABLE NAMES" echo "event constructor: $EC_TRANSPILED_NAME" From 9ba350399949070388a317ce97c6f60b1fda761f Mon Sep 17 00:00:00 2001 From: brekk Date: Thu, 16 May 2024 15:08:45 -1000 Subject: [PATCH 13/22] ci: more more more --- .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 6d94d4b..172bb03 100644 --- a/.github/workflows/docs.yml +++ b/.github/workflows/docs.yml @@ -25,7 +25,7 @@ jobs: madlib install madlib compile --bundle -i madlib_modules/MadDocCli/src/Main.mad -o build/src/maddoc-cli.js node build/src/maddoc-cli.js src - ls -Algpe .docs + ls -Algp .docs echo "wrapEventHandler..." grep _wrapEventHandler_ -m 1 .docs/bundle.js | cut -d" " -f4 echo "EH_TRANSPILED_NAME=$(grep _wrapEventHandler_ -m 1 .docs/bundle.js | cut -d" " -f4)" @@ -36,10 +36,10 @@ jobs: echo "EC_TRANSPILED_NAME=$(grep _EventConstructors_ -m 1 .docs/bundle.js | cut -d" " -f4)" >> "$GITHUB_ENV" echo "LIST TRANSPILED VARIABLE NAMES" echo "event constructor: $EC_TRANSPILED_NAME" - echo "event handler: $EH_TRANSPILED_NAME" + echo "event handler: $EH_TRANSPILED_NAME" sed -i "s/const handler = wrapEventHandler/shitass\nconst handler = wrapEventHandler/g" .docs/bundle.js echo "LIST CONTENTS OF DOCS" - ls -Algpe .docs + ls -Algp .docs grep shitass -C5 .docs/bundle.js - name: 🩺 Deploying documentation... From f0f1c87f7beed411c3ccb1e797b03f78bb96b06d Mon Sep 17 00:00:00 2001 From: brekk Date: Thu, 16 May 2024 15:10:50 -1000 Subject: [PATCH 14/22] ci: more more more --- .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 172bb03..135754e 100644 --- a/.github/workflows/docs.yml +++ b/.github/workflows/docs.yml @@ -29,11 +29,11 @@ jobs: echo "wrapEventHandler..." grep _wrapEventHandler_ -m 1 .docs/bundle.js | cut -d" " -f4 echo "EH_TRANSPILED_NAME=$(grep _wrapEventHandler_ -m 1 .docs/bundle.js | cut -d" " -f4)" - echo "EH_TRANSPILED_NAME=$(grep _wrapEventHandler_ -m 1 .docs/bundle.js | cut -d" " -f4)" >> "$GITHUB_ENV" + echo "EH_TRANSPILED_NAME=\"$(grep _wrapEventHandler_ -m 1 .docs/bundle.js | cut -d" " -f4)\"" >> "$GITHUB_ENV" echo "EventConstructors..." grep _EventConstructors_ -m 1 .docs/bundle.js | cut -d" " -f4 echo "EC_TRANSPILED_NAME=$(grep _EventConstructors_ -m 1 .docs/bundle.js | cut -d" " -f4)" - echo "EC_TRANSPILED_NAME=$(grep _EventConstructors_ -m 1 .docs/bundle.js | cut -d" " -f4)" >> "$GITHUB_ENV" + echo "EC_TRANSPILED_NAME=\"$(grep _EventConstructors_ -m 1 .docs/bundle.js | cut -d" " -f4)\"" >> "$GITHUB_ENV" echo "LIST TRANSPILED VARIABLE NAMES" echo "event constructor: $EC_TRANSPILED_NAME" echo "event handler: $EH_TRANSPILED_NAME" From b2711427d215b6be1c1155fed190c276fee628ac Mon Sep 17 00:00:00 2001 From: brekk Date: Thu, 16 May 2024 15:19:03 -1000 Subject: [PATCH 15/22] ci: more more more --- .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 135754e..5e312a0 100644 --- a/.github/workflows/docs.yml +++ b/.github/workflows/docs.yml @@ -28,11 +28,11 @@ jobs: ls -Algp .docs echo "wrapEventHandler..." grep _wrapEventHandler_ -m 1 .docs/bundle.js | cut -d" " -f4 - echo "EH_TRANSPILED_NAME=$(grep _wrapEventHandler_ -m 1 .docs/bundle.js | cut -d" " -f4)" + EH_TRANSPILED_NAME=\"$(grep _wrapEventHandler_ -m 1 .docs/bundle.js | cut -d" " -f4)\" echo "EH_TRANSPILED_NAME=\"$(grep _wrapEventHandler_ -m 1 .docs/bundle.js | cut -d" " -f4)\"" >> "$GITHUB_ENV" echo "EventConstructors..." grep _EventConstructors_ -m 1 .docs/bundle.js | cut -d" " -f4 - echo "EC_TRANSPILED_NAME=$(grep _EventConstructors_ -m 1 .docs/bundle.js | cut -d" " -f4)" + EC_TRANSPILED_NAME=\"$(grep _EventConstructors_ -m 1 .docs/bundle.js | cut -d" " -f4)\" echo "EC_TRANSPILED_NAME=\"$(grep _EventConstructors_ -m 1 .docs/bundle.js | cut -d" " -f4)\"" >> "$GITHUB_ENV" echo "LIST TRANSPILED VARIABLE NAMES" echo "event constructor: $EC_TRANSPILED_NAME" From 057aff75d130fa3025d0d57792f49f89b61e9cae Mon Sep 17 00:00:00 2001 From: brekk Date: Thu, 16 May 2024 15:22:36 -1000 Subject: [PATCH 16/22] ci: more more more --- .github/workflows/docs.yml | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/.github/workflows/docs.yml b/.github/workflows/docs.yml index 5e312a0..810c461 100644 --- a/.github/workflows/docs.yml +++ b/.github/workflows/docs.yml @@ -25,7 +25,6 @@ jobs: madlib install madlib compile --bundle -i madlib_modules/MadDocCli/src/Main.mad -o build/src/maddoc-cli.js node build/src/maddoc-cli.js src - ls -Algp .docs echo "wrapEventHandler..." grep _wrapEventHandler_ -m 1 .docs/bundle.js | cut -d" " -f4 EH_TRANSPILED_NAME=\"$(grep _wrapEventHandler_ -m 1 .docs/bundle.js | cut -d" " -f4)\" @@ -37,10 +36,9 @@ jobs: echo "LIST TRANSPILED VARIABLE NAMES" echo "event constructor: $EC_TRANSPILED_NAME" echo "event handler: $EH_TRANSPILED_NAME" - sed -i "s/const handler = wrapEventHandler/shitass\nconst handler = wrapEventHandler/g" .docs/bundle.js + sed -i "s/const handler = wrapEventHandler/const wrapEventHandler = $(echo $EH_TRANSPILED_NAME);\nconst EventConstructors = $(echo $EC_TRANSPILED_NAME);\nconst handler = wrapEventHandler/g" .docs/bundle.js echo "LIST CONTENTS OF DOCS" - ls -Algp .docs - grep shitass -C5 .docs/bundle.js + grep "handler =" -C5 .docs/bundle.js - name: 🩺 Deploying documentation... uses: JamesIves/github-pages-deploy-action@4.1.1 From 91056c658975f0165f3dd24a214318aa7829ec0f Mon Sep 17 00:00:00 2001 From: brekk Date: Thu, 16 May 2024 15:24:29 -1000 Subject: [PATCH 17/22] ci: more more more --- .github/workflows/docs.yml | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/.github/workflows/docs.yml b/.github/workflows/docs.yml index 810c461..7da043e 100644 --- a/.github/workflows/docs.yml +++ b/.github/workflows/docs.yml @@ -27,18 +27,16 @@ jobs: node build/src/maddoc-cli.js src echo "wrapEventHandler..." grep _wrapEventHandler_ -m 1 .docs/bundle.js | cut -d" " -f4 - EH_TRANSPILED_NAME=\"$(grep _wrapEventHandler_ -m 1 .docs/bundle.js | cut -d" " -f4)\" - echo "EH_TRANSPILED_NAME=\"$(grep _wrapEventHandler_ -m 1 .docs/bundle.js | cut -d" " -f4)\"" >> "$GITHUB_ENV" + EH_TRANSPILED_NAME=$(grep _wrapEventHandler_ -m 1 .docs/bundle.js | cut -d" " -f4) echo "EventConstructors..." grep _EventConstructors_ -m 1 .docs/bundle.js | cut -d" " -f4 - EC_TRANSPILED_NAME=\"$(grep _EventConstructors_ -m 1 .docs/bundle.js | cut -d" " -f4)\" - echo "EC_TRANSPILED_NAME=\"$(grep _EventConstructors_ -m 1 .docs/bundle.js | cut -d" " -f4)\"" >> "$GITHUB_ENV" + EC_TRANSPILED_NAME=$(grep _EventConstructors_ -m 1 .docs/bundle.js | cut -d" " -f4) echo "LIST TRANSPILED VARIABLE NAMES" echo "event constructor: $EC_TRANSPILED_NAME" echo "event handler: $EH_TRANSPILED_NAME" sed -i "s/const handler = wrapEventHandler/const wrapEventHandler = $(echo $EH_TRANSPILED_NAME);\nconst EventConstructors = $(echo $EC_TRANSPILED_NAME);\nconst handler = wrapEventHandler/g" .docs/bundle.js echo "LIST CONTENTS OF DOCS" - grep "handler =" -C5 .docs/bundle.js + grep "handler = wrapEventHandler" -C5 .docs/bundle.js - name: 🩺 Deploying documentation... uses: JamesIves/github-pages-deploy-action@4.1.1 From 012be449965d87a6cb9e151f512a1ea66523beac Mon Sep 17 00:00:00 2001 From: brekk Date: Thu, 16 May 2024 15:26:58 -1000 Subject: [PATCH 18/22] ci: more more more --- .github/workflows/docs.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/docs.yml b/.github/workflows/docs.yml index 7da043e..93bda13 100644 --- a/.github/workflows/docs.yml +++ b/.github/workflows/docs.yml @@ -34,7 +34,7 @@ jobs: echo "LIST TRANSPILED VARIABLE NAMES" echo "event constructor: $EC_TRANSPILED_NAME" echo "event handler: $EH_TRANSPILED_NAME" - sed -i "s/const handler = wrapEventHandler/const wrapEventHandler = $(echo $EH_TRANSPILED_NAME);\nconst EventConstructors = $(echo $EC_TRANSPILED_NAME);\nconst handler = wrapEventHandler/g" .docs/bundle.js + sed -i "s/const handler = wrapEventHandler/const wrapEventHandler = $($EH_TRANSPILED_NAME);\nconst EventConstructors = $($EC_TRANSPILED_NAME);\nconst handler = wrapEventHandler/g" .docs/bundle.js echo "LIST CONTENTS OF DOCS" grep "handler = wrapEventHandler" -C5 .docs/bundle.js From 82791f5db4c9a5e6b327f3945a5933f544f59a30 Mon Sep 17 00:00:00 2001 From: brekk Date: Thu, 16 May 2024 15:28:49 -1000 Subject: [PATCH 19/22] ci: more more more --- .github/workflows/docs.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/docs.yml b/.github/workflows/docs.yml index 93bda13..7da043e 100644 --- a/.github/workflows/docs.yml +++ b/.github/workflows/docs.yml @@ -34,7 +34,7 @@ jobs: echo "LIST TRANSPILED VARIABLE NAMES" echo "event constructor: $EC_TRANSPILED_NAME" echo "event handler: $EH_TRANSPILED_NAME" - sed -i "s/const handler = wrapEventHandler/const wrapEventHandler = $($EH_TRANSPILED_NAME);\nconst EventConstructors = $($EC_TRANSPILED_NAME);\nconst handler = wrapEventHandler/g" .docs/bundle.js + sed -i "s/const handler = wrapEventHandler/const wrapEventHandler = $(echo $EH_TRANSPILED_NAME);\nconst EventConstructors = $(echo $EC_TRANSPILED_NAME);\nconst handler = wrapEventHandler/g" .docs/bundle.js echo "LIST CONTENTS OF DOCS" grep "handler = wrapEventHandler" -C5 .docs/bundle.js From ad075d32f3205dd63780d37be4e7bfc0c10db69c Mon Sep 17 00:00:00 2001 From: brekk Date: Thu, 16 May 2024 15:58:42 -1000 Subject: [PATCH 20/22] temporarily add madlib_modules to the build --- .../MadDoc/.github/workflows/release.yml | 67 + .../madlib_modules/MadDoc/.gitignore | 11 + .../madlib_modules/MadDoc/.madlibignore | 3 + .../workflows/madlib_modules/MadDoc/README.md | 13 + .../madlib_modules/MadDoc/madlib.json | 21 + .../madlib_modules/MadDoc/package-lock.json | 5025 ++++++++++++++++ .../madlib_modules/MadDoc/package.json | 36 + .../madlib_modules/MadDoc/src/App.mad | 148 + .../madlib_modules/MadDoc/src/Main.mad | 15 + .../madlib_modules/MadDoc/src/Markdown.mad | 17 + .../MadDoc/src/Parser/Documentation.mad | 253 + .../MadDoc/src/PathResolver.mad | 206 + .../MadDoc/src/PathResolver.spec.mad | 209 + .../madlib_modules/MadDoc/src/State.mad | 7 + .../madlib_modules/MadDoc/src/TargetInfo.mad | 1 + .../madlib_modules/MadDoc/src/Views/Alias.mad | 50 + .../MadDoc/src/Views/Breadcrumbs.mad | 66 + .../MadDoc/src/Views/Description.mad | 16 + .../MadDoc/src/Views/Etiquette.mad | 10 + .../MadDoc/src/Views/Example.mad | 19 + .../MadDoc/src/Views/Expression.mad | 39 + .../MadDoc/src/Views/Header.mad | 67 + .../MadDoc/src/Views/Instance.mad | 49 + .../MadDoc/src/Views/Interface.mad | 56 + .../MadDoc/src/Views/SideMenu.mad | 135 + .../madlib_modules/MadDoc/src/Views/Since.mad | 19 + .../MadDoc/src/Views/TargetedItem.mad | 28 + .../madlib_modules/MadDoc/src/Views/Title.mad | 37 + .../madlib_modules/MadDoc/src/Views/Type.mad | 84 + .../MadDoc/src/Views/Typing.mad | 13 + .../madlib_modules/MadDoc/src/index.html | 11 + .../MadDoc/src/styles/main.scss | 442 ++ .../madlib_modules/MadDoc/version.lock | 18 + .../MadDocCli/.github/workflows/build.yml | 33 + .../MadDocCli/.github/workflows/release.yml | 67 + .../madlib_modules/MadDocCli/.gitignore | 12 + .../madlib_modules/MadDocCli/README.md | 3 + .../madlib_modules/MadDocCli/madlib.json | 17 + .../MadDocCli/package-lock.json | 138 + .../madlib_modules/MadDocCli/package.json | 16 + .../madlib_modules/MadDocCli/src/Build.mad | 204 + .../MadDocCli/src/Build.spec.mad | 371 ++ .../madlib_modules/MadDocCli/src/IOUtils.mad | 34 + .../madlib_modules/MadDocCli/src/Main.mad | 42 + .../MadDocCli/src/Main.spec.mad | 38 + .../madlib_modules/MadDocCli/version.lock | 18 + .../.github/workflows/release.yml | 67 + .../MadMarkdownParser/.gitignore | 5 + .../MadMarkdownParser/README.md | 61 + .../MadMarkdownParser/madlib.json | 10 + .../MadMarkdownParser/src/Example.mad | 60 + .../MadMarkdownParser/src/Main.mad | 317 ++ .../MadMarkdownParser/version.lock | 38 + .../.github/workflows/release.yml | 67 + .../MadMarkdownRenderer/.gitignore | 4 + .../MadMarkdownRenderer/README.md | 26 + .../MadMarkdownRenderer/madlib.json | 21 + .../MadMarkdownRenderer/package-lock.json | 5004 ++++++++++++++++ .../MadMarkdownRenderer/package.json | 33 + .../MadMarkdownRenderer/src/Config.mad | 22 + .../MadMarkdownRenderer/src/Example.mad | 30 + .../MadMarkdownRenderer/src/Main.mad | 174 + .../MadMarkdownRenderer/src/index.html | 12 + .../MadMarkdownRenderer/src/madlib-logo.png | Bin 0 -> 12052 bytes .../MadMarkdownRenderer/src/styles/main.scss | 0 .../MadMarkdownRenderer/version.lock | 16 + .../MadUI/.github/workflows/release.yml | 67 + .../workflows/madlib_modules/MadUI/.gitignore | 7 + .../madlib_modules/MadUI/.madlibignore | 6 + .../workflows/madlib_modules/MadUI/README.md | 65 + .../madlib_modules/MadUI/madlib.json | 9 + .../madlib_modules/MadUI/package-lock.json | 145 + .../madlib_modules/MadUI/package.json | 18 + .../madlib_modules/MadUI/src/Action.mad | 67 + .../madlib_modules/MadUI/src/Attribute.mad | 685 +++ .../madlib_modules/MadUI/src/Config.mad | 27 + .../madlib_modules/MadUI/src/Core.mad | 118 + .../madlib_modules/MadUI/src/CoreUtils.mad | 28 + .../madlib_modules/MadUI/src/Element.mad | 356 ++ .../madlib_modules/MadUI/src/Event.mad | 200 + .../madlib_modules/MadUI/src/Key.mad | 366 ++ .../madlib_modules/MadUI/src/Main.mad | 1009 ++++ .../madlib_modules/MadUI/src/Subscription.mad | 6 + .../madlib_modules/MadUI/version.lock | 956 ++++ .gitignore | 2 +- .../MadDoc/.github/workflows/release.yml | 69 + madlib_modules/MadDoc/.gitignore | 11 + madlib_modules/MadDoc/.madlibignore | 3 + madlib_modules/MadDoc/README.md | 13 + madlib_modules/MadDoc/madlib.json | 21 + madlib_modules/MadDoc/package-lock.json | 5044 +++++++++++++++++ madlib_modules/MadDoc/package.json | 36 + madlib_modules/MadDoc/src/App.mad | 148 + madlib_modules/MadDoc/src/Main.mad | 15 + madlib_modules/MadDoc/src/Markdown.mad | 17 + .../MadDoc/src/Parser/Documentation.mad | 253 + madlib_modules/MadDoc/src/PathResolver.mad | 197 + .../MadDoc/src/PathResolver.spec.mad | 189 + madlib_modules/MadDoc/src/State.mad | 7 + madlib_modules/MadDoc/src/TargetInfo.mad | 1 + madlib_modules/MadDoc/src/Views/Alias.mad | 50 + .../MadDoc/src/Views/Breadcrumbs.mad | 66 + .../MadDoc/src/Views/Description.mad | 16 + madlib_modules/MadDoc/src/Views/Etiquette.mad | 10 + madlib_modules/MadDoc/src/Views/Example.mad | 19 + .../MadDoc/src/Views/Expression.mad | 39 + madlib_modules/MadDoc/src/Views/Header.mad | 67 + madlib_modules/MadDoc/src/Views/Instance.mad | 49 + madlib_modules/MadDoc/src/Views/Interface.mad | 56 + madlib_modules/MadDoc/src/Views/SideMenu.mad | 135 + madlib_modules/MadDoc/src/Views/Since.mad | 19 + .../MadDoc/src/Views/TargetedItem.mad | 28 + madlib_modules/MadDoc/src/Views/Title.mad | 37 + madlib_modules/MadDoc/src/Views/Type.mad | 84 + madlib_modules/MadDoc/src/Views/Typing.mad | 13 + madlib_modules/MadDoc/src/index.html | 11 + madlib_modules/MadDoc/src/styles/main.scss | 442 ++ madlib_modules/MadDoc/version.lock | 18 + .../MadDocCli/.github/workflows/build.yml | 39 + .../MadDocCli/.github/workflows/release.yml | 69 + madlib_modules/MadDocCli/.gitignore | 13 + madlib_modules/MadDocCli/README.md | 3 + madlib_modules/MadDocCli/madlib.json | 17 + madlib_modules/MadDocCli/package-lock.json | 2983 ++++++++++ madlib_modules/MadDocCli/package.json | 16 + madlib_modules/MadDocCli/src/Build.mad | 199 + madlib_modules/MadDocCli/src/Build.spec.mad | 371 ++ madlib_modules/MadDocCli/src/IOUtils.mad | 34 + madlib_modules/MadDocCli/src/Main.mad | 42 + madlib_modules/MadDocCli/src/Main.mjs | 1197 ++++ madlib_modules/MadDocCli/src/Main.spec.mad | 38 + madlib_modules/MadDocCli/version.lock | 18 + .../.github/workflows/release.yml | 67 + madlib_modules/MadMarkdownParser/.gitignore | 7 + madlib_modules/MadMarkdownParser/README.md | 61 + madlib_modules/MadMarkdownParser/madlib.json | 10 + madlib_modules/MadMarkdownParser/src/Main.mad | 317 ++ madlib_modules/MadMarkdownParser/version.lock | 72 + .../.github/workflows/release.yml | 67 + madlib_modules/MadMarkdownRenderer/.gitignore | 5 + madlib_modules/MadMarkdownRenderer/README.md | 27 + .../MadMarkdownRenderer/madlib.json | 21 + .../MadMarkdownRenderer/package-lock.json | 5022 ++++++++++++++++ .../MadMarkdownRenderer/package.json | 33 + .../MadMarkdownRenderer/src/Config.mad | 22 + .../MadMarkdownRenderer/src/Example.mad | 30 + .../MadMarkdownRenderer/src/Main.mad | 174 + .../MadMarkdownRenderer/src/index.html | 12 + .../MadMarkdownRenderer/src/madlib-logo.png | Bin 0 -> 12052 bytes .../MadMarkdownRenderer/src/styles/main.scss | 0 .../MadMarkdownRenderer/version.lock | 30 + .../MadUI/.github/workflows/release.yml | 67 + madlib_modules/MadUI/.gitignore | 7 + madlib_modules/MadUI/.madlibignore | 6 + madlib_modules/MadUI/README.md | 65 + madlib_modules/MadUI/madlib.json | 9 + madlib_modules/MadUI/package-lock.json | 348 ++ madlib_modules/MadUI/package.json | 18 + madlib_modules/MadUI/src/Action.mad | 67 + madlib_modules/MadUI/src/Attribute.mad | 685 +++ madlib_modules/MadUI/src/Config.mad | 27 + madlib_modules/MadUI/src/Core.mad | 118 + madlib_modules/MadUI/src/CoreUtils.mad | 28 + madlib_modules/MadUI/src/Element.mad | 356 ++ madlib_modules/MadUI/src/Event.mad | 200 + madlib_modules/MadUI/src/Key.mad | 366 ++ madlib_modules/MadUI/src/Main.mad | 1009 ++++ madlib_modules/MadUI/src/Subscription.mad | 6 + madlib_modules/MadUI/version.lock | 972 ++++ .../clinic/.github/workflows/release.yml | 38 + madlib_modules/clinic/.gitignore | 2 + madlib_modules/clinic/README.md | 3 + madlib_modules/clinic/madlib.json | 9 + madlib_modules/clinic/src/Buffer.mad | 23 + madlib_modules/clinic/src/Clinic.mad | 174 + madlib_modules/clinic/src/Constants.mad | 32 + madlib_modules/clinic/src/Main.mad | 60 + 177 files changed, 41181 insertions(+), 1 deletion(-) create mode 100644 .github/workflows/madlib_modules/MadDoc/.github/workflows/release.yml create mode 100644 .github/workflows/madlib_modules/MadDoc/.gitignore create mode 100644 .github/workflows/madlib_modules/MadDoc/.madlibignore create mode 100644 .github/workflows/madlib_modules/MadDoc/README.md create mode 100644 .github/workflows/madlib_modules/MadDoc/madlib.json create mode 100644 .github/workflows/madlib_modules/MadDoc/package-lock.json create mode 100644 .github/workflows/madlib_modules/MadDoc/package.json create mode 100644 .github/workflows/madlib_modules/MadDoc/src/App.mad create mode 100644 .github/workflows/madlib_modules/MadDoc/src/Main.mad create mode 100644 .github/workflows/madlib_modules/MadDoc/src/Markdown.mad create mode 100644 .github/workflows/madlib_modules/MadDoc/src/Parser/Documentation.mad create mode 100644 .github/workflows/madlib_modules/MadDoc/src/PathResolver.mad create mode 100644 .github/workflows/madlib_modules/MadDoc/src/PathResolver.spec.mad create mode 100644 .github/workflows/madlib_modules/MadDoc/src/State.mad create mode 100644 .github/workflows/madlib_modules/MadDoc/src/TargetInfo.mad create mode 100644 .github/workflows/madlib_modules/MadDoc/src/Views/Alias.mad create mode 100644 .github/workflows/madlib_modules/MadDoc/src/Views/Breadcrumbs.mad create mode 100644 .github/workflows/madlib_modules/MadDoc/src/Views/Description.mad create mode 100644 .github/workflows/madlib_modules/MadDoc/src/Views/Etiquette.mad create mode 100644 .github/workflows/madlib_modules/MadDoc/src/Views/Example.mad create mode 100644 .github/workflows/madlib_modules/MadDoc/src/Views/Expression.mad create mode 100644 .github/workflows/madlib_modules/MadDoc/src/Views/Header.mad create mode 100644 .github/workflows/madlib_modules/MadDoc/src/Views/Instance.mad create mode 100644 .github/workflows/madlib_modules/MadDoc/src/Views/Interface.mad create mode 100644 .github/workflows/madlib_modules/MadDoc/src/Views/SideMenu.mad create mode 100644 .github/workflows/madlib_modules/MadDoc/src/Views/Since.mad create mode 100644 .github/workflows/madlib_modules/MadDoc/src/Views/TargetedItem.mad create mode 100644 .github/workflows/madlib_modules/MadDoc/src/Views/Title.mad create mode 100644 .github/workflows/madlib_modules/MadDoc/src/Views/Type.mad create mode 100644 .github/workflows/madlib_modules/MadDoc/src/Views/Typing.mad create mode 100644 .github/workflows/madlib_modules/MadDoc/src/index.html create mode 100644 .github/workflows/madlib_modules/MadDoc/src/styles/main.scss create mode 100644 .github/workflows/madlib_modules/MadDoc/version.lock create mode 100644 .github/workflows/madlib_modules/MadDocCli/.github/workflows/build.yml create mode 100644 .github/workflows/madlib_modules/MadDocCli/.github/workflows/release.yml create mode 100644 .github/workflows/madlib_modules/MadDocCli/.gitignore create mode 100644 .github/workflows/madlib_modules/MadDocCli/README.md create mode 100644 .github/workflows/madlib_modules/MadDocCli/madlib.json create mode 100644 .github/workflows/madlib_modules/MadDocCli/package-lock.json create mode 100644 .github/workflows/madlib_modules/MadDocCli/package.json create mode 100644 .github/workflows/madlib_modules/MadDocCli/src/Build.mad create mode 100644 .github/workflows/madlib_modules/MadDocCli/src/Build.spec.mad create mode 100644 .github/workflows/madlib_modules/MadDocCli/src/IOUtils.mad create mode 100644 .github/workflows/madlib_modules/MadDocCli/src/Main.mad create mode 100644 .github/workflows/madlib_modules/MadDocCli/src/Main.spec.mad create mode 100644 .github/workflows/madlib_modules/MadDocCli/version.lock create mode 100644 .github/workflows/madlib_modules/MadMarkdownParser/.github/workflows/release.yml create mode 100644 .github/workflows/madlib_modules/MadMarkdownParser/.gitignore create mode 100644 .github/workflows/madlib_modules/MadMarkdownParser/README.md create mode 100644 .github/workflows/madlib_modules/MadMarkdownParser/madlib.json create mode 100644 .github/workflows/madlib_modules/MadMarkdownParser/src/Example.mad create mode 100644 .github/workflows/madlib_modules/MadMarkdownParser/src/Main.mad create mode 100644 .github/workflows/madlib_modules/MadMarkdownParser/version.lock create mode 100644 .github/workflows/madlib_modules/MadMarkdownRenderer/.github/workflows/release.yml create mode 100644 .github/workflows/madlib_modules/MadMarkdownRenderer/.gitignore create mode 100644 .github/workflows/madlib_modules/MadMarkdownRenderer/README.md create mode 100644 .github/workflows/madlib_modules/MadMarkdownRenderer/madlib.json create mode 100644 .github/workflows/madlib_modules/MadMarkdownRenderer/package-lock.json create mode 100644 .github/workflows/madlib_modules/MadMarkdownRenderer/package.json create mode 100644 .github/workflows/madlib_modules/MadMarkdownRenderer/src/Config.mad create mode 100644 .github/workflows/madlib_modules/MadMarkdownRenderer/src/Example.mad create mode 100644 .github/workflows/madlib_modules/MadMarkdownRenderer/src/Main.mad create mode 100644 .github/workflows/madlib_modules/MadMarkdownRenderer/src/index.html create mode 100644 .github/workflows/madlib_modules/MadMarkdownRenderer/src/madlib-logo.png create mode 100644 .github/workflows/madlib_modules/MadMarkdownRenderer/src/styles/main.scss create mode 100644 .github/workflows/madlib_modules/MadMarkdownRenderer/version.lock create mode 100644 .github/workflows/madlib_modules/MadUI/.github/workflows/release.yml create mode 100644 .github/workflows/madlib_modules/MadUI/.gitignore create mode 100644 .github/workflows/madlib_modules/MadUI/.madlibignore create mode 100644 .github/workflows/madlib_modules/MadUI/README.md create mode 100644 .github/workflows/madlib_modules/MadUI/madlib.json create mode 100644 .github/workflows/madlib_modules/MadUI/package-lock.json create mode 100644 .github/workflows/madlib_modules/MadUI/package.json create mode 100644 .github/workflows/madlib_modules/MadUI/src/Action.mad create mode 100644 .github/workflows/madlib_modules/MadUI/src/Attribute.mad create mode 100644 .github/workflows/madlib_modules/MadUI/src/Config.mad create mode 100644 .github/workflows/madlib_modules/MadUI/src/Core.mad create mode 100644 .github/workflows/madlib_modules/MadUI/src/CoreUtils.mad create mode 100644 .github/workflows/madlib_modules/MadUI/src/Element.mad create mode 100644 .github/workflows/madlib_modules/MadUI/src/Event.mad create mode 100644 .github/workflows/madlib_modules/MadUI/src/Key.mad create mode 100644 .github/workflows/madlib_modules/MadUI/src/Main.mad create mode 100644 .github/workflows/madlib_modules/MadUI/src/Subscription.mad create mode 100644 .github/workflows/madlib_modules/MadUI/version.lock create mode 100644 madlib_modules/MadDoc/.github/workflows/release.yml create mode 100644 madlib_modules/MadDoc/.gitignore create mode 100644 madlib_modules/MadDoc/.madlibignore create mode 100644 madlib_modules/MadDoc/README.md create mode 100644 madlib_modules/MadDoc/madlib.json create mode 100644 madlib_modules/MadDoc/package-lock.json create mode 100644 madlib_modules/MadDoc/package.json create mode 100644 madlib_modules/MadDoc/src/App.mad create mode 100644 madlib_modules/MadDoc/src/Main.mad create mode 100644 madlib_modules/MadDoc/src/Markdown.mad create mode 100644 madlib_modules/MadDoc/src/Parser/Documentation.mad create mode 100644 madlib_modules/MadDoc/src/PathResolver.mad create mode 100644 madlib_modules/MadDoc/src/PathResolver.spec.mad create mode 100644 madlib_modules/MadDoc/src/State.mad create mode 100644 madlib_modules/MadDoc/src/TargetInfo.mad create mode 100644 madlib_modules/MadDoc/src/Views/Alias.mad create mode 100644 madlib_modules/MadDoc/src/Views/Breadcrumbs.mad create mode 100644 madlib_modules/MadDoc/src/Views/Description.mad create mode 100644 madlib_modules/MadDoc/src/Views/Etiquette.mad create mode 100644 madlib_modules/MadDoc/src/Views/Example.mad create mode 100644 madlib_modules/MadDoc/src/Views/Expression.mad create mode 100644 madlib_modules/MadDoc/src/Views/Header.mad create mode 100644 madlib_modules/MadDoc/src/Views/Instance.mad create mode 100644 madlib_modules/MadDoc/src/Views/Interface.mad create mode 100644 madlib_modules/MadDoc/src/Views/SideMenu.mad create mode 100644 madlib_modules/MadDoc/src/Views/Since.mad create mode 100644 madlib_modules/MadDoc/src/Views/TargetedItem.mad create mode 100644 madlib_modules/MadDoc/src/Views/Title.mad create mode 100644 madlib_modules/MadDoc/src/Views/Type.mad create mode 100644 madlib_modules/MadDoc/src/Views/Typing.mad create mode 100644 madlib_modules/MadDoc/src/index.html create mode 100644 madlib_modules/MadDoc/src/styles/main.scss create mode 100644 madlib_modules/MadDoc/version.lock create mode 100644 madlib_modules/MadDocCli/.github/workflows/build.yml create mode 100644 madlib_modules/MadDocCli/.github/workflows/release.yml create mode 100644 madlib_modules/MadDocCli/.gitignore create mode 100644 madlib_modules/MadDocCli/README.md create mode 100644 madlib_modules/MadDocCli/madlib.json create mode 100644 madlib_modules/MadDocCli/package-lock.json create mode 100644 madlib_modules/MadDocCli/package.json create mode 100644 madlib_modules/MadDocCli/src/Build.mad create mode 100644 madlib_modules/MadDocCli/src/Build.spec.mad create mode 100644 madlib_modules/MadDocCli/src/IOUtils.mad create mode 100644 madlib_modules/MadDocCli/src/Main.mad create mode 100644 madlib_modules/MadDocCli/src/Main.mjs create mode 100644 madlib_modules/MadDocCli/src/Main.spec.mad create mode 100644 madlib_modules/MadDocCli/version.lock create mode 100644 madlib_modules/MadMarkdownParser/.github/workflows/release.yml create mode 100644 madlib_modules/MadMarkdownParser/.gitignore create mode 100644 madlib_modules/MadMarkdownParser/README.md create mode 100644 madlib_modules/MadMarkdownParser/madlib.json create mode 100644 madlib_modules/MadMarkdownParser/src/Main.mad create mode 100644 madlib_modules/MadMarkdownParser/version.lock create mode 100644 madlib_modules/MadMarkdownRenderer/.github/workflows/release.yml create mode 100644 madlib_modules/MadMarkdownRenderer/.gitignore create mode 100644 madlib_modules/MadMarkdownRenderer/README.md create mode 100644 madlib_modules/MadMarkdownRenderer/madlib.json create mode 100644 madlib_modules/MadMarkdownRenderer/package-lock.json create mode 100644 madlib_modules/MadMarkdownRenderer/package.json create mode 100644 madlib_modules/MadMarkdownRenderer/src/Config.mad create mode 100644 madlib_modules/MadMarkdownRenderer/src/Example.mad create mode 100644 madlib_modules/MadMarkdownRenderer/src/Main.mad create mode 100644 madlib_modules/MadMarkdownRenderer/src/index.html create mode 100644 madlib_modules/MadMarkdownRenderer/src/madlib-logo.png create mode 100644 madlib_modules/MadMarkdownRenderer/src/styles/main.scss create mode 100644 madlib_modules/MadMarkdownRenderer/version.lock create mode 100644 madlib_modules/MadUI/.github/workflows/release.yml create mode 100644 madlib_modules/MadUI/.gitignore create mode 100644 madlib_modules/MadUI/.madlibignore create mode 100644 madlib_modules/MadUI/README.md create mode 100644 madlib_modules/MadUI/madlib.json create mode 100644 madlib_modules/MadUI/package-lock.json create mode 100644 madlib_modules/MadUI/package.json create mode 100644 madlib_modules/MadUI/src/Action.mad create mode 100644 madlib_modules/MadUI/src/Attribute.mad create mode 100644 madlib_modules/MadUI/src/Config.mad create mode 100644 madlib_modules/MadUI/src/Core.mad create mode 100644 madlib_modules/MadUI/src/CoreUtils.mad create mode 100644 madlib_modules/MadUI/src/Element.mad create mode 100644 madlib_modules/MadUI/src/Event.mad create mode 100644 madlib_modules/MadUI/src/Key.mad create mode 100644 madlib_modules/MadUI/src/Main.mad create mode 100644 madlib_modules/MadUI/src/Subscription.mad create mode 100644 madlib_modules/MadUI/version.lock create mode 100644 madlib_modules/clinic/.github/workflows/release.yml create mode 100644 madlib_modules/clinic/.gitignore create mode 100644 madlib_modules/clinic/README.md create mode 100644 madlib_modules/clinic/madlib.json create mode 100644 madlib_modules/clinic/src/Buffer.mad create mode 100644 madlib_modules/clinic/src/Clinic.mad create mode 100644 madlib_modules/clinic/src/Constants.mad create mode 100644 madlib_modules/clinic/src/Main.mad diff --git a/.github/workflows/madlib_modules/MadDoc/.github/workflows/release.yml b/.github/workflows/madlib_modules/MadDoc/.github/workflows/release.yml new file mode 100644 index 0000000..94e2222 --- /dev/null +++ b/.github/workflows/madlib_modules/MadDoc/.github/workflows/release.yml @@ -0,0 +1,67 @@ +name: 'Publish new version' + +on: + workflow_dispatch: + inputs: + version: + description: 'Version to publish ( ex: v0.0.1 )' + required: true + +env: + node-version: 14.x + + +jobs: + check-version: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + - run: | + MADLIB_PKG_VERSION="v$(cat madlib.json | grep version | cut -d":" -f2 | cut -d"\"" -f2)" + TAG_NAME=${{ github.event.inputs.version }} + if [ "$TAG_NAME" = "$MADLIB_PKG_VERSION" ]; then + echo "Versions match" + else + echo "Versions in madlib.json is not ${TAG_NAME}" + exit 1 + fi + + release: + needs: check-version + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + + - name: Use Node.js ${{ env.node-version }} + uses: actions/setup-node@v2 + with: + node-version: ${{ env.node-version }} + + - name: "Changelog: generate changelog" + id: changelog + uses: TriPSs/conventional-changelog-action@v3.4.1 + with: + presets: "conventionalcommits" + github-token: ${{ secrets.GITHUB_TOKEN }} + skip-on-empty: false + output-file: false + tag-prefix: 'v' + skip-commit: true + skip-version-file: true + + - name: "Delete created tag from changelog" + run: | + git push --delete origin v${{ steps.changelog.outputs.version }} + git tag -d v${{ steps.changelog.outputs.version }} + + - name: "Create Release" + id: create_release + uses: actions/create-release@v1.1.4 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + with: + tag_name: ${{ github.event.inputs.version }} + release_name: Release ${{ github.event.inputs.version }} + body: ${{ steps.changelog.outputs.clean_changelog }} + draft: false + prerelease: false diff --git a/.github/workflows/madlib_modules/MadDoc/.gitignore b/.github/workflows/madlib_modules/MadDoc/.gitignore new file mode 100644 index 0000000..c37c5aa --- /dev/null +++ b/.github/workflows/madlib_modules/MadDoc/.gitignore @@ -0,0 +1,11 @@ +madlib_modules +node_modules +/build +.DS_Store +.run +.docs +.tests +.coverage +documentation.json +_documentation.json +.module_cache diff --git a/.github/workflows/madlib_modules/MadDoc/.madlibignore b/.github/workflows/madlib_modules/MadDoc/.madlibignore new file mode 100644 index 0000000..768858d --- /dev/null +++ b/.github/workflows/madlib_modules/MadDoc/.madlibignore @@ -0,0 +1,3 @@ +documentation.json +_documentation.json + diff --git a/.github/workflows/madlib_modules/MadDoc/README.md b/.github/workflows/madlib_modules/MadDoc/README.md new file mode 100644 index 0000000..db01bca --- /dev/null +++ b/.github/workflows/madlib_modules/MadDoc/README.md @@ -0,0 +1,13 @@ +# MadDoc +MadDoc is a document generator that takes as input the json file generated by `madlib doc` command. + +## How to run it +```bash +madlib install +npm run dev +``` +Currently, MadDoc frontend expects a doc file named `documentation.json` to be located in the `src/` folder. You can generate this one using the `madlib doc` command. Run `madlib doc --help` for more information. + +## Note +This package is still under active development. + diff --git a/.github/workflows/madlib_modules/MadDoc/madlib.json b/.github/workflows/madlib_modules/MadDoc/madlib.json new file mode 100644 index 0000000..48e0d96 --- /dev/null +++ b/.github/workflows/madlib_modules/MadDoc/madlib.json @@ -0,0 +1,21 @@ +{ + "name": "MadDoc", + "version": "0.0.6", + "madlibVersion": "0.14.0", + "main": "src/Main.mad", + "importAliases": { + ".": "src" + }, + "dependencies": [ + { + "minVersion": "1.0.0", + "url": "https://github.com/madlib-lang/madmarkdown-renderer/archive/refs/tags/v1.0.0.zip", + "description": "MadMarkdownRenderer" + }, + { + "minVersion": "3.0.0", + "url": "https://github.com/madlib-lang/madui/archive/refs/tags/v3.0.0.zip", + "description": "MadUI" + } + ] +} diff --git a/.github/workflows/madlib_modules/MadDoc/package-lock.json b/.github/workflows/madlib_modules/MadDoc/package-lock.json new file mode 100644 index 0000000..17cd0ec --- /dev/null +++ b/.github/workflows/madlib_modules/MadDoc/package-lock.json @@ -0,0 +1,5025 @@ +{ + "name": "maddoc", + "version": "0.0.1", + "lockfileVersion": 2, + "requires": true, + "packages": { + "": { + "name": "maddoc", + "version": "0.0.1", + "license": "ISC", + "dependencies": { + "maddoc-cli": "file:madlib_modules/MadDocCli", + "madmarkdown-renderer": "file:madlib_modules/MadMarkdownRenderer", + "madui": "file:madlib_modules/MadUI", + "sass": "^1.32.6" + }, + "devDependencies": { + "browser-sync": "^2.26.14", + "concurrently": "^5.3.0", + "copy-and-watch": "^0.1.5", + "watch": "^1.0.2" + } + }, + "madlib_modules/MadDocCli": {}, + "madlib_modules/MadMarkdownRenderer": { + "name": "madmarkdown-renderer", + "version": "0.0.1", + "license": "ISC", + "dependencies": { + "sass": "^1.32.6" + }, + "devDependencies": { + "browser-sync": "^2.26.14", + "concurrently": "^5.3.0", + "copy-and-watch": "^0.1.5", + "watch": "^1.0.2" + } + }, + "madlib_modules/MadUI": { + "version": "0.0.1", + "license": "ISC", + "dependencies": { + "snabbdom": "^3.0.1" + }, + "devDependencies": { + "@rollup/plugin-node-resolve": "^11.2.0", + "rollup": "^2.39.1" + } + }, + "node_modules/@rollup/plugin-node-resolve": { + "version": "11.2.1", + "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-11.2.1.tgz", + "integrity": "sha512-yc2n43jcqVyGE2sqV5/YCmocy9ArjVAP/BeXyTtADTBBX6V0e5UMqwO8CdQ0kzjb6zu5P1qMzsScCMRvE9OlVg==", + "dev": true, + "dependencies": { + "@rollup/pluginutils": "^3.1.0", + "@types/resolve": "1.17.1", + "builtin-modules": "^3.1.0", + "deepmerge": "^4.2.2", + "is-module": "^1.0.0", + "resolve": "^1.19.0" + }, + "engines": { + "node": ">= 10.0.0" + }, + "peerDependencies": { + "rollup": "^1.20.0||^2.0.0" + } + }, + "node_modules/@rollup/pluginutils": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-3.1.0.tgz", + "integrity": "sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg==", + "dev": true, + "dependencies": { + "@types/estree": "0.0.39", + "estree-walker": "^1.0.1", + "picomatch": "^2.2.2" + }, + "engines": { + "node": ">= 8.0.0" + }, + "peerDependencies": { + "rollup": "^1.20.0||^2.0.0" + } + }, + "node_modules/@types/estree": { + "version": "0.0.39", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.39.tgz", + "integrity": "sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==", + "dev": true + }, + "node_modules/@types/node": { + "version": "17.0.30", + "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.30.tgz", + "integrity": "sha512-oNBIZjIqyHYP8VCNAV9uEytXVeXG2oR0w9lgAXro20eugRQfY002qr3CUl6BAe+Yf/z3CRjPdz27Pu6WWtuSRw==", + "dev": true + }, + "node_modules/@types/resolve": { + "version": "1.17.1", + "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-1.17.1.tgz", + "integrity": "sha512-yy7HuzQhj0dhGpD8RLXSZWEkLsV9ibvxvi6EiJ3bkqLAO1RGo0WbkWQiwpRlSFymTJRz0d3k5LM3kkx8ArDbLw==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/accepts": { + "version": "1.3.7", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", + "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==", + "dev": true, + "dependencies": { + "mime-types": "~2.1.24", + "negotiator": "0.6.2" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/after": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/after/-/after-0.8.2.tgz", + "integrity": "sha1-/ts5T58OAqqXaOcCvaI7UF+ufh8=", + "dev": true + }, + "node_modules/ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/anymatch": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.1.tgz", + "integrity": "sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg==", + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/arraybuffer.slice": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/arraybuffer.slice/-/arraybuffer.slice-0.0.7.tgz", + "integrity": "sha512-wGUIVQXuehL5TCqQun8OW81jGzAWycqzFF8lFp+GOM5BXLYj3bKNsYC4daB7n6XjCqxQA/qgTJ+8ANR3acjrog==", + "dev": true + }, + "node_modules/async": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", + "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=", + "dev": true + }, + "node_modules/async-each-series": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/async-each-series/-/async-each-series-0.1.1.tgz", + "integrity": "sha1-dhfBkXQB/Yykooqtzj266Yr+tDI=", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/axios": { + "version": "0.21.1", + "resolved": "https://registry.npmjs.org/axios/-/axios-0.21.1.tgz", + "integrity": "sha512-dKQiRHxGD9PPRIUNIWvZhPTPpl1rf/OxTYKsqKUDjBwYylTvV7SjSHJb9ratfyzM6wCdLCOYLzs73qpg5c4iGA==", + "dev": true, + "dependencies": { + "follow-redirects": "^1.10.0" + } + }, + "node_modules/backo2": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/backo2/-/backo2-1.0.2.tgz", + "integrity": "sha1-MasayLEpNjRj41s+u2n038+6eUc=", + "dev": true + }, + "node_modules/balanced-match": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", + "dev": true + }, + "node_modules/base64-arraybuffer": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-0.1.4.tgz", + "integrity": "sha1-mBjHngWbE1X5fgQooBfIOOkLqBI=", + "dev": true, + "engines": { + "node": ">= 0.6.0" + } + }, + "node_modules/base64id": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/base64id/-/base64id-2.0.0.tgz", + "integrity": "sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog==", + "dev": true, + "engines": { + "node": "^4.5.0 || >= 5.9" + } + }, + "node_modules/batch": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", + "integrity": "sha1-3DQxT05nkxgJP8dgJyUl+UvyXBY=", + "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==", + "engines": { + "node": ">=8" + } + }, + "node_modules/blob": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/blob/-/blob-0.0.5.tgz", + "integrity": "sha512-gaqbzQPqOoamawKg0LGVd7SzLgXS+JH61oWprSLH+P+abTczqJbhTR8CmJ2u9/bUYNmHTGJx/UEmn6doAvvuig==", + "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==", + "dependencies": { + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/browser-sync": { + "version": "2.26.14", + "resolved": "https://registry.npmjs.org/browser-sync/-/browser-sync-2.26.14.tgz", + "integrity": "sha512-3TtpsheGolJT6UFtM2CZWEcGJmI4ZEvoCKiKE2bvcDnPxRkhQT4nIGVtfiyPcoHKXGM0LwMOZmYJNWfiNfVXWA==", + "dev": true, + "dependencies": { + "browser-sync-client": "^2.26.14", + "browser-sync-ui": "^2.26.14", + "bs-recipes": "1.3.4", + "bs-snippet-injector": "^2.0.1", + "chokidar": "^3.5.1", + "connect": "3.6.6", + "connect-history-api-fallback": "^1", + "dev-ip": "^1.0.1", + "easy-extender": "^2.3.4", + "eazy-logger": "3.1.0", + "etag": "^1.8.1", + "fresh": "^0.5.2", + "fs-extra": "3.0.1", + "http-proxy": "^1.18.1", + "immutable": "^3", + "localtunnel": "^2.0.1", + "micromatch": "^4.0.2", + "opn": "5.3.0", + "portscanner": "2.1.1", + "qs": "6.2.3", + "raw-body": "^2.3.2", + "resp-modifier": "6.0.2", + "rx": "4.1.0", + "send": "0.16.2", + "serve-index": "1.9.1", + "serve-static": "1.13.2", + "server-destroy": "1.0.1", + "socket.io": "2.4.0", + "ua-parser-js": "^0.7.18", + "yargs": "^15.4.1" + }, + "bin": { + "browser-sync": "dist/bin.js" + }, + "engines": { + "node": ">= 8.0.0" + } + }, + "node_modules/browser-sync-client": { + "version": "2.26.14", + "resolved": "https://registry.npmjs.org/browser-sync-client/-/browser-sync-client-2.26.14.tgz", + "integrity": "sha512-be0m1MchmKv/26r/yyyolxXcBi052aYrmaQep5nm8YNMjFcEyzv0ZoOKn/c3WEXNlEB/KeXWaw70fAOJ+/F1zQ==", + "dev": true, + "dependencies": { + "etag": "1.8.1", + "fresh": "0.5.2", + "mitt": "^1.1.3", + "rxjs": "^5.5.6" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/browser-sync-ui": { + "version": "2.26.14", + "resolved": "https://registry.npmjs.org/browser-sync-ui/-/browser-sync-ui-2.26.14.tgz", + "integrity": "sha512-6oT1sboM4KVNnWCCJDMGbRIeTBw97toMFQ+srImvwQ6J5t9KMgizaIX8HcKLiemsUMSJkgGM9RVKIpq2UblgOA==", + "dev": true, + "dependencies": { + "async-each-series": "0.1.1", + "connect-history-api-fallback": "^1", + "immutable": "^3", + "server-destroy": "1.0.1", + "socket.io-client": "^2.4.0", + "stream-throttle": "^0.1.3" + } + }, + "node_modules/bs-recipes": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/bs-recipes/-/bs-recipes-1.3.4.tgz", + "integrity": "sha1-DS1NSKcYyMBEdp/cT4lZLci2lYU=", + "dev": true + }, + "node_modules/bs-snippet-injector": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/bs-snippet-injector/-/bs-snippet-injector-2.0.1.tgz", + "integrity": "sha1-YbU5PxH1JVntEgaTEANDtu2wTdU=", + "dev": true + }, + "node_modules/builtin-modules": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.2.0.tgz", + "integrity": "sha512-lGzLKcioL90C7wMczpkY0n/oART3MbBa8R9OFGE1rJxoVI86u4WAGfEk8Wjv10eKSyTHVGkSo3bvBylCEtk7LA==", + "dev": true, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/bytes": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", + "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "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/chokidar": { + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.1.tgz", + "integrity": "sha512-9+s+Od+W0VJJzawDma/gvBNQqkTiqYTWLuZoyAsivsI4AaWTCzHG06/TMjsf1cYe9Cb97UCEhjz7HvnPk2p/tw==", + "dependencies": { + "anymatch": "~3.1.1", + "braces": "~3.0.2", + "glob-parent": "~5.1.0", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.5.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.1" + } + }, + "node_modules/cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "dev": true, + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, + "node_modules/cliui/node_modules/ansi-regex": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/cliui/node_modules/strip-ansi": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "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": "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/component-bind": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/component-bind/-/component-bind-1.0.0.tgz", + "integrity": "sha1-AMYIq33Nk4l8AAllGx06jh5zu9E=", + "dev": true + }, + "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/component-inherit": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/component-inherit/-/component-inherit-0.0.3.tgz", + "integrity": "sha1-ZF/ErfWLcrZJ1crmUTVhnbJv8UM=", + "dev": true + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "dev": true + }, + "node_modules/concurrently": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/concurrently/-/concurrently-5.3.0.tgz", + "integrity": "sha512-8MhqOB6PWlBfA2vJ8a0bSFKATOdWlHiQlk11IfmQBPaHVP8oP2gsh2MObE6UR3hqDHqvaIvLTyceNW6obVuFHQ==", + "dev": true, + "dependencies": { + "chalk": "^2.4.2", + "date-fns": "^2.0.1", + "lodash": "^4.17.15", + "read-pkg": "^4.0.1", + "rxjs": "^6.5.2", + "spawn-command": "^0.0.2-1", + "supports-color": "^6.1.0", + "tree-kill": "^1.2.2", + "yargs": "^13.3.0" + }, + "bin": { + "concurrently": "bin/concurrently.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/concurrently/node_modules/ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/concurrently/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/concurrently/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/concurrently/node_modules/chalk/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/concurrently/node_modules/cliui": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", + "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", + "dev": true, + "dependencies": { + "string-width": "^3.1.0", + "strip-ansi": "^5.2.0", + "wrap-ansi": "^5.1.0" + } + }, + "node_modules/concurrently/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/concurrently/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, + "node_modules/concurrently/node_modules/emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", + "dev": true + }, + "node_modules/concurrently/node_modules/find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "dev": true, + "dependencies": { + "locate-path": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/concurrently/node_modules/is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/concurrently/node_modules/locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "dev": true, + "dependencies": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/concurrently/node_modules/p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "dev": true, + "dependencies": { + "p-limit": "^2.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/concurrently/node_modules/path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/concurrently/node_modules/rxjs": { + "version": "6.6.6", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.6.tgz", + "integrity": "sha512-/oTwee4N4iWzAMAL9xdGKjkEHmIwupR3oXbQjCKywF1BeFohswF3vZdogbmEF6pZkOsXTzWkrZszrWpQTByYVg==", + "dev": true, + "dependencies": { + "tslib": "^1.9.0" + }, + "engines": { + "npm": ">=2.0.0" + } + }, + "node_modules/concurrently/node_modules/string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "dev": true, + "dependencies": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/concurrently/node_modules/strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "dependencies": { + "ansi-regex": "^4.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/concurrently/node_modules/supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/concurrently/node_modules/wrap-ansi": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", + "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.0", + "string-width": "^3.0.0", + "strip-ansi": "^5.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/concurrently/node_modules/y18n": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.1.tgz", + "integrity": "sha512-wNcy4NvjMYL8gogWWYAO7ZFWFfHcbdbE57tZO8e4cbpj8tfUcwrwqSl3ad8HxpYWCdXcJUCeKKZS62Av1affwQ==", + "dev": true + }, + "node_modules/concurrently/node_modules/yargs": { + "version": "13.3.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz", + "integrity": "sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==", + "dev": true, + "dependencies": { + "cliui": "^5.0.0", + "find-up": "^3.0.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^3.0.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^13.1.2" + } + }, + "node_modules/concurrently/node_modules/yargs-parser": { + "version": "13.1.2", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz", + "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==", + "dev": true, + "dependencies": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + } + }, + "node_modules/connect": { + "version": "3.6.6", + "resolved": "https://registry.npmjs.org/connect/-/connect-3.6.6.tgz", + "integrity": "sha1-Ce/2xVr3I24TcTWnJXSFi2eG9SQ=", + "dev": true, + "dependencies": { + "debug": "2.6.9", + "finalhandler": "1.1.0", + "parseurl": "~1.3.2", + "utils-merge": "1.0.1" + }, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/connect-history-api-fallback": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-1.6.0.tgz", + "integrity": "sha512-e54B99q/OUoH64zYYRf3HBP5z24G38h5D3qXu23JGRoigpX5Ss4r9ZnDk3g0Z8uQC2x2lPaJ+UlWBc1ZWBWdLg==", + "dev": true, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/connect/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/cookie": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.1.tgz", + "integrity": "sha512-ZwrFkGJxUR3EIoXtO+yVE69Eb7KlixbaeAWfBQB9vVsNn/o+Yw69gBWSSDK825hQNdN+wF8zELf3dFNl/kxkUA==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/copy-and-watch": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/copy-and-watch/-/copy-and-watch-0.1.5.tgz", + "integrity": "sha512-DHWIPXhboSoAeWWMnG3GTetgzunjX9MLVuLb6yfLxEYzVu56C3LHZ5GNelA1wNChLWKM4Xmspg8np2yRs15Zsg==", + "dev": true, + "dependencies": { + "chokidar": "3.4.1", + "colors": "1.4.0", + "glob": "7.1.6", + "glob-parent": "5.1.1" + }, + "bin": { + "copy-and-watch": "bin/copy-and-watch" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/copy-and-watch/node_modules/chokidar": { + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.4.1.tgz", + "integrity": "sha512-TQTJyr2stihpC4Sya9hs2Xh+O2wf+igjL36Y75xx2WdHuiICcn/XJza46Jwt0eT5hVpQOzo3FpY3cj3RVYLX0g==", + "dev": true, + "dependencies": { + "anymatch": "~3.1.1", + "braces": "~3.0.2", + "glob-parent": "~5.1.0", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.4.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "optionalDependencies": { + "fsevents": "~2.1.2" + } + }, + "node_modules/copy-and-watch/node_modules/fsevents": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.1.3.tgz", + "integrity": "sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ==", + "deprecated": "\"Please update to latest v2.3 or v2.2\"", + "dev": true, + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/copy-and-watch/node_modules/glob-parent": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.1.tgz", + "integrity": "sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/copy-and-watch/node_modules/readdirp": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.4.0.tgz", + "integrity": "sha512-0xe001vZBnJEK+uKcj8qOhyAKPzIT+gStxWr3LCB0DwcXR5NZJ3IaC+yGnHCYzB/S7ov3m3EEbZI2zeNvX+hGQ==", + "dev": true, + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/date-fns": { + "version": "2.19.0", + "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-2.19.0.tgz", + "integrity": "sha512-X3bf2iTPgCAQp9wvjOQytnf5vO5rESYRXlPIVcgSbtT5OTScPcsf9eZU+B/YIkKAtYr5WeCii58BgATrNitlWg==", + "dev": true, + "engines": { + "node": ">=0.11" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/date-fns" + } + }, + "node_modules/debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/deepmerge": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz", + "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/destroy": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", + "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=", + "dev": true + }, + "node_modules/dev-ip": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/dev-ip/-/dev-ip-1.0.1.tgz", + "integrity": "sha1-p2o+0YVb56ASu4rBbLgPPADcKPA=", + "dev": true, + "bin": { + "dev-ip": "lib/dev-ip.js" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/dlv": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz", + "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==", + "dev": true + }, + "node_modules/easy-extender": { + "version": "2.3.4", + "resolved": "https://registry.npmjs.org/easy-extender/-/easy-extender-2.3.4.tgz", + "integrity": "sha512-8cAwm6md1YTiPpOvDULYJL4ZS6WfM5/cTeVVh4JsvyYZAoqlRVUpHL9Gr5Fy7HA6xcSZicUia3DeAgO3Us8E+Q==", + "dev": true, + "dependencies": { + "lodash": "^4.17.10" + }, + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/eazy-logger": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/eazy-logger/-/eazy-logger-3.1.0.tgz", + "integrity": "sha512-/snsn2JqBtUSSstEl4R0RKjkisGHAhvYj89i7r3ytNUKW12y178KDZwXLXIgwDqLW6E/VRMT9qfld7wvFae8bQ==", + "dev": true, + "dependencies": { + "tfunk": "^4.0.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=", + "dev": true + }, + "node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "node_modules/encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/engine.io": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-3.5.0.tgz", + "integrity": "sha512-21HlvPUKaitDGE4GXNtQ7PLP0Sz4aWLddMPw2VTyFz1FVZqu/kZsJUO8WNpKuE/OCL7nkfRaOui2ZCJloGznGA==", + "dev": true, + "dependencies": { + "accepts": "~1.3.4", + "base64id": "2.0.0", + "cookie": "~0.4.1", + "debug": "~4.1.0", + "engine.io-parser": "~2.2.0", + "ws": "~7.4.2" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/engine.io-client": { + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-3.5.1.tgz", + "integrity": "sha512-oVu9kBkGbcggulyVF0kz6BV3ganqUeqXvD79WOFKa+11oK692w1NyFkuEj4xrkFRpZhn92QOqTk4RQq5LiBXbQ==", + "dev": true, + "dependencies": { + "component-emitter": "~1.3.0", + "component-inherit": "0.0.3", + "debug": "~3.1.0", + "engine.io-parser": "~2.2.0", + "has-cors": "1.1.0", + "indexof": "0.0.1", + "parseqs": "0.0.6", + "parseuri": "0.0.6", + "ws": "~7.4.2", + "xmlhttprequest-ssl": "~1.5.4", + "yeast": "0.1.2" + } + }, + "node_modules/engine.io-parser": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-2.2.1.tgz", + "integrity": "sha512-x+dN/fBH8Ro8TFwJ+rkB2AmuVw9Yu2mockR/p3W8f8YtExwFgDvBDi0GWyb4ZLkpahtDGZgtr3zLovanJghPqg==", + "dev": true, + "dependencies": { + "after": "0.8.2", + "arraybuffer.slice": "~0.0.7", + "base64-arraybuffer": "0.1.4", + "blob": "0.0.5", + "has-binary2": "~1.0.2" + } + }, + "node_modules/engine.io/node_modules/debug": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", + "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "deprecated": "Debug versions >=3.2.0 <3.2.7 || >=4 <4.3.1 have a low-severity ReDos regression when used in a Node.js environment. It is recommended you upgrade to 3.2.7 or 4.3.1. (https://github.com/visionmedia/debug/issues/797)", + "dev": true, + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/engine.io/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/error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "dev": true, + "dependencies": { + "is-arrayish": "^0.2.1" + } + }, + "node_modules/escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=", + "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": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/estree-walker": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-1.0.1.tgz", + "integrity": "sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg==", + "dev": true + }, + "node_modules/etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/eventemitter3": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", + "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", + "dev": true + }, + "node_modules/exec-sh": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/exec-sh/-/exec-sh-0.2.2.tgz", + "integrity": "sha512-FIUCJz1RbuS0FKTdaAafAByGS0CPvU3R0MeHxgtl+djzCc//F8HakL8GzmVNZanasTbTAY/3DRFA0KpVqj/eAw==", + "dev": true, + "dependencies": { + "merge": "^1.2.0" + } + }, + "node_modules/fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/finalhandler": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.0.tgz", + "integrity": "sha1-zgtoVbRYU+eRsvzGgARtiCU91/U=", + "dev": true, + "dependencies": { + "debug": "2.6.9", + "encodeurl": "~1.0.1", + "escape-html": "~1.0.3", + "on-finished": "~2.3.0", + "parseurl": "~1.3.2", + "statuses": "~1.3.1", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/finalhandler/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/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/follow-redirects": { + "version": "1.13.3", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.13.3.tgz", + "integrity": "sha512-DUgl6+HDzB0iEptNQEXLx/KhTmDb8tZUHSeLqpnjpknR70H0nC2t9N73BK6fN4hOvJ84pKlIQVQ4k5FFlBedKA==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, + "node_modules/fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fs-extra": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-3.0.1.tgz", + "integrity": "sha1-N5TzeMWLNC6n27sjCVEJxLO2IpE=", + "dev": true, + "dependencies": { + "graceful-fs": "^4.1.2", + "jsonfile": "^3.0.0", + "universalify": "^0.1.0" + } + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "dev": true + }, + "node_modules/fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "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-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true, + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/glob": { + "version": "7.1.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", + "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "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==", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.6", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.6.tgz", + "integrity": "sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ==", + "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": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", + "dev": true, + "dependencies": { + "ansi-regex": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/has-binary2": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-binary2/-/has-binary2-1.0.3.tgz", + "integrity": "sha512-G1LWKhDSvhGeAQ8mPVQlqNcOB2sJdwATtZKl2pDKKHfpf/rYj24lkinxf69blJbnsvtqqNU+L3SL50vzZhXOnw==", + "dev": true, + "dependencies": { + "isarray": "2.0.1" + } + }, + "node_modules/has-cors": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-cors/-/has-cors-1.1.0.tgz", + "integrity": "sha1-XkdHk/fqmEPRu5nCPu9J/xJv/zk=", + "dev": true + }, + "node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/hosted-git-info": { + "version": "2.8.8", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.8.tgz", + "integrity": "sha512-f/wzC2QaWBs7t9IYqB4T3sR1xviIViXJRJTWBlx2Gf3g0Xi5vI7Yy4koXQ1c9OYDGHN9sBy1DQ2AB8fqZBWhUg==", + "dev": true + }, + "node_modules/http-errors": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.3.tgz", + "integrity": "sha512-ZTTX0MWrsQ2ZAhA1cejAwDLycFsd7I7nVtnkT3Ol0aqodaKW+0CTZDQ1uBv5whptCnc8e8HeRRJxRs0kmm/Qfw==", + "dev": true, + "dependencies": { + "depd": "~1.1.2", + "inherits": "2.0.4", + "setprototypeof": "1.1.1", + "statuses": ">= 1.5.0 < 2", + "toidentifier": "1.0.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/http-errors/node_modules/statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/http-proxy": { + "version": "1.18.1", + "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz", + "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==", + "dev": true, + "dependencies": { + "eventemitter3": "^4.0.0", + "follow-redirects": "^1.0.0", + "requires-port": "^1.0.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dev": true, + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/immutable": { + "version": "3.8.2", + "resolved": "https://registry.npmjs.org/immutable/-/immutable-3.8.2.tgz", + "integrity": "sha1-wkOZUUVbs5kT2vKBN28VMOEErfM=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/indexof": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/indexof/-/indexof-0.0.1.tgz", + "integrity": "sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10=", + "dev": true + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "dev": true, + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "node_modules/is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", + "dev": true + }, + "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==", + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-core-module": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.2.0.tgz", + "integrity": "sha512-XRAfAdyyY5F5cOXn7hYQDqh2Xmii+DEfIcQGxK/uNwMHhIkPWO0g8msXcbzLe+MpGoR951MlqM/2iIlU4vKDdQ==", + "dev": true, + "dependencies": { + "has": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-glob": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", + "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-module": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz", + "integrity": "sha1-Mlj7afeMFNW4FdZkM2tM/7ZEFZE=", + "dev": true + }, + "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==", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-number-like": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/is-number-like/-/is-number-like-1.0.8.tgz", + "integrity": "sha512-6rZi3ezCyFcn5L71ywzz2bS5b2Igl1En3eTlZlvKjpz1n3IZLAYMbKYAIQgFmEu0GENg92ziU/faEOA/aixjbA==", + "dev": true, + "dependencies": { + "lodash.isfinite": "^3.3.2" + } + }, + "node_modules/is-wsl": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", + "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/isarray": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.1.tgz", + "integrity": "sha1-o32U7ZzaLVmGXJ92/llu4fM4dB4=", + "dev": true + }, + "node_modules/json-parse-better-errors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", + "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", + "dev": true + }, + "node_modules/jsonfile": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-3.0.1.tgz", + "integrity": "sha1-pezG9l9T9mLEQVx2daAzHQmS7GY=", + "dev": true, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/limiter": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/limiter/-/limiter-1.1.5.tgz", + "integrity": "sha512-FWWMIEOxz3GwUI4Ts/IvgVy6LPvoMPgjMdQ185nN6psJyBJ4yOpzqm695/h5umdLJg2vW3GR5iG11MAkR2AzJA==", + "dev": true + }, + "node_modules/localtunnel": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/localtunnel/-/localtunnel-2.0.1.tgz", + "integrity": "sha512-LiaI5wZdz0xFkIQpXbNI62ZnNn8IMsVhwxHmhA+h4vj8R9JG/07bQHWwQlyy7b95/5fVOCHJfIHv+a5XnkvaJA==", + "dev": true, + "dependencies": { + "axios": "0.21.1", + "debug": "4.3.1", + "openurl": "1.1.1", + "yargs": "16.2.0" + }, + "bin": { + "lt": "bin/lt.js" + }, + "engines": { + "node": ">=8.3.0" + } + }, + "node_modules/localtunnel/node_modules/debug": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", + "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/localtunnel/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/localtunnel/node_modules/yargs": { + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "dev": true, + "dependencies": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" + }, + "engines": { + "node": ">=10" + } + }, + "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.isfinite": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/lodash.isfinite/-/lodash.isfinite-3.3.2.tgz", + "integrity": "sha1-+4m2WpqAKBgz8LdHizpRBPiY67M=", + "dev": true + }, + "node_modules/maddoc-cli": { + "resolved": "madlib_modules/MadDocCli", + "link": true + }, + "node_modules/madmarkdown-renderer": { + "resolved": "madlib_modules/MadMarkdownRenderer", + "link": true + }, + "node_modules/madui": { + "resolved": "madlib_modules/MadUI", + "link": true + }, + "node_modules/merge": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/merge/-/merge-1.2.1.tgz", + "integrity": "sha512-VjFo4P5Whtj4vsLzsYBu5ayHhoHJ0UqNm7ibvShmbmoz7tGi0vXaoJbGdB+GmDMLUdg8DpQXEIeVDAe8MaABvQ==", + "dev": true + }, + "node_modules/micromatch": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.2.tgz", + "integrity": "sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q==", + "dev": true, + "dependencies": { + "braces": "^3.0.1", + "picomatch": "^2.0.5" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/mime": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.4.1.tgz", + "integrity": "sha512-KI1+qOZu5DcW6wayYHSzR/tXKCDC5Om4s1z2QJjDULzLcmf3DvzS7oluY4HCTrc+9FiKmWUgeNLg7W3uIQvxtQ==", + "dev": true, + "bin": { + "mime": "cli.js" + } + }, + "node_modules/mime-db": { + "version": "1.46.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.46.0.tgz", + "integrity": "sha512-svXaP8UQRZ5K7or+ZmfNhg2xX3yKDMUzqadsSqi4NCH/KomcH75MAMYAGVlvXn4+b/xOPhS3I2uHKRUzvjY7BQ==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.29", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.29.tgz", + "integrity": "sha512-Y/jMt/S5sR9OaqteJtslsFZKWOIIqMACsJSiHghlCAyhf7jfVYjKBmLiX8OgpWeW+fjJ2b+Az69aPFPkUOY6xQ==", + "dev": true, + "dependencies": { + "mime-db": "1.46.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minimist": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", + "dev": true + }, + "node_modules/mitt": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/mitt/-/mitt-1.2.0.tgz", + "integrity": "sha512-r6lj77KlwqLhIUku9UWYes7KJtsczvolZkzp8hbaDPPaE24OmWl5s539Mytlj22siEQKosZ26qCBgda2PKwoJw==", + "dev": true + }, + "node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, + "node_modules/negotiator": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", + "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/normalize-package-data": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", + "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", + "dev": true, + "dependencies": { + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" + } + }, + "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==", + "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": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", + "dev": true, + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dev": true, + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/openurl": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/openurl/-/openurl-1.1.1.tgz", + "integrity": "sha1-OHW0sO96UsFW8NtB1GCduw+Us4c=", + "dev": true + }, + "node_modules/opn": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/opn/-/opn-5.3.0.tgz", + "integrity": "sha512-bYJHo/LOmoTd+pfiYhfZDnf9zekVJrY+cnS2a5F2x+w5ppvTqObojTP7WiFG+kVZs9Inw+qQ/lw7TroWwhdd2g==", + "dev": true, + "dependencies": { + "is-wsl": "^1.1.0" + }, + "engines": { + "node": ">=4" + } + }, + "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/parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", + "dev": true, + "dependencies": { + "error-ex": "^1.3.1", + "json-parse-better-errors": "^1.0.1" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/parseqs": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/parseqs/-/parseqs-0.0.6.tgz", + "integrity": "sha512-jeAGzMDbfSHHA091hr0r31eYfTig+29g3GKKE/PPbEQ65X0lmMwlEoqmhzu0iztID5uJpZsFlUPDP8ThPL7M8w==", + "dev": true + }, + "node_modules/parseuri": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/parseuri/-/parseuri-0.0.6.tgz", + "integrity": "sha512-AUjen8sAkGgao7UyCX6Ahv0gIK2fABKmYjvP4xmy5JaKvcbTRueIqIPHLAfq30xJddqSE033IOMUSOMCcK3Sow==", + "dev": true + }, + "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/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": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-parse": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", + "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==", + "dev": true + }, + "node_modules/picomatch": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.2.tgz", + "integrity": "sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg==", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/portscanner": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/portscanner/-/portscanner-2.1.1.tgz", + "integrity": "sha1-6rtAnk3iSVD1oqUW01rnaTQ/u5Y=", + "dev": true, + "dependencies": { + "async": "1.5.2", + "is-number-like": "^1.0.3" + }, + "engines": { + "node": ">=0.4", + "npm": ">=1.0.0" + } + }, + "node_modules/qs": { + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.2.3.tgz", + "integrity": "sha1-HPyyXBCpsrSDBT/zn138kjOQjP4=", + "dev": true, + "engines": { + "node": ">=0.6" + } + }, + "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/raw-body": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.1.tgz", + "integrity": "sha512-9WmIKF6mkvA0SLmA2Knm9+qj89e+j1zqgyn8aXGd7+nAduPoqgI9lO57SAZNn/Byzo5P7JhXTyg9PzaJbH73bA==", + "dev": true, + "dependencies": { + "bytes": "3.1.0", + "http-errors": "1.7.3", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/read-pkg": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-4.0.1.tgz", + "integrity": "sha1-ljYlN48+HE1IyFhytabsfV0JMjc=", + "dev": true, + "dependencies": { + "normalize-package-data": "^2.3.2", + "parse-json": "^4.0.0", + "pify": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/readdirp": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.5.0.tgz", + "integrity": "sha512-cMhu7c/8rdhkHXWsY+osBhfSy0JikwpHK/5+imo+LpeasTF8ouErHrlYkwT0++njiyuDvc7OFY5T3ukvZ8qmFQ==", + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/require-main-filename": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", + "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", + "dev": true + }, + "node_modules/requires-port": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", + "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=", + "dev": true + }, + "node_modules/resolve": { + "version": "1.20.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", + "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", + "dev": true, + "dependencies": { + "is-core-module": "^2.2.0", + "path-parse": "^1.0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/resp-modifier": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/resp-modifier/-/resp-modifier-6.0.2.tgz", + "integrity": "sha1-sSTeXE+6/LpUH0j/pzlw9KpFa08=", + "dev": true, + "dependencies": { + "debug": "^2.2.0", + "minimatch": "^3.0.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/resp-modifier/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/rollup": { + "version": "2.71.1", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.71.1.tgz", + "integrity": "sha512-lMZk3XfUBGjrrZQpvPSoXcZSfKcJ2Bgn+Z0L1MoW2V8Wh7BVM+LOBJTPo16yul2MwL59cXedzW1ruq3rCjSRgw==", + "dev": true, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=10.0.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/rx": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/rx/-/rx-4.1.0.tgz", + "integrity": "sha1-pfE/957zt0D+MKqAP7CfmIBdR4I=", + "dev": true + }, + "node_modules/rxjs": { + "version": "5.5.12", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-5.5.12.tgz", + "integrity": "sha512-xx2itnL5sBbqeeiVgNPVuQQ1nC8Jp2WfNJhXWHmElW9YmrpS9UVnNzhP3EH3HFqexO5Tlp8GhYY+WEcqcVMvGw==", + "dev": true, + "dependencies": { + "symbol-observable": "1.0.1" + }, + "engines": { + "npm": ">=2.0.0" + } + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "dev": true + }, + "node_modules/sass": { + "version": "1.32.8", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.32.8.tgz", + "integrity": "sha512-Sl6mIeGpzjIUZqvKnKETfMf0iDAswD9TNlv13A7aAF3XZlRPMq4VvJWBC2N2DXbp94MQVdNSFG6LfF/iOXrPHQ==", + "dependencies": { + "chokidar": ">=2.0.0 <4.0.0" + }, + "bin": { + "sass": "sass.js" + }, + "engines": { + "node": ">=8.9.0" + } + }, + "node_modules/semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true, + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/send": { + "version": "0.16.2", + "resolved": "https://registry.npmjs.org/send/-/send-0.16.2.tgz", + "integrity": "sha512-E64YFPUssFHEFBvpbbjr44NCLtI1AohxQ8ZSiJjQLskAdKuriYEP6VyGEsRDH8ScozGpkaX1BGvhanqCwkcEZw==", + "dev": true, + "dependencies": { + "debug": "2.6.9", + "depd": "~1.1.2", + "destroy": "~1.0.4", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "~1.6.2", + "mime": "1.4.1", + "ms": "2.0.0", + "on-finished": "~2.3.0", + "range-parser": "~1.2.0", + "statuses": "~1.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/send/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/send/node_modules/http-errors": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", + "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=", + "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/send/node_modules/inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", + "dev": true + }, + "node_modules/send/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/send/node_modules/statuses": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz", + "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/serve-index": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz", + "integrity": "sha1-03aNabHn2C5c4FD/9bRTvqEqkjk=", + "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/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/serve-index/node_modules/http-errors": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", + "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=", + "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": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", + "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/serve-index/node_modules/statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/serve-static": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.13.2.tgz", + "integrity": "sha512-p/tdJrO4U387R9oMjb1oj7qSMaMfmOyd4j9hOFoxZe2baQszgHcSWjuya/CiT5kgZZKRudHNOA0pYXOl8rQ5nw==", + "dev": true, + "dependencies": { + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.2", + "send": "0.16.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/server-destroy": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/server-destroy/-/server-destroy-1.0.1.tgz", + "integrity": "sha1-8Tv5KOQrnD55OD5hzDmYtdFObN0=", + "dev": true + }, + "node_modules/set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", + "dev": true + }, + "node_modules/setprototypeof": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", + "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==", + "dev": true + }, + "node_modules/snabbdom": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/snabbdom/-/snabbdom-3.5.0.tgz", + "integrity": "sha512-Ff5BKG18KrrPuskHJlA9aujPHqEabItaDl96l7ZZndF4zt5AYSczz7ZjjgQAX5IBd5cd25lw9NfgX21yVUJ+9g==", + "engines": { + "node": ">=8.3.0" + } + }, + "node_modules/socket.io": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-2.4.0.tgz", + "integrity": "sha512-9UPJ1UTvKayuQfVv2IQ3k7tCQC/fboDyIK62i99dAQIyHKaBsNdTpwHLgKJ6guRWxRtC9H+138UwpaGuQO9uWQ==", + "dev": true, + "dependencies": { + "debug": "~4.1.0", + "engine.io": "~3.5.0", + "has-binary2": "~1.0.2", + "socket.io-adapter": "~1.1.0", + "socket.io-client": "2.4.0", + "socket.io-parser": "~3.4.0" + } + }, + "node_modules/socket.io-adapter": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-1.1.2.tgz", + "integrity": "sha512-WzZRUj1kUjrTIrUKpZLEzFZ1OLj5FwLlAFQs9kuZJzJi5DKdU7FsWc36SNmA8iDOtwBQyT8FkrriRM8vXLYz8g==", + "dev": true + }, + "node_modules/socket.io-client": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-2.4.0.tgz", + "integrity": "sha512-M6xhnKQHuuZd4Ba9vltCLT9oa+YvTsP8j9NcEiLElfIg8KeYPyhWOes6x4t+LTAC8enQbE/995AdTem2uNyKKQ==", + "dev": true, + "dependencies": { + "backo2": "1.0.2", + "component-bind": "1.0.0", + "component-emitter": "~1.3.0", + "debug": "~3.1.0", + "engine.io-client": "~3.5.0", + "has-binary2": "~1.0.2", + "indexof": "0.0.1", + "parseqs": "0.0.6", + "parseuri": "0.0.6", + "socket.io-parser": "~3.3.0", + "to-array": "0.1.4" + } + }, + "node_modules/socket.io-parser": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-3.3.2.tgz", + "integrity": "sha512-FJvDBuOALxdCI9qwRrO/Rfp9yfndRtc1jSgVgV8FDraihmSP/MLGD5PEuJrNfjALvcQ+vMDM/33AWOYP/JSjDg==", + "dev": true, + "dependencies": { + "component-emitter": "~1.3.0", + "debug": "~3.1.0", + "isarray": "2.0.1" + } + }, + "node_modules/socket.io/node_modules/component-emitter": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz", + "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=", + "dev": true + }, + "node_modules/socket.io/node_modules/debug": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", + "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "deprecated": "Debug versions >=3.2.0 <3.2.7 || >=4 <4.3.1 have a low-severity ReDos regression when used in a Node.js environment. It is recommended you upgrade to 3.2.7 or 4.3.1. (https://github.com/visionmedia/debug/issues/797)", + "dev": true, + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/socket.io/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/socket.io/node_modules/socket.io-parser": { + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-3.4.1.tgz", + "integrity": "sha512-11hMgzL+WCLWf1uFtHSNvliI++tcRUWdoeYuwIl+Axvwy9z2gQM+7nJyN3STj1tLj5JyIUH8/gpDGxzAlDdi0A==", + "dev": true, + "dependencies": { + "component-emitter": "1.2.1", + "debug": "~4.1.0", + "isarray": "2.0.1" + } + }, + "node_modules/spawn-command": { + "version": "0.0.2-1", + "resolved": "https://registry.npmjs.org/spawn-command/-/spawn-command-0.0.2-1.tgz", + "integrity": "sha1-YvXpRmmBwbeW3Fkpk34RycaSG9A=", + "dev": true + }, + "node_modules/spdx-correct": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz", + "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==", + "dev": true, + "dependencies": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/spdx-exceptions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", + "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", + "dev": true + }, + "node_modules/spdx-expression-parse": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", + "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", + "dev": true, + "dependencies": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/spdx-license-ids": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.7.tgz", + "integrity": "sha512-U+MTEOO0AiDzxwFvoa4JVnMV6mZlJKk2sBLt90s7G0Gd0Mlknc7kxEn3nuDPNZRta7O2uy8oLcZLVT+4sqNZHQ==", + "dev": true + }, + "node_modules/statuses": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.3.1.tgz", + "integrity": "sha1-+vUbnrdKrvOzrPStX2Gr8ky3uT4=", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/stream-throttle": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/stream-throttle/-/stream-throttle-0.1.3.tgz", + "integrity": "sha1-rdV8jXzHOoFjDTHNVdOWHPr7qcM=", + "dev": true, + "dependencies": { + "commander": "^2.2.0", + "limiter": "^1.0.5" + }, + "bin": { + "throttleproxy": "bin/throttleproxy.js" + }, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/string-width": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz", + "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width/node_modules/ansi-regex": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width/node_modules/strip-ansi": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dev": true, + "dependencies": { + "ansi-regex": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/symbol-observable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-1.0.1.tgz", + "integrity": "sha1-g0D8RwLDEi310iKI+IKD9RPT/dQ=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/tfunk": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/tfunk/-/tfunk-4.0.0.tgz", + "integrity": "sha512-eJQ0dGfDIzWNiFNYFVjJ+Ezl/GmwHaFTBTjrtqNPW0S7cuVDBrZrmzUz6VkMeCR4DZFqhd4YtLwsw3i2wYHswQ==", + "dev": true, + "dependencies": { + "chalk": "^1.1.3", + "dlv": "^1.1.3" + } + }, + "node_modules/to-array": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/to-array/-/to-array-0.1.4.tgz", + "integrity": "sha1-F+bBH3PdTz10zaek/zI46a2b+JA=", + "dev": true + }, + "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==", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/toidentifier": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", + "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==", + "dev": true, + "engines": { + "node": ">=0.6" + } + }, + "node_modules/tree-kill": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz", + "integrity": "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==", + "dev": true, + "bin": { + "tree-kill": "cli.js" + } + }, + "node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + }, + "node_modules/ua-parser-js": { + "version": "0.7.24", + "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.24.tgz", + "integrity": "sha512-yo+miGzQx5gakzVK3QFfN0/L9uVhosXBBO7qmnk7c2iw1IhL212wfA3zbnI54B0obGwC/5NWub/iT9sReMx+Fw==", + "dev": true, + "engines": { + "node": "*" + } + }, + "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/unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=", + "dev": true, + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/validate-npm-package-license": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", + "dev": true, + "dependencies": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, + "node_modules/watch": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/watch/-/watch-1.0.2.tgz", + "integrity": "sha1-NApxe952Vyb6CqB9ch4BR6VR3ww=", + "dev": true, + "dependencies": { + "exec-sh": "^0.2.0", + "minimist": "^1.2.0" + }, + "bin": { + "watch": "cli.js" + }, + "engines": { + "node": ">=0.1.95" + } + }, + "node_modules/which-module": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", + "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", + "dev": true + }, + "node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi/node_modules/ansi-regex": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi/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/wrap-ansi/node_modules/strip-ansi": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "dev": true + }, + "node_modules/ws": { + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.4.tgz", + "integrity": "sha512-Qm8k8ojNQIMx7S+Zp8u/uHOx7Qazv3Yv4q68MiWWWOJhiwG5W3x7iqmRtJo8xxrciZUY4vRxUTJCKuRnF28ZZw==", + "dev": true, + "engines": { + "node": ">=8.3.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/xmlhttprequest-ssl": { + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.5.5.tgz", + "integrity": "sha1-wodrBhaKrcQOV9l+gRkayPQ5iz4=", + "dev": true, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/y18n": { + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.5.tgz", + "integrity": "sha512-hsRUr4FFrvhhRH12wOdfs38Gy7k2FFzB9qgN9v3aLykRq0dRcdcpz5C9FxdS2NuhOrI/628b/KSTJ3rwHysYSg==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/yargs": { + "version": "15.4.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", + "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", + "dev": true, + "dependencies": { + "cliui": "^6.0.0", + "decamelize": "^1.2.0", + "find-up": "^4.1.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^4.2.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^18.1.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/yargs-parser": { + "version": "20.2.6", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.6.tgz", + "integrity": "sha512-AP1+fQIWSM/sMiET8fyayjx/J+JmTPt2Mr0FkrgqB4todtfa53sOsrSAcIrJRD5XS20bKUwaDIuMkWKCEiQLKA==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/yargs/node_modules/ansi-regex": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/yargs/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/yargs/node_modules/cliui": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", + "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", + "dev": true, + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^6.2.0" + } + }, + "node_modules/yargs/node_modules/strip-ansi": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/yargs/node_modules/wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/yargs/node_modules/y18n": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.1.tgz", + "integrity": "sha512-wNcy4NvjMYL8gogWWYAO7ZFWFfHcbdbE57tZO8e4cbpj8tfUcwrwqSl3ad8HxpYWCdXcJUCeKKZS62Av1affwQ==", + "dev": true + }, + "node_modules/yargs/node_modules/yargs-parser": { + "version": "18.1.3", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", + "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", + "dev": true, + "dependencies": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/yeast": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/yeast/-/yeast-0.1.2.tgz", + "integrity": "sha1-AI4G2AlDIMNy28L47XagymyKxBk=", + "dev": true + } + }, + "dependencies": { + "@rollup/plugin-node-resolve": { + "version": "11.2.1", + "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-11.2.1.tgz", + "integrity": "sha512-yc2n43jcqVyGE2sqV5/YCmocy9ArjVAP/BeXyTtADTBBX6V0e5UMqwO8CdQ0kzjb6zu5P1qMzsScCMRvE9OlVg==", + "dev": true, + "requires": { + "@rollup/pluginutils": "^3.1.0", + "@types/resolve": "1.17.1", + "builtin-modules": "^3.1.0", + "deepmerge": "^4.2.2", + "is-module": "^1.0.0", + "resolve": "^1.19.0" + } + }, + "@rollup/pluginutils": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-3.1.0.tgz", + "integrity": "sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg==", + "dev": true, + "requires": { + "@types/estree": "0.0.39", + "estree-walker": "^1.0.1", + "picomatch": "^2.2.2" + } + }, + "@types/estree": { + "version": "0.0.39", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.39.tgz", + "integrity": "sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==", + "dev": true + }, + "@types/node": { + "version": "17.0.30", + "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.30.tgz", + "integrity": "sha512-oNBIZjIqyHYP8VCNAV9uEytXVeXG2oR0w9lgAXro20eugRQfY002qr3CUl6BAe+Yf/z3CRjPdz27Pu6WWtuSRw==", + "dev": true + }, + "@types/resolve": { + "version": "1.17.1", + "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-1.17.1.tgz", + "integrity": "sha512-yy7HuzQhj0dhGpD8RLXSZWEkLsV9ibvxvi6EiJ3bkqLAO1RGo0WbkWQiwpRlSFymTJRz0d3k5LM3kkx8ArDbLw==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "accepts": { + "version": "1.3.7", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", + "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==", + "dev": true, + "requires": { + "mime-types": "~2.1.24", + "negotiator": "0.6.2" + } + }, + "after": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/after/-/after-0.8.2.tgz", + "integrity": "sha1-/ts5T58OAqqXaOcCvaI7UF+ufh8=", + "dev": true + }, + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true + }, + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + }, + "anymatch": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.1.tgz", + "integrity": "sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg==", + "requires": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + } + }, + "arraybuffer.slice": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/arraybuffer.slice/-/arraybuffer.slice-0.0.7.tgz", + "integrity": "sha512-wGUIVQXuehL5TCqQun8OW81jGzAWycqzFF8lFp+GOM5BXLYj3bKNsYC4daB7n6XjCqxQA/qgTJ+8ANR3acjrog==", + "dev": true + }, + "async": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", + "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=", + "dev": true + }, + "async-each-series": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/async-each-series/-/async-each-series-0.1.1.tgz", + "integrity": "sha1-dhfBkXQB/Yykooqtzj266Yr+tDI=", + "dev": true + }, + "axios": { + "version": "0.21.1", + "resolved": "https://registry.npmjs.org/axios/-/axios-0.21.1.tgz", + "integrity": "sha512-dKQiRHxGD9PPRIUNIWvZhPTPpl1rf/OxTYKsqKUDjBwYylTvV7SjSHJb9ratfyzM6wCdLCOYLzs73qpg5c4iGA==", + "dev": true, + "requires": { + "follow-redirects": "^1.10.0" + } + }, + "backo2": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/backo2/-/backo2-1.0.2.tgz", + "integrity": "sha1-MasayLEpNjRj41s+u2n038+6eUc=", + "dev": true + }, + "balanced-match": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", + "dev": true + }, + "base64-arraybuffer": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-0.1.4.tgz", + "integrity": "sha1-mBjHngWbE1X5fgQooBfIOOkLqBI=", + "dev": true + }, + "base64id": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/base64id/-/base64id-2.0.0.tgz", + "integrity": "sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog==", + "dev": true + }, + "batch": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", + "integrity": "sha1-3DQxT05nkxgJP8dgJyUl+UvyXBY=", + "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==" + }, + "blob": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/blob/-/blob-0.0.5.tgz", + "integrity": "sha512-gaqbzQPqOoamawKg0LGVd7SzLgXS+JH61oWprSLH+P+abTczqJbhTR8CmJ2u9/bUYNmHTGJx/UEmn6doAvvuig==", + "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==", + "requires": { + "fill-range": "^7.0.1" + } + }, + "browser-sync": { + "version": "2.26.14", + "resolved": "https://registry.npmjs.org/browser-sync/-/browser-sync-2.26.14.tgz", + "integrity": "sha512-3TtpsheGolJT6UFtM2CZWEcGJmI4ZEvoCKiKE2bvcDnPxRkhQT4nIGVtfiyPcoHKXGM0LwMOZmYJNWfiNfVXWA==", + "dev": true, + "requires": { + "browser-sync-client": "^2.26.14", + "browser-sync-ui": "^2.26.14", + "bs-recipes": "1.3.4", + "bs-snippet-injector": "^2.0.1", + "chokidar": "^3.5.1", + "connect": "3.6.6", + "connect-history-api-fallback": "^1", + "dev-ip": "^1.0.1", + "easy-extender": "^2.3.4", + "eazy-logger": "3.1.0", + "etag": "^1.8.1", + "fresh": "^0.5.2", + "fs-extra": "3.0.1", + "http-proxy": "^1.18.1", + "immutable": "^3", + "localtunnel": "^2.0.1", + "micromatch": "^4.0.2", + "opn": "5.3.0", + "portscanner": "2.1.1", + "qs": "6.2.3", + "raw-body": "^2.3.2", + "resp-modifier": "6.0.2", + "rx": "4.1.0", + "send": "0.16.2", + "serve-index": "1.9.1", + "serve-static": "1.13.2", + "server-destroy": "1.0.1", + "socket.io": "2.4.0", + "ua-parser-js": "^0.7.18", + "yargs": "^15.4.1" + } + }, + "browser-sync-client": { + "version": "2.26.14", + "resolved": "https://registry.npmjs.org/browser-sync-client/-/browser-sync-client-2.26.14.tgz", + "integrity": "sha512-be0m1MchmKv/26r/yyyolxXcBi052aYrmaQep5nm8YNMjFcEyzv0ZoOKn/c3WEXNlEB/KeXWaw70fAOJ+/F1zQ==", + "dev": true, + "requires": { + "etag": "1.8.1", + "fresh": "0.5.2", + "mitt": "^1.1.3", + "rxjs": "^5.5.6" + } + }, + "browser-sync-ui": { + "version": "2.26.14", + "resolved": "https://registry.npmjs.org/browser-sync-ui/-/browser-sync-ui-2.26.14.tgz", + "integrity": "sha512-6oT1sboM4KVNnWCCJDMGbRIeTBw97toMFQ+srImvwQ6J5t9KMgizaIX8HcKLiemsUMSJkgGM9RVKIpq2UblgOA==", + "dev": true, + "requires": { + "async-each-series": "0.1.1", + "connect-history-api-fallback": "^1", + "immutable": "^3", + "server-destroy": "1.0.1", + "socket.io-client": "^2.4.0", + "stream-throttle": "^0.1.3" + } + }, + "bs-recipes": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/bs-recipes/-/bs-recipes-1.3.4.tgz", + "integrity": "sha1-DS1NSKcYyMBEdp/cT4lZLci2lYU=", + "dev": true + }, + "bs-snippet-injector": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/bs-snippet-injector/-/bs-snippet-injector-2.0.1.tgz", + "integrity": "sha1-YbU5PxH1JVntEgaTEANDtu2wTdU=", + "dev": true + }, + "builtin-modules": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.2.0.tgz", + "integrity": "sha512-lGzLKcioL90C7wMczpkY0n/oART3MbBa8R9OFGE1rJxoVI86u4WAGfEk8Wjv10eKSyTHVGkSo3bvBylCEtk7LA==", + "dev": true + }, + "bytes": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", + "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==", + "dev": true + }, + "camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true + }, + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "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" + } + }, + "chokidar": { + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.1.tgz", + "integrity": "sha512-9+s+Od+W0VJJzawDma/gvBNQqkTiqYTWLuZoyAsivsI4AaWTCzHG06/TMjsf1cYe9Cb97UCEhjz7HvnPk2p/tw==", + "requires": { + "anymatch": "~3.1.1", + "braces": "~3.0.2", + "fsevents": "~2.3.1", + "glob-parent": "~5.1.0", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.5.0" + } + }, + "cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "dev": true, + "requires": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "dev": true + }, + "strip-ansi": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "dev": true, + "requires": { + "ansi-regex": "^5.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": "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 + }, + "component-bind": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/component-bind/-/component-bind-1.0.0.tgz", + "integrity": "sha1-AMYIq33Nk4l8AAllGx06jh5zu9E=", + "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 + }, + "component-inherit": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/component-inherit/-/component-inherit-0.0.3.tgz", + "integrity": "sha1-ZF/ErfWLcrZJ1crmUTVhnbJv8UM=", + "dev": true + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "dev": true + }, + "concurrently": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/concurrently/-/concurrently-5.3.0.tgz", + "integrity": "sha512-8MhqOB6PWlBfA2vJ8a0bSFKATOdWlHiQlk11IfmQBPaHVP8oP2gsh2MObE6UR3hqDHqvaIvLTyceNW6obVuFHQ==", + "dev": true, + "requires": { + "chalk": "^2.4.2", + "date-fns": "^2.0.1", + "lodash": "^4.17.15", + "read-pkg": "^4.0.1", + "rxjs": "^6.5.2", + "spawn-command": "^0.0.2-1", + "supports-color": "^6.1.0", + "tree-kill": "^1.2.2", + "yargs": "^13.3.0" + }, + "dependencies": { + "ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "dev": true + }, + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "dependencies": { + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "cliui": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", + "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", + "dev": true, + "requires": { + "string-width": "^3.1.0", + "strip-ansi": "^5.2.0", + "wrap-ansi": "^5.1.0" + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, + "emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", + "dev": true + }, + "find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "dev": true, + "requires": { + "locate-path": "^3.0.0" + } + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true + }, + "locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "dev": true, + "requires": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + } + }, + "p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "dev": true, + "requires": { + "p-limit": "^2.0.0" + } + }, + "path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", + "dev": true + }, + "rxjs": { + "version": "6.6.6", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.6.tgz", + "integrity": "sha512-/oTwee4N4iWzAMAL9xdGKjkEHmIwupR3oXbQjCKywF1BeFohswF3vZdogbmEF6pZkOsXTzWkrZszrWpQTByYVg==", + "dev": true, + "requires": { + "tslib": "^1.9.0" + } + }, + "string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "dev": true, + "requires": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + } + }, + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "requires": { + "ansi-regex": "^4.1.0" + } + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + }, + "wrap-ansi": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", + "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.0", + "string-width": "^3.0.0", + "strip-ansi": "^5.0.0" + } + }, + "y18n": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.1.tgz", + "integrity": "sha512-wNcy4NvjMYL8gogWWYAO7ZFWFfHcbdbE57tZO8e4cbpj8tfUcwrwqSl3ad8HxpYWCdXcJUCeKKZS62Av1affwQ==", + "dev": true + }, + "yargs": { + "version": "13.3.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz", + "integrity": "sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==", + "dev": true, + "requires": { + "cliui": "^5.0.0", + "find-up": "^3.0.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^3.0.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^13.1.2" + } + }, + "yargs-parser": { + "version": "13.1.2", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz", + "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==", + "dev": true, + "requires": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + } + } + } + }, + "connect": { + "version": "3.6.6", + "resolved": "https://registry.npmjs.org/connect/-/connect-3.6.6.tgz", + "integrity": "sha1-Ce/2xVr3I24TcTWnJXSFi2eG9SQ=", + "dev": true, + "requires": { + "debug": "2.6.9", + "finalhandler": "1.1.0", + "parseurl": "~1.3.2", + "utils-merge": "1.0.1" + }, + "dependencies": { + "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" + } + } + } + }, + "connect-history-api-fallback": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-1.6.0.tgz", + "integrity": "sha512-e54B99q/OUoH64zYYRf3HBP5z24G38h5D3qXu23JGRoigpX5Ss4r9ZnDk3g0Z8uQC2x2lPaJ+UlWBc1ZWBWdLg==", + "dev": true + }, + "cookie": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.1.tgz", + "integrity": "sha512-ZwrFkGJxUR3EIoXtO+yVE69Eb7KlixbaeAWfBQB9vVsNn/o+Yw69gBWSSDK825hQNdN+wF8zELf3dFNl/kxkUA==", + "dev": true + }, + "copy-and-watch": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/copy-and-watch/-/copy-and-watch-0.1.5.tgz", + "integrity": "sha512-DHWIPXhboSoAeWWMnG3GTetgzunjX9MLVuLb6yfLxEYzVu56C3LHZ5GNelA1wNChLWKM4Xmspg8np2yRs15Zsg==", + "dev": true, + "requires": { + "chokidar": "3.4.1", + "colors": "1.4.0", + "glob": "7.1.6", + "glob-parent": "5.1.1" + }, + "dependencies": { + "chokidar": { + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.4.1.tgz", + "integrity": "sha512-TQTJyr2stihpC4Sya9hs2Xh+O2wf+igjL36Y75xx2WdHuiICcn/XJza46Jwt0eT5hVpQOzo3FpY3cj3RVYLX0g==", + "dev": true, + "requires": { + "anymatch": "~3.1.1", + "braces": "~3.0.2", + "fsevents": "~2.1.2", + "glob-parent": "~5.1.0", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.4.0" + } + }, + "fsevents": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.1.3.tgz", + "integrity": "sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ==", + "dev": true, + "optional": true + }, + "glob-parent": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.1.tgz", + "integrity": "sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ==", + "dev": true, + "requires": { + "is-glob": "^4.0.1" + } + }, + "readdirp": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.4.0.tgz", + "integrity": "sha512-0xe001vZBnJEK+uKcj8qOhyAKPzIT+gStxWr3LCB0DwcXR5NZJ3IaC+yGnHCYzB/S7ov3m3EEbZI2zeNvX+hGQ==", + "dev": true, + "requires": { + "picomatch": "^2.2.1" + } + } + } + }, + "date-fns": { + "version": "2.19.0", + "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-2.19.0.tgz", + "integrity": "sha512-X3bf2iTPgCAQp9wvjOQytnf5vO5rESYRXlPIVcgSbtT5OTScPcsf9eZU+B/YIkKAtYr5WeCii58BgATrNitlWg==", + "dev": true + }, + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", + "dev": true + }, + "deepmerge": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz", + "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==", + "dev": true + }, + "depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=", + "dev": true + }, + "destroy": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", + "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=", + "dev": true + }, + "dev-ip": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/dev-ip/-/dev-ip-1.0.1.tgz", + "integrity": "sha1-p2o+0YVb56ASu4rBbLgPPADcKPA=", + "dev": true + }, + "dlv": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz", + "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==", + "dev": true + }, + "easy-extender": { + "version": "2.3.4", + "resolved": "https://registry.npmjs.org/easy-extender/-/easy-extender-2.3.4.tgz", + "integrity": "sha512-8cAwm6md1YTiPpOvDULYJL4ZS6WfM5/cTeVVh4JsvyYZAoqlRVUpHL9Gr5Fy7HA6xcSZicUia3DeAgO3Us8E+Q==", + "dev": true, + "requires": { + "lodash": "^4.17.10" + } + }, + "eazy-logger": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/eazy-logger/-/eazy-logger-3.1.0.tgz", + "integrity": "sha512-/snsn2JqBtUSSstEl4R0RKjkisGHAhvYj89i7r3ytNUKW12y178KDZwXLXIgwDqLW6E/VRMT9qfld7wvFae8bQ==", + "dev": true, + "requires": { + "tfunk": "^4.0.0" + } + }, + "ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=", + "dev": true + }, + "emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=", + "dev": true + }, + "engine.io": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-3.5.0.tgz", + "integrity": "sha512-21HlvPUKaitDGE4GXNtQ7PLP0Sz4aWLddMPw2VTyFz1FVZqu/kZsJUO8WNpKuE/OCL7nkfRaOui2ZCJloGznGA==", + "dev": true, + "requires": { + "accepts": "~1.3.4", + "base64id": "2.0.0", + "cookie": "~0.4.1", + "debug": "~4.1.0", + "engine.io-parser": "~2.2.0", + "ws": "~7.4.2" + }, + "dependencies": { + "debug": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", + "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + }, + "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 + } + } + }, + "engine.io-client": { + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-3.5.1.tgz", + "integrity": "sha512-oVu9kBkGbcggulyVF0kz6BV3ganqUeqXvD79WOFKa+11oK692w1NyFkuEj4xrkFRpZhn92QOqTk4RQq5LiBXbQ==", + "dev": true, + "requires": { + "component-emitter": "~1.3.0", + "component-inherit": "0.0.3", + "debug": "~3.1.0", + "engine.io-parser": "~2.2.0", + "has-cors": "1.1.0", + "indexof": "0.0.1", + "parseqs": "0.0.6", + "parseuri": "0.0.6", + "ws": "~7.4.2", + "xmlhttprequest-ssl": "~1.5.4", + "yeast": "0.1.2" + } + }, + "engine.io-parser": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-2.2.1.tgz", + "integrity": "sha512-x+dN/fBH8Ro8TFwJ+rkB2AmuVw9Yu2mockR/p3W8f8YtExwFgDvBDi0GWyb4ZLkpahtDGZgtr3zLovanJghPqg==", + "dev": true, + "requires": { + "after": "0.8.2", + "arraybuffer.slice": "~0.0.7", + "base64-arraybuffer": "0.1.4", + "blob": "0.0.5", + "has-binary2": "~1.0.2" + } + }, + "error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "dev": true, + "requires": { + "is-arrayish": "^0.2.1" + } + }, + "escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "dev": true + }, + "escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=", + "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": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true + }, + "estree-walker": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-1.0.1.tgz", + "integrity": "sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg==", + "dev": true + }, + "etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=", + "dev": true + }, + "eventemitter3": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", + "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", + "dev": true + }, + "exec-sh": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/exec-sh/-/exec-sh-0.2.2.tgz", + "integrity": "sha512-FIUCJz1RbuS0FKTdaAafAByGS0CPvU3R0MeHxgtl+djzCc//F8HakL8GzmVNZanasTbTAY/3DRFA0KpVqj/eAw==", + "dev": true, + "requires": { + "merge": "^1.2.0" + } + }, + "fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "finalhandler": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.0.tgz", + "integrity": "sha1-zgtoVbRYU+eRsvzGgARtiCU91/U=", + "dev": true, + "requires": { + "debug": "2.6.9", + "encodeurl": "~1.0.1", + "escape-html": "~1.0.3", + "on-finished": "~2.3.0", + "parseurl": "~1.3.2", + "statuses": "~1.3.1", + "unpipe": "~1.0.0" + }, + "dependencies": { + "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" + } + } + } + }, + "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" + } + }, + "follow-redirects": { + "version": "1.13.3", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.13.3.tgz", + "integrity": "sha512-DUgl6+HDzB0iEptNQEXLx/KhTmDb8tZUHSeLqpnjpknR70H0nC2t9N73BK6fN4hOvJ84pKlIQVQ4k5FFlBedKA==", + "dev": true + }, + "fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=", + "dev": true + }, + "fs-extra": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-3.0.1.tgz", + "integrity": "sha1-N5TzeMWLNC6n27sjCVEJxLO2IpE=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "jsonfile": "^3.0.0", + "universalify": "^0.1.0" + } + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "dev": true + }, + "fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "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-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true + }, + "glob": { + "version": "7.1.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", + "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "requires": { + "is-glob": "^4.0.1" + } + }, + "graceful-fs": { + "version": "4.2.6", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.6.tgz", + "integrity": "sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ==", + "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": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "has-binary2": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-binary2/-/has-binary2-1.0.3.tgz", + "integrity": "sha512-G1LWKhDSvhGeAQ8mPVQlqNcOB2sJdwATtZKl2pDKKHfpf/rYj24lkinxf69blJbnsvtqqNU+L3SL50vzZhXOnw==", + "dev": true, + "requires": { + "isarray": "2.0.1" + } + }, + "has-cors": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-cors/-/has-cors-1.1.0.tgz", + "integrity": "sha1-XkdHk/fqmEPRu5nCPu9J/xJv/zk=", + "dev": true + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + }, + "hosted-git-info": { + "version": "2.8.8", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.8.tgz", + "integrity": "sha512-f/wzC2QaWBs7t9IYqB4T3sR1xviIViXJRJTWBlx2Gf3g0Xi5vI7Yy4koXQ1c9OYDGHN9sBy1DQ2AB8fqZBWhUg==", + "dev": true + }, + "http-errors": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.3.tgz", + "integrity": "sha512-ZTTX0MWrsQ2ZAhA1cejAwDLycFsd7I7nVtnkT3Ol0aqodaKW+0CTZDQ1uBv5whptCnc8e8HeRRJxRs0kmm/Qfw==", + "dev": true, + "requires": { + "depd": "~1.1.2", + "inherits": "2.0.4", + "setprototypeof": "1.1.1", + "statuses": ">= 1.5.0 < 2", + "toidentifier": "1.0.0" + }, + "dependencies": { + "statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=", + "dev": true + } + } + }, + "http-proxy": { + "version": "1.18.1", + "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz", + "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==", + "dev": true, + "requires": { + "eventemitter3": "^4.0.0", + "follow-redirects": "^1.0.0", + "requires-port": "^1.0.0" + } + }, + "iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dev": true, + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + }, + "immutable": { + "version": "3.8.2", + "resolved": "https://registry.npmjs.org/immutable/-/immutable-3.8.2.tgz", + "integrity": "sha1-wkOZUUVbs5kT2vKBN28VMOEErfM=", + "dev": true + }, + "indexof": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/indexof/-/indexof-0.0.1.tgz", + "integrity": "sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10=", + "dev": true + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "dev": true, + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", + "dev": true + }, + "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==", + "requires": { + "binary-extensions": "^2.0.0" + } + }, + "is-core-module": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.2.0.tgz", + "integrity": "sha512-XRAfAdyyY5F5cOXn7hYQDqh2Xmii+DEfIcQGxK/uNwMHhIkPWO0g8msXcbzLe+MpGoR951MlqM/2iIlU4vKDdQ==", + "dev": true, + "requires": { + "has": "^1.0.3" + } + }, + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=" + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true + }, + "is-glob": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", + "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", + "requires": { + "is-extglob": "^2.1.1" + } + }, + "is-module": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz", + "integrity": "sha1-Mlj7afeMFNW4FdZkM2tM/7ZEFZE=", + "dev": true + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==" + }, + "is-number-like": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/is-number-like/-/is-number-like-1.0.8.tgz", + "integrity": "sha512-6rZi3ezCyFcn5L71ywzz2bS5b2Igl1En3eTlZlvKjpz1n3IZLAYMbKYAIQgFmEu0GENg92ziU/faEOA/aixjbA==", + "dev": true, + "requires": { + "lodash.isfinite": "^3.3.2" + } + }, + "is-wsl": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", + "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=", + "dev": true + }, + "isarray": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.1.tgz", + "integrity": "sha1-o32U7ZzaLVmGXJ92/llu4fM4dB4=", + "dev": true + }, + "json-parse-better-errors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", + "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", + "dev": true + }, + "jsonfile": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-3.0.1.tgz", + "integrity": "sha1-pezG9l9T9mLEQVx2daAzHQmS7GY=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.6" + } + }, + "limiter": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/limiter/-/limiter-1.1.5.tgz", + "integrity": "sha512-FWWMIEOxz3GwUI4Ts/IvgVy6LPvoMPgjMdQ185nN6psJyBJ4yOpzqm695/h5umdLJg2vW3GR5iG11MAkR2AzJA==", + "dev": true + }, + "localtunnel": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/localtunnel/-/localtunnel-2.0.1.tgz", + "integrity": "sha512-LiaI5wZdz0xFkIQpXbNI62ZnNn8IMsVhwxHmhA+h4vj8R9JG/07bQHWwQlyy7b95/5fVOCHJfIHv+a5XnkvaJA==", + "dev": true, + "requires": { + "axios": "0.21.1", + "debug": "4.3.1", + "openurl": "1.1.1", + "yargs": "16.2.0" + }, + "dependencies": { + "debug": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", + "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", + "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 + }, + "yargs": { + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "dev": true, + "requires": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" + } + } + } + }, + "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.isfinite": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/lodash.isfinite/-/lodash.isfinite-3.3.2.tgz", + "integrity": "sha1-+4m2WpqAKBgz8LdHizpRBPiY67M=", + "dev": true + }, + "maddoc-cli": { + "version": "file:madlib_modules/MadDocCli" + }, + "madmarkdown-renderer": { + "version": "file:madlib_modules/MadMarkdownRenderer", + "requires": { + "browser-sync": "^2.26.14", + "concurrently": "^5.3.0", + "copy-and-watch": "^0.1.5", + "sass": "^1.32.6", + "watch": "^1.0.2" + } + }, + "madui": { + "version": "file:madlib_modules/MadUI", + "requires": { + "@rollup/plugin-node-resolve": "^11.2.0", + "rollup": "^2.39.1", + "snabbdom": "^3.0.1" + } + }, + "merge": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/merge/-/merge-1.2.1.tgz", + "integrity": "sha512-VjFo4P5Whtj4vsLzsYBu5ayHhoHJ0UqNm7ibvShmbmoz7tGi0vXaoJbGdB+GmDMLUdg8DpQXEIeVDAe8MaABvQ==", + "dev": true + }, + "micromatch": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.2.tgz", + "integrity": "sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q==", + "dev": true, + "requires": { + "braces": "^3.0.1", + "picomatch": "^2.0.5" + } + }, + "mime": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.4.1.tgz", + "integrity": "sha512-KI1+qOZu5DcW6wayYHSzR/tXKCDC5Om4s1z2QJjDULzLcmf3DvzS7oluY4HCTrc+9FiKmWUgeNLg7W3uIQvxtQ==", + "dev": true + }, + "mime-db": { + "version": "1.46.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.46.0.tgz", + "integrity": "sha512-svXaP8UQRZ5K7or+ZmfNhg2xX3yKDMUzqadsSqi4NCH/KomcH75MAMYAGVlvXn4+b/xOPhS3I2uHKRUzvjY7BQ==", + "dev": true + }, + "mime-types": { + "version": "2.1.29", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.29.tgz", + "integrity": "sha512-Y/jMt/S5sR9OaqteJtslsFZKWOIIqMACsJSiHghlCAyhf7jfVYjKBmLiX8OgpWeW+fjJ2b+Az69aPFPkUOY6xQ==", + "dev": true, + "requires": { + "mime-db": "1.46.0" + } + }, + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minimist": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", + "dev": true + }, + "mitt": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/mitt/-/mitt-1.2.0.tgz", + "integrity": "sha512-r6lj77KlwqLhIUku9UWYes7KJtsczvolZkzp8hbaDPPaE24OmWl5s539Mytlj22siEQKosZ26qCBgda2PKwoJw==", + "dev": true + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, + "negotiator": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", + "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==", + "dev": true + }, + "normalize-package-data": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", + "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", + "dev": true, + "requires": { + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" + } + }, + "normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==" + }, + "on-finished": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", + "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", + "dev": true, + "requires": { + "ee-first": "1.1.1" + } + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dev": true, + "requires": { + "wrappy": "1" + } + }, + "openurl": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/openurl/-/openurl-1.1.1.tgz", + "integrity": "sha1-OHW0sO96UsFW8NtB1GCduw+Us4c=", + "dev": true + }, + "opn": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/opn/-/opn-5.3.0.tgz", + "integrity": "sha512-bYJHo/LOmoTd+pfiYhfZDnf9zekVJrY+cnS2a5F2x+w5ppvTqObojTP7WiFG+kVZs9Inw+qQ/lw7TroWwhdd2g==", + "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 + }, + "parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", + "dev": true, + "requires": { + "error-ex": "^1.3.1", + "json-parse-better-errors": "^1.0.1" + } + }, + "parseqs": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/parseqs/-/parseqs-0.0.6.tgz", + "integrity": "sha512-jeAGzMDbfSHHA091hr0r31eYfTig+29g3GKKE/PPbEQ65X0lmMwlEoqmhzu0iztID5uJpZsFlUPDP8ThPL7M8w==", + "dev": true + }, + "parseuri": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/parseuri/-/parseuri-0.0.6.tgz", + "integrity": "sha512-AUjen8sAkGgao7UyCX6Ahv0gIK2fABKmYjvP4xmy5JaKvcbTRueIqIPHLAfq30xJddqSE033IOMUSOMCcK3Sow==", + "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 + }, + "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": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "dev": true + }, + "path-parse": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", + "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==", + "dev": true + }, + "picomatch": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.2.tgz", + "integrity": "sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg==" + }, + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "dev": true + }, + "portscanner": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/portscanner/-/portscanner-2.1.1.tgz", + "integrity": "sha1-6rtAnk3iSVD1oqUW01rnaTQ/u5Y=", + "dev": true, + "requires": { + "async": "1.5.2", + "is-number-like": "^1.0.3" + } + }, + "qs": { + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.2.3.tgz", + "integrity": "sha1-HPyyXBCpsrSDBT/zn138kjOQjP4=", + "dev": true + }, + "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 + }, + "raw-body": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.1.tgz", + "integrity": "sha512-9WmIKF6mkvA0SLmA2Knm9+qj89e+j1zqgyn8aXGd7+nAduPoqgI9lO57SAZNn/Byzo5P7JhXTyg9PzaJbH73bA==", + "dev": true, + "requires": { + "bytes": "3.1.0", + "http-errors": "1.7.3", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + } + }, + "read-pkg": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-4.0.1.tgz", + "integrity": "sha1-ljYlN48+HE1IyFhytabsfV0JMjc=", + "dev": true, + "requires": { + "normalize-package-data": "^2.3.2", + "parse-json": "^4.0.0", + "pify": "^3.0.0" + } + }, + "readdirp": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.5.0.tgz", + "integrity": "sha512-cMhu7c/8rdhkHXWsY+osBhfSy0JikwpHK/5+imo+LpeasTF8ouErHrlYkwT0++njiyuDvc7OFY5T3ukvZ8qmFQ==", + "requires": { + "picomatch": "^2.2.1" + } + }, + "require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", + "dev": true + }, + "require-main-filename": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", + "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", + "dev": true + }, + "requires-port": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", + "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=", + "dev": true + }, + "resolve": { + "version": "1.20.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", + "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", + "dev": true, + "requires": { + "is-core-module": "^2.2.0", + "path-parse": "^1.0.6" + } + }, + "resp-modifier": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/resp-modifier/-/resp-modifier-6.0.2.tgz", + "integrity": "sha1-sSTeXE+6/LpUH0j/pzlw9KpFa08=", + "dev": true, + "requires": { + "debug": "^2.2.0", + "minimatch": "^3.0.2" + }, + "dependencies": { + "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" + } + } + } + }, + "rollup": { + "version": "2.71.1", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.71.1.tgz", + "integrity": "sha512-lMZk3XfUBGjrrZQpvPSoXcZSfKcJ2Bgn+Z0L1MoW2V8Wh7BVM+LOBJTPo16yul2MwL59cXedzW1ruq3rCjSRgw==", + "dev": true, + "requires": { + "fsevents": "~2.3.2" + } + }, + "rx": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/rx/-/rx-4.1.0.tgz", + "integrity": "sha1-pfE/957zt0D+MKqAP7CfmIBdR4I=", + "dev": true + }, + "rxjs": { + "version": "5.5.12", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-5.5.12.tgz", + "integrity": "sha512-xx2itnL5sBbqeeiVgNPVuQQ1nC8Jp2WfNJhXWHmElW9YmrpS9UVnNzhP3EH3HFqexO5Tlp8GhYY+WEcqcVMvGw==", + "dev": true, + "requires": { + "symbol-observable": "1.0.1" + } + }, + "safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "dev": true + }, + "sass": { + "version": "1.32.8", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.32.8.tgz", + "integrity": "sha512-Sl6mIeGpzjIUZqvKnKETfMf0iDAswD9TNlv13A7aAF3XZlRPMq4VvJWBC2N2DXbp94MQVdNSFG6LfF/iOXrPHQ==", + "requires": { + "chokidar": ">=2.0.0 <4.0.0" + } + }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true + }, + "send": { + "version": "0.16.2", + "resolved": "https://registry.npmjs.org/send/-/send-0.16.2.tgz", + "integrity": "sha512-E64YFPUssFHEFBvpbbjr44NCLtI1AohxQ8ZSiJjQLskAdKuriYEP6VyGEsRDH8ScozGpkaX1BGvhanqCwkcEZw==", + "dev": true, + "requires": { + "debug": "2.6.9", + "depd": "~1.1.2", + "destroy": "~1.0.4", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "~1.6.2", + "mime": "1.4.1", + "ms": "2.0.0", + "on-finished": "~2.3.0", + "range-parser": "~1.2.0", + "statuses": "~1.4.0" + }, + "dependencies": { + "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" + } + }, + "http-errors": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", + "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=", + "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": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", + "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 + }, + "statuses": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz", + "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew==", + "dev": true + } + } + }, + "serve-index": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz", + "integrity": "sha1-03aNabHn2C5c4FD/9bRTvqEqkjk=", + "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": { + "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" + } + }, + "http-errors": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", + "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=", + "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": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", + "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 + }, + "statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=", + "dev": true + } + } + }, + "serve-static": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.13.2.tgz", + "integrity": "sha512-p/tdJrO4U387R9oMjb1oj7qSMaMfmOyd4j9hOFoxZe2baQszgHcSWjuya/CiT5kgZZKRudHNOA0pYXOl8rQ5nw==", + "dev": true, + "requires": { + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.2", + "send": "0.16.2" + } + }, + "server-destroy": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/server-destroy/-/server-destroy-1.0.1.tgz", + "integrity": "sha1-8Tv5KOQrnD55OD5hzDmYtdFObN0=", + "dev": true + }, + "set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", + "dev": true + }, + "setprototypeof": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", + "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==", + "dev": true + }, + "snabbdom": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/snabbdom/-/snabbdom-3.5.0.tgz", + "integrity": "sha512-Ff5BKG18KrrPuskHJlA9aujPHqEabItaDl96l7ZZndF4zt5AYSczz7ZjjgQAX5IBd5cd25lw9NfgX21yVUJ+9g==" + }, + "socket.io": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-2.4.0.tgz", + "integrity": "sha512-9UPJ1UTvKayuQfVv2IQ3k7tCQC/fboDyIK62i99dAQIyHKaBsNdTpwHLgKJ6guRWxRtC9H+138UwpaGuQO9uWQ==", + "dev": true, + "requires": { + "debug": "~4.1.0", + "engine.io": "~3.5.0", + "has-binary2": "~1.0.2", + "socket.io-adapter": "~1.1.0", + "socket.io-client": "2.4.0", + "socket.io-parser": "~3.4.0" + }, + "dependencies": { + "component-emitter": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz", + "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=", + "dev": true + }, + "debug": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", + "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + }, + "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 + }, + "socket.io-parser": { + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-3.4.1.tgz", + "integrity": "sha512-11hMgzL+WCLWf1uFtHSNvliI++tcRUWdoeYuwIl+Axvwy9z2gQM+7nJyN3STj1tLj5JyIUH8/gpDGxzAlDdi0A==", + "dev": true, + "requires": { + "component-emitter": "1.2.1", + "debug": "~4.1.0", + "isarray": "2.0.1" + } + } + } + }, + "socket.io-adapter": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-1.1.2.tgz", + "integrity": "sha512-WzZRUj1kUjrTIrUKpZLEzFZ1OLj5FwLlAFQs9kuZJzJi5DKdU7FsWc36SNmA8iDOtwBQyT8FkrriRM8vXLYz8g==", + "dev": true + }, + "socket.io-client": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-2.4.0.tgz", + "integrity": "sha512-M6xhnKQHuuZd4Ba9vltCLT9oa+YvTsP8j9NcEiLElfIg8KeYPyhWOes6x4t+LTAC8enQbE/995AdTem2uNyKKQ==", + "dev": true, + "requires": { + "backo2": "1.0.2", + "component-bind": "1.0.0", + "component-emitter": "~1.3.0", + "debug": "~3.1.0", + "engine.io-client": "~3.5.0", + "has-binary2": "~1.0.2", + "indexof": "0.0.1", + "parseqs": "0.0.6", + "parseuri": "0.0.6", + "socket.io-parser": "~3.3.0", + "to-array": "0.1.4" + } + }, + "socket.io-parser": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-3.3.2.tgz", + "integrity": "sha512-FJvDBuOALxdCI9qwRrO/Rfp9yfndRtc1jSgVgV8FDraihmSP/MLGD5PEuJrNfjALvcQ+vMDM/33AWOYP/JSjDg==", + "dev": true, + "requires": { + "component-emitter": "~1.3.0", + "debug": "~3.1.0", + "isarray": "2.0.1" + } + }, + "spawn-command": { + "version": "0.0.2-1", + "resolved": "https://registry.npmjs.org/spawn-command/-/spawn-command-0.0.2-1.tgz", + "integrity": "sha1-YvXpRmmBwbeW3Fkpk34RycaSG9A=", + "dev": true + }, + "spdx-correct": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz", + "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==", + "dev": true, + "requires": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "spdx-exceptions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", + "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", + "dev": true + }, + "spdx-expression-parse": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", + "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", + "dev": true, + "requires": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "spdx-license-ids": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.7.tgz", + "integrity": "sha512-U+MTEOO0AiDzxwFvoa4JVnMV6mZlJKk2sBLt90s7G0Gd0Mlknc7kxEn3nuDPNZRta7O2uy8oLcZLVT+4sqNZHQ==", + "dev": true + }, + "statuses": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.3.1.tgz", + "integrity": "sha1-+vUbnrdKrvOzrPStX2Gr8ky3uT4=", + "dev": true + }, + "stream-throttle": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/stream-throttle/-/stream-throttle-0.1.3.tgz", + "integrity": "sha1-rdV8jXzHOoFjDTHNVdOWHPr7qcM=", + "dev": true, + "requires": { + "commander": "^2.2.0", + "limiter": "^1.0.5" + } + }, + "string-width": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz", + "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==", + "dev": true, + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "dev": true + }, + "strip-ansi": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "dev": true, + "requires": { + "ansi-regex": "^5.0.0" + } + } + } + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + }, + "symbol-observable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-1.0.1.tgz", + "integrity": "sha1-g0D8RwLDEi310iKI+IKD9RPT/dQ=", + "dev": true + }, + "tfunk": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/tfunk/-/tfunk-4.0.0.tgz", + "integrity": "sha512-eJQ0dGfDIzWNiFNYFVjJ+Ezl/GmwHaFTBTjrtqNPW0S7cuVDBrZrmzUz6VkMeCR4DZFqhd4YtLwsw3i2wYHswQ==", + "dev": true, + "requires": { + "chalk": "^1.1.3", + "dlv": "^1.1.3" + } + }, + "to-array": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/to-array/-/to-array-0.1.4.tgz", + "integrity": "sha1-F+bBH3PdTz10zaek/zI46a2b+JA=", + "dev": true + }, + "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==", + "requires": { + "is-number": "^7.0.0" + } + }, + "toidentifier": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", + "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==", + "dev": true + }, + "tree-kill": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz", + "integrity": "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==", + "dev": true + }, + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + }, + "ua-parser-js": { + "version": "0.7.24", + "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.24.tgz", + "integrity": "sha512-yo+miGzQx5gakzVK3QFfN0/L9uVhosXBBO7qmnk7c2iw1IhL212wfA3zbnI54B0obGwC/5NWub/iT9sReMx+Fw==", + "dev": true + }, + "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 + }, + "unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=", + "dev": true + }, + "utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=", + "dev": true + }, + "validate-npm-package-license": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", + "dev": true, + "requires": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, + "watch": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/watch/-/watch-1.0.2.tgz", + "integrity": "sha1-NApxe952Vyb6CqB9ch4BR6VR3ww=", + "dev": true, + "requires": { + "exec-sh": "^0.2.0", + "minimist": "^1.2.0" + } + }, + "which-module": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", + "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", + "dev": true + }, + "wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "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" + } + }, + "strip-ansi": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "dev": true, + "requires": { + "ansi-regex": "^5.0.0" + } + } + } + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "dev": true + }, + "ws": { + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.4.tgz", + "integrity": "sha512-Qm8k8ojNQIMx7S+Zp8u/uHOx7Qazv3Yv4q68MiWWWOJhiwG5W3x7iqmRtJo8xxrciZUY4vRxUTJCKuRnF28ZZw==", + "dev": true, + "requires": {} + }, + "xmlhttprequest-ssl": { + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.5.5.tgz", + "integrity": "sha1-wodrBhaKrcQOV9l+gRkayPQ5iz4=", + "dev": true + }, + "y18n": { + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.5.tgz", + "integrity": "sha512-hsRUr4FFrvhhRH12wOdfs38Gy7k2FFzB9qgN9v3aLykRq0dRcdcpz5C9FxdS2NuhOrI/628b/KSTJ3rwHysYSg==", + "dev": true + }, + "yargs": { + "version": "15.4.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", + "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", + "dev": true, + "requires": { + "cliui": "^6.0.0", + "decamelize": "^1.2.0", + "find-up": "^4.1.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^4.2.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^18.1.2" + }, + "dependencies": { + "ansi-regex": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "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" + } + }, + "cliui": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", + "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", + "dev": true, + "requires": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^6.2.0" + } + }, + "strip-ansi": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "dev": true, + "requires": { + "ansi-regex": "^5.0.0" + } + }, + "wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "dev": true, + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + } + }, + "y18n": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.1.tgz", + "integrity": "sha512-wNcy4NvjMYL8gogWWYAO7ZFWFfHcbdbE57tZO8e4cbpj8tfUcwrwqSl3ad8HxpYWCdXcJUCeKKZS62Av1affwQ==", + "dev": true + }, + "yargs-parser": { + "version": "18.1.3", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", + "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", + "dev": true, + "requires": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + } + } + } + }, + "yargs-parser": { + "version": "20.2.6", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.6.tgz", + "integrity": "sha512-AP1+fQIWSM/sMiET8fyayjx/J+JmTPt2Mr0FkrgqB4todtfa53sOsrSAcIrJRD5XS20bKUwaDIuMkWKCEiQLKA==", + "dev": true + }, + "yeast": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/yeast/-/yeast-0.1.2.tgz", + "integrity": "sha1-AI4G2AlDIMNy28L47XagymyKxBk=", + "dev": true + } + } +} diff --git a/.github/workflows/madlib_modules/MadDoc/package.json b/.github/workflows/madlib_modules/MadDoc/package.json new file mode 100644 index 0000000..2743442 --- /dev/null +++ b/.github/workflows/madlib_modules/MadDoc/package.json @@ -0,0 +1,36 @@ +{ + "name": "maddoc", + "version": "0.0.1", + "description": "You just created a new madlib project, if it's your first project you should read the following. ### Notes on Madlib Madlib is a general purpose programming language that compiles to Javascript. It means that you need to have [Nodejs](https://nodejs.org/) installed and configured in order to make it work. Madlib can target nodejs or browser, by default it will compile for nodejs. ### How to run it First, you need to compile the program: ```shell madlib compile -i src/Main.mad ``` Then, you can run it like this: ```shell node build/Main.mjs ```", + "main": "index.js", + "dependencies": { + "maddoc-cli": "file:madlib_modules/MadDocCli", + "madmarkdown-renderer": "file:madlib_modules/MadMarkdownRenderer", + "sass": "^1.32.6" + }, + "devDependencies": { + "browser-sync": "^2.26.14", + "concurrently": "^5.3.0", + "copy-and-watch": "^0.1.5", + "watch": "^1.0.2" + }, + "scripts": { + "info": "madlib --version", + "build:bundle": "madlib compile -i src/Main.mad --target browser --bundle -o build/bundle.js", + "build:bundle:watch": "madlib compile -i src/Main.mad --target browser --bundle -o build/bundle.js --watch", + "build:sass": "sass src/styles/main.scss build/styles/main.css", + "build:html": "copy-and-watch src/**/*.html build/", + "dev": "concurrently \"browser-sync start --server build --files build/**\" \"sass --watch src/styles/main.scss build/styles/main.css\" \"copy-and-watch --watch src/**/*.html build/\" \"copy-and-watch --watch src/assets/* build/assets/\" \"npm run build:bundle:watch\"", + "test": "echo \"Error: no test specified\" && exit 1" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/madlib-lang/madui-examples.git" + }, + "author": "", + "license": "ISC", + "bugs": { + "url": "https://github.com/madlib-lang/madui-examples/issues" + }, + "homepage": "https://github.com/madlib-lang/madui-examples#readme" +} diff --git a/.github/workflows/madlib_modules/MadDoc/src/App.mad b/.github/workflows/madlib_modules/MadDoc/src/App.mad new file mode 100644 index 0000000..87d45ea --- /dev/null +++ b/.github/workflows/madlib_modules/MadDoc/src/App.mad @@ -0,0 +1,148 @@ +import type { Element, GlobalAction } from "MadUI" + +import type { Module } from "@/Parser/Documentation" +import type { PathResult } from "@/PathResolver" +import type { State, Target } from "@/State" + +import { Left, Right } from "Either" +import Json from "Json/Parse" +import { + PopStateEvent, + className, + div, + empty, + getUrl, + h2, + link, + main, + onUrlChanged, + p, + syncAction, + text, + to, + ul, +} from "MadUI" +import Maybe from "Maybe" +import String from "String" +import Url from "Url" + +import { renderMarkdown } from "@/Markdown" +import { parser } from "@/Parser/Documentation" +import { + AliasResult, + ExpressionResult, + InstanceResult, + InterfaceResult, + ModuleResult, + TypeResult, + processPath, +} from "@/PathResolver" +import { JS } from "@/State" +import { Alias } from "@/Views/Alias" +import { Breadcrumbs } from "@/Views/Breadcrumbs" +import { Expression } from "@/Views/Expression" +import { Header } from "@/Views/Header" +import { Instance } from "@/Views/Instance" +import { Interface } from "@/Views/Interface" +import { SideMenu } from "@/Views/SideMenu" +import { Type } from "@/Views/Type" +import docJson from "@/documentation.json" + + + +parsedDocumentation = Json.parse(parser, docJson) + +initialState :: State +export initialState = where(parsedDocumentation) { + Right(modules) => + { modules, search: "", path: Maybe.fromMaybe("", Url.decode(getUrl({}))), target: JS } + + Left(err) => + do { + return { modules: [], search: "", path: "", target: JS } + } +} + + +ModuleView :: Target -> Module -> Element State +ModuleView = (target, module) => +
+

+ + {module.name} + +

+ {String.isEmpty(module.description) + ? + :

+ {renderMarkdown(module.description)} +

} +
    + {...map(Type(module.name), module.typeDeclarations)} + {...map(Alias(module.name), module.aliases)} + {...map(Interface(module.name), module.interfaces)} + {...map(Instance(module.name), module.instances)} + {...map(Expression(target, module.name), module.expressions)} +
+
+ + +ContentView :: Target -> PathResult -> Element State +ContentView = (target, pathResult) => where(pathResult) { + ModuleResult(modules) => +
+ {...map(ModuleView(target), modules)} +
+ + ExpressionResult(moduleName, exp) => +
    + {Expression(target, moduleName, exp)} +
+ + TypeResult(moduleName, t) => +
    + {Type(moduleName, t)} +
+ + AliasResult(moduleName, t) => +
    + {Alias(moduleName, t)} +
+ + InterfaceResult(moduleName, t) => +
    + {Interface(moduleName, t)} +
+ + InstanceResult(moduleName, t) => +
    + {Instance(moduleName, t)} +
+} + + +DocApp :: State -> Element State +export DocApp = (state) => { + pathResult = processPath(state) + return ( +
+ {Header(state.target)} + {SideMenu(state.search, state.modules)} +
+ {Breadcrumbs(state)} + {ContentView(state.target, pathResult)} +
+
+ ) +} + + +handleUrlChanged :: GlobalAction State +export handleUrlChanged = onUrlChanged( + syncAction( + (state, event) => where(event) { + PopStateEvent({ url }) => + { ...state, path: Maybe.fromMaybe("", Url.decode(url)) } + }, + ), +) diff --git a/.github/workflows/madlib_modules/MadDoc/src/Main.mad b/.github/workflows/madlib_modules/MadDoc/src/Main.mad new file mode 100644 index 0000000..17c8a9f --- /dev/null +++ b/.github/workflows/madlib_modules/MadDoc/src/Main.mad @@ -0,0 +1,15 @@ +import { DEFAULT_CONFIG, addGlobalEventHandler, renderWithConfig } from "MadUI" + +import { DocApp, handleUrlChanged, initialState } from "@/App" + + + +main :: List String -> {} +main = () => { + renderWithConfig( + addGlobalEventHandler(handleUrlChanged, DEFAULT_CONFIG), + DocApp, + initialState, + "app", + ) +} diff --git a/.github/workflows/madlib_modules/MadDoc/src/Markdown.mad b/.github/workflows/madlib_modules/MadDoc/src/Markdown.mad new file mode 100644 index 0000000..51b0e3b --- /dev/null +++ b/.github/workflows/madlib_modules/MadDoc/src/Markdown.mad @@ -0,0 +1,17 @@ +import type { Config } from "MadMarkdownRenderer" +import type { Element } from "MadUI" + +import type { State } from "@/State" + +import { defaultConfig, renderMarkdownWithConfig, setLinkView } from "MadMarkdownRenderer" +import { className, link, text, to } from "MadUI" + + + +mdConfig :: Config State +mdConfig = pipe( + setLinkView((txt, url) => {txt}), +)(defaultConfig) + +renderMarkdown :: String -> Element State +export renderMarkdown = renderMarkdownWithConfig(mdConfig) diff --git a/.github/workflows/madlib_modules/MadDoc/src/Parser/Documentation.mad b/.github/workflows/madlib_modules/MadDoc/src/Parser/Documentation.mad new file mode 100644 index 0000000..ef4588e --- /dev/null +++ b/.github/workflows/madlib_modules/MadDoc/src/Parser/Documentation.mad @@ -0,0 +1,253 @@ +import type { Maybe } from "Maybe" + +import Json from "Json/Parse" +import { Just, Nothing } from "Maybe" + + + +export alias Instance = { + constraints :: String, + declaration :: String, + description :: String, + example :: String, + since :: String, +} + +export alias Interface = { + constraints :: String, + description :: String, + example :: String, + methods :: List String, + name :: String, + since :: String, + vars :: String, +} + +export alias Alias = { + aliasedType :: String, + description :: String, + example :: String, + name :: String, + params :: String, + since :: String, +} + +export alias Type = { + constructors :: List String, + description :: String, + example :: String, + name :: String, + params :: String, + since :: String, +} + +export alias Expression = { + description :: String, + example :: String, + name :: String, + since :: String, + typing :: String, +} + +export type Targeted a = BothTargets(a, a) | JSTarget(a) | LLVMTarget(a) | InvalidTarget + + +getName :: Targeted { ...base, name :: String } -> String +export getName = where { + BothTargets(a, _) => + a.name + + JSTarget(a) => + a.name + + LLVMTarget(a) => + a.name + + InvalidTarget => + "Invalid Target" +} + + +hasJSTarget :: Targeted a -> Boolean +export hasJSTarget = (targeted) => where(targeted) { + BothTargets(_, _) => + true + + JSTarget(_) => + true + + _ => + false +} + +export alias Module = { + aliases :: List Alias, + description :: String, + expressions :: List (Targeted Expression), + instances :: List Instance, + interfaces :: List Interface, + name :: String, + path :: String, + typeDeclarations :: List Type, +} + +export alias Documentation = List Module + +makeInstance :: String -> String -> String -> String -> String -> Instance +makeInstance = (declaration, constraints, description, since, example) => ( + { declaration, constraints, description, since, example } +) + +makeInterface :: String + -> String + -> String + -> List String + -> String + -> String + -> String + -> Interface +export makeInterface = (name, vars, constraints, methods, description, since, example) => ( + { name, vars, constraints, methods, description, since, example } +) + +makeAlias :: String -> String -> String -> String -> String -> String -> Alias +export makeAlias = (name, params, aliasedType, description, since, example) => ( + { name, params, aliasedType, description, since, example } +) + +makeType :: String -> String -> List String -> String -> String -> String -> Type +export makeType = (name, params, constructors, description, since, example) => ( + { name, params, constructors, description, since, example } +) + +makeExpression :: String -> String -> String -> String -> String -> Expression +export makeExpression = (name, description, typing, since, example) => ( + { name, description, typing, since, example } +) + +makeTargeted :: Maybe a -> Maybe a -> Targeted a +export makeTargeted = (maybeJS, maybeLLVM) => where(#[maybeJS, maybeLLVM]) { + #[Just(js), Just(llvm)] => + BothTargets(js, llvm) + + #[Just(js), Nothing] => + JSTarget(js) + + #[Nothing, Just(llvm)] => + LLVMTarget(llvm) + + _ => + InvalidTarget +} + +makeModule :: String + -> String + -> String + -> List (Targeted Expression) + -> List Type + -> List Alias + -> List Interface + -> List Instance + -> Module +export makeModule = ( + path, + name, + description, + expressions, + typeDeclarations, + aliases, + interfaces, + instances +) => ({ path, name, description, expressions, typeDeclarations, aliases, interfaces, instances }) + + + +expressionParser :: Json.Parser Expression +export expressionParser = Json.map5( + makeExpression, + Json.field("name", Json.string), + Json.field("description", Json.string), + Json.field("type", Json.string), + Json.field("since", Json.string), + Json.field("example", Json.string), +) + + +parser :: Json.Parser Documentation +export parser = Json.field( + "modules", + Json.list( + Json.map8( + makeModule, + Json.field("path", Json.string), + Json.field("moduleName", Json.string), + Json.field("description", Json.string), + Json.field( + "expressions", + Json.list( + Json.map2( + makeTargeted, + Json.maybe(Json.field("js", expressionParser)), + Json.maybe(Json.field("llvm", expressionParser)), + ), + ), + ), + Json.field( + "typeDeclarations", + Json.list( + Json.map6( + makeType, + Json.path(["js", "name"], Json.string), + Json.path(["js", "params"], Json.string), + Json.path(["js", "constructors"], Json.list(Json.string)), + Json.path(["js", "description"], Json.string), + Json.path(["js", "since"], Json.string), + Json.path(["js", "example"], Json.string), + ), + ), + ), + Json.field( + "aliases", + Json.list( + Json.map6( + makeAlias, + Json.path(["js", "name"], Json.string), + Json.path(["js", "params"], Json.string), + Json.path(["js", "aliasedType"], Json.string), + Json.path(["js", "description"], Json.string), + Json.path(["js", "since"], Json.string), + Json.path(["js", "example"], Json.string), + ), + ), + ), + Json.field( + "interfaces", + Json.list( + Json.map7( + makeInterface, + Json.path(["js", "name"], Json.string), + Json.path(["js", "vars"], Json.string), + Json.path(["js", "constraints"], Json.string), + Json.path(["js", "methods"], Json.list(Json.string)), + Json.path(["js", "description"], Json.string), + Json.path(["js", "since"], Json.string), + Json.path(["js", "example"], Json.string), + ), + ), + ), + Json.field( + "instances", + Json.list( + Json.map5( + makeInstance, + Json.path(["js", "declaration"], Json.string), + Json.path(["js", "constraints"], Json.string), + Json.path(["js", "description"], Json.string), + Json.path(["js", "since"], Json.string), + Json.path(["js", "example"], Json.string), + ), + ), + ), + ), + ), +) diff --git a/.github/workflows/madlib_modules/MadDoc/src/PathResolver.mad b/.github/workflows/madlib_modules/MadDoc/src/PathResolver.mad new file mode 100644 index 0000000..e90cc8d --- /dev/null +++ b/.github/workflows/madlib_modules/MadDoc/src/PathResolver.mad @@ -0,0 +1,206 @@ +import type { Maybe } from "Maybe" + +import type { + Alias, + Expression, + Instance, + Interface, + Module, + Targeted, + Type, +} from "@/Parser/Documentation" +import type { State } from "@/State" + +import {} from "Compare" +import { canonicalizePath, isRootPathOf } from "FilePath" +import { always, equals, ifElse } from "Function" +import { any } from "List" +import List from "List" +import { Just, Nothing } from "Maybe" +import { drop, length, split, toLower } from "String" + +import { getName, makeModule } from "@/Parser/Documentation" + + + +export type PathResult + = ModuleResult(List Module) + | ExpressionResult(String, Targeted Expression) + | TypeResult(String, Type) + | AliasResult(String, Alias) + | InterfaceResult(String, Interface) + | InstanceResult(String, Instance) + | NotFound + +emptyPaths :: Module -> Boolean +export emptyPaths = (module) => !List.isEmpty(module.expressions) + || !List.isEmpty(module.typeDeclarations) + || !List.isEmpty(module.aliases) + || !List.isEmpty(module.interfaces) + || !List.isEmpty(module.instances) + +getPossiblePaths :: Module -> List String +export getPossiblePaths = (module) => [ + ...map(getName, module.expressions), + ...map(.name, module.typeDeclarations), + ...map(.name, module.aliases), + ...map(.name, module.interfaces), + ...map(.declaration, module.instances), +] + +isParentPath :: String -> String -> Boolean +export isParentPath = (parent, child) => pipe( + canonicalizePath, + toLower, + drop(1), + isRootPathOf($, child), +)(parent) + +walkByPath :: String -> Module -> Boolean +export walkByPath = (path, module) => pipe( + .name, + toLower, + ifElse( + isParentPath(path), + always(emptyPaths(module)), + pipe( + always(getPossiblePaths(module)), + map( + pipe( + mappend(`${module.name}/`), + toLower, + ), + ), + any(isParentPath(path)), + ), + ), +)(module) + +filterByPath :: String -> List Module -> List Module +export filterByPath = (path, modules) => List.filter(walkByPath(path))(modules) + +getModulesToShow :: State -> List Module +export getModulesToShow = (state) => pipe( + .modules, + filterByPath(state.path), +)(state) + +hasLongerPath :: String -> Module -> Boolean +export hasLongerPath = (path, m) => length(canonicalizePath(path)) > length(`/${m.name}`) + +firstModuleIsInPath :: String -> Maybe Module -> Boolean +export firstModuleIsInPath = (path, maybeModule) => where(maybeModule) { + Just(m) => + hasLongerPath(path, m) + + Nothing => + false +} + +isItemView :: String -> List Module -> Boolean +export isItemView = (path, mods) => { + IO.putLine(`checking "${path}": ${show(mods)}`) + return ifElse( + pipe( + List.length, + equals(1), + ), + pipe( + List.first, + firstModuleIsInPath(path), + ), + always(false), + )(mods) +} + +nameMatchesEndOfPath :: String -> (b -> String) -> b -> Boolean +export nameMatchesEndOfPath = (path, getter, raw) => pipe( + split("/"), + List.last, + where { + Just(x) => + x == getter(raw) + + _ => + false + }, +)(path) + +tryItemByKind :: (a -> b -> PathResult) + -> (b -> String) + -> List b + -> String + -> { ...module, name :: a } + -> PathResult +export tryItemByKind = (constructor, retrieveName, items, path, module) => pipe( + List.find(nameMatchesEndOfPath(path, retrieveName)), + where { + Just(found) => + constructor(module.name, found) + + Nothing => + NotFound + }, +)(items) + + +export alias Finder = String -> Module -> PathResult + +_findItem :: List Finder -> String -> Module -> PathResult +_findItem = (finders, path, module) => where(finders) { + [try, ...others] => + where(try(path, module)) { + NotFound => + _findItem(others, path, module) + + found => + found + } + + [] => + NotFound +} + + +findItem :: String -> Module -> PathResult +export findItem = (path, module) => _findItem( + [ + tryItemByKind(ExpressionResult, getName, module.expressions), + tryItemByKind(TypeResult, .name, module.typeDeclarations), + tryItemByKind(AliasResult, .name, module.aliases), + tryItemByKind(InterfaceResult, .name, module.interfaces), + tryItemByKind(InstanceResult, .declaration, module.instances), + ], + path, + module, +) +import IO from "IO" + + + +processPath :: State -> PathResult +export processPath = (state) => { + path = state.path + return pipe( + IO.pTrace("skurp"), + getModulesToShow, + ifElse( + pipe( + isItemView(path), + IO.pTrace("isITEMVIEW?"), + ), + pipe( + IO.pTrace("yo"), + List.first, + where { + Just(m) => + findItem(path, m) + + Nothing => + NotFound + }, + ), + ModuleResult, + ), + )(state) +} diff --git a/.github/workflows/madlib_modules/MadDoc/src/PathResolver.spec.mad b/.github/workflows/madlib_modules/MadDoc/src/PathResolver.spec.mad new file mode 100644 index 0000000..8bfb601 --- /dev/null +++ b/.github/workflows/madlib_modules/MadDoc/src/PathResolver.spec.mad @@ -0,0 +1,209 @@ +import { when } from "Function" +import IO from "IO" +import List from "List" +import { Nothing } from "Maybe" +import { assertEquals, test } from "Test" + +import { JSTarget } from "./Parser/Documentation" +import { + AliasResult, + ModuleResult, + NotFound, + emptyPaths, + filterByPath, + findItem, + firstModuleIsInPath, + getModulesToShow, + getPossiblePaths, + hasLongerPath, + hasLongerPath, + isItemView, + isParentPath, + nameMatchesEndOfPath, + processPath, + tryItemByKind, + walkByPath, +} from "./PathResolver" +import { LLVM } from "./State" + + + +EMPTY_MODULE = { + aliases: [], + description: "this is a test", + expressions: [], + instances: [], + interfaces: [], + name: "test", + path: "path/to/test", + typeDeclarations: [], +} + +test( + "walkByPath", + () => do { + _ <- assertEquals( + walkByPath( + "/a/b/c", + { + ...EMPTY_MODULE, + aliases: [ + { aliasedType: "", description: "", example: "", name: "/a/b/", params: "", since: "" }, + ], + }, + ), + false, + ) + return assertEquals(walkByPath("/a/b/c", EMPTY_MODULE), false) + }, +) +test( + "getModulesToShow", + () => do { + myModule = { + ...EMPTY_MODULE, + aliases: [ + { aliasedType: "", description: "", example: "", name: "/a/b/", params: "", since: "" }, + ], + } + return assertEquals( + getModulesToShow({ path: "", search: "", target: LLVM, modules: [myModule] }), + [myModule], + ) + }, +) + +test( + "emptyPaths", + () => do { + _ <- assertEquals(emptyPaths(EMPTY_MODULE), false) + return assertEquals( + emptyPaths({ + aliases: [], + description: "this is a test", + expressions: [ + JSTarget({ + description: "this is an expression", + example: `import {cool} from "./wherever"`, + name: "cool", + since: "0.42.20", + typing: "String -> Boolean", + }), + ], + instances: [], + interfaces: [], + name: "test", + path: "path/to/test", + typeDeclarations: [], + }), + true, + ) + }, +) + +test( + "getPossiblePaths", + () => do { + _ <- assertEquals(getPossiblePaths(EMPTY_MODULE), []) + return assertEquals( + getPossiblePaths({ + ...EMPTY_MODULE, + aliases: [ + { + aliasedType: "Nice", + description: "This is an alias for Nice", + example: `import { Cool } from "Cool"`, + name: "Cool", + params: "a", + since: "0.0.1", + }, + ], + }), + ["Cool"], + ) + }, +) + +test("firstModuleIsInPath", () => assertEquals(firstModuleIsInPath("", Nothing), false)) + +test( + "isItemView - true", + () => assertEquals( + pipe( + IO.pTrace("isItemView:t!"), + isItemView("/a/b/c"), + IO.pTrace("isItemView:t?"), + )([EMPTY_MODULE]), + true, + ), +) + +test( + "isItemView - false", + () => assertEquals( + pipe( + IO.pTrace("isItemView:f!"), + isItemView("/a/b/c"), + IO.pTrace("isItemView:f?"), + )([]), + false, + ), +) + +test( + "isParentPath", + () => do { + _ <- assertEquals(isParentPath("/A/B/C", "/a/b/c/d"), false) + return assertEquals(isParentPath("/A/B/C/d", "/a/b/c"), false) + }, +) + +test("hasLongerPath", () => assertEquals(hasLongerPath("", EMPTY_MODULE), false)) + +test( + "nameMatchesEndOfPath", + () => do { + _ <- assertEquals(nameMatchesEndOfPath("", .name, { name: "x" }), false) + return assertEquals(nameMatchesEndOfPath("/a/b/c", .name, { name: "c" }), true) + }, +) + +test( + "findItem", + () => do { + aliasX = { aliasedType: "", description: "", example: "", name: "b", params: "", since: "" } + aliases = [aliasX] + + _ <- assertEquals(findItem("squibble", { ...EMPTY_MODULE, aliases }), NotFound) + return assertEquals( + findItem("/z/a/b", { ...EMPTY_MODULE, aliases }), + AliasResult("test", aliasX), + ) + }, +) + +test( + "processPath - non item view", + () => do { + myModule = { + ...EMPTY_MODULE, + aliases: [ + { aliasedType: "", description: "", example: "", name: "/a/b/", params: "", since: "" }, + ], + } + return assertEquals( + processPath({ path: "", search: "", target: LLVM, modules: [myModule] }), + ModuleResult([myModule]), + ) + }, +) + +test( + "processPath - item view", + () => do { + return assertEquals( + processPath({ path: "/a/b/c", search: "", target: LLVM, modules: [EMPTY_MODULE] }), + ModuleResult([EMPTY_MODULE]), + ) + }, +) diff --git a/.github/workflows/madlib_modules/MadDoc/src/State.mad b/.github/workflows/madlib_modules/MadDoc/src/State.mad new file mode 100644 index 0000000..cc8d13f --- /dev/null +++ b/.github/workflows/madlib_modules/MadDoc/src/State.mad @@ -0,0 +1,7 @@ +import type { Module } from "@/Parser/Documentation" + + + +export type Target = LLVM | JS + +export alias State = { modules :: List Module, path :: String, search :: String, target :: Target } diff --git a/.github/workflows/madlib_modules/MadDoc/src/TargetInfo.mad b/.github/workflows/madlib_modules/MadDoc/src/TargetInfo.mad new file mode 100644 index 0000000..65167d5 --- /dev/null +++ b/.github/workflows/madlib_modules/MadDoc/src/TargetInfo.mad @@ -0,0 +1 @@ +export alias TargetInfo = { hasJS :: Boolean, hasLLVM :: Boolean, isAvailable :: Boolean } diff --git a/.github/workflows/madlib_modules/MadDoc/src/Views/Alias.mad b/.github/workflows/madlib_modules/MadDoc/src/Views/Alias.mad new file mode 100644 index 0000000..1a6ad9e --- /dev/null +++ b/.github/workflows/madlib_modules/MadDoc/src/Views/Alias.mad @@ -0,0 +1,50 @@ +import type { Element } from "MadUI" + +import type { Alias } from "@/Parser/Documentation" +import type { State } from "@/State" + +import { className, div, li, span, text } from "MadUI" +import String from "String" + +import { Description } from "@/Views/Description" +import { Etiquette } from "@/Views/Etiquette" +import { Example } from "@/Views/Example" +import { Since } from "@/Views/Since" +import { Title } from "@/Views/Title" + + + +Alias :: String -> Alias -> Element State +export Alias = (moduleName, aliasDef) => { + aliasedType = aliasDef.aliasedType + params = String.isEmpty(aliasDef.params) ? "" : ` ${aliasDef.params}` + + return ( +
  • + {...[ + Etiquette("Alias"), + Title(aliasDef.name, { hasJS: false, hasLLVM: false, isAvailable: false }, moduleName), + ]} +
    + + alias + + + {aliasDef.name} + {params} + + + + + = + + + {aliasedType} + + + +
    + {...[Since(aliasDef), Description(aliasDef), Example(aliasDef)]} +
  • + ) +} diff --git a/.github/workflows/madlib_modules/MadDoc/src/Views/Breadcrumbs.mad b/.github/workflows/madlib_modules/MadDoc/src/Views/Breadcrumbs.mad new file mode 100644 index 0000000..feb33b5 --- /dev/null +++ b/.github/workflows/madlib_modules/MadDoc/src/Views/Breadcrumbs.mad @@ -0,0 +1,66 @@ +import type { Element } from "MadUI" + +import type { State } from "@/State" + +import { canonicalizePath, joinPath, splitPath } from "FilePath" +import { append, intersperseWithIndex, reduce } from "List" +import { className, key, li, link, text, to, ul } from "MadUI" +import {} from "Number" +import { snd } from "Tuple" + + + +type Breadcrumb = Breadcrumb(String, String) + +getLink = where { + Breadcrumb(_, l) => + l +} +getName = where { + Breadcrumb(l, _) => + l +} + + +generateBreadcrumbName :: String -> String +generateBreadcrumbName = pipe( + canonicalizePath, + (pathSegment) => pathSegment == "/" || pathSegment == "" ? "home" : pathSegment, +) + +computeBreadcrumbs :: State -> List Breadcrumb +computeBreadcrumbs = pipe( + .path, + splitPath, + reduce( + (acc, pathSegment) => where(acc) { + #[prevPath, breadcrumbs] => + pipe( + append(pathSegment), + joinPath, + (path) => #[ + path, + append(Breadcrumb(generateBreadcrumbName(pathSegment), path), breadcrumbs), + ], + )([prevPath]) + }, + #["", []], + ), + snd, +) + +BreadcrumbItem :: Breadcrumb -> Element a +BreadcrumbItem = (breadcrumb) => +
  • + + {getName(breadcrumb)} + +
  • + +Breadcrumbs :: State -> Element a +export Breadcrumbs = pipe( + computeBreadcrumbs, + map(BreadcrumbItem), + intersperseWithIndex((i) =>
  • /
  • ), + (breadcrumbs) =>
      {...breadcrumbs}
    , +) diff --git a/.github/workflows/madlib_modules/MadDoc/src/Views/Description.mad b/.github/workflows/madlib_modules/MadDoc/src/Views/Description.mad new file mode 100644 index 0000000..ffe5fd2 --- /dev/null +++ b/.github/workflows/madlib_modules/MadDoc/src/Views/Description.mad @@ -0,0 +1,16 @@ +import type { Element } from "MadUI" + +import type { State } from "@/State" + +import { className, div, text } from "MadUI" + +import { renderMarkdown } from "@/Markdown" + + + +Description :: { ...a, description :: String } -> Element State +export Description = pipe( + .description, + renderMarkdown, + (content) =>
    {content}
    , +) diff --git a/.github/workflows/madlib_modules/MadDoc/src/Views/Etiquette.mad b/.github/workflows/madlib_modules/MadDoc/src/Views/Etiquette.mad new file mode 100644 index 0000000..6f8ded1 --- /dev/null +++ b/.github/workflows/madlib_modules/MadDoc/src/Views/Etiquette.mad @@ -0,0 +1,10 @@ +import type { Element } from "MadUI" + +import type { State } from "@/State" + +import { className, div, text } from "MadUI" + + + +Etiquette :: String -> Element State +export Etiquette = (content) =>
    {content}
    diff --git a/.github/workflows/madlib_modules/MadDoc/src/Views/Example.mad b/.github/workflows/madlib_modules/MadDoc/src/Views/Example.mad new file mode 100644 index 0000000..679126e --- /dev/null +++ b/.github/workflows/madlib_modules/MadDoc/src/Views/Example.mad @@ -0,0 +1,19 @@ +import type { Element } from "MadUI" + +import type { State } from "@/State" + +import { always, ifElse } from "Function" +import { className, empty, p, text } from "MadUI" +import { isEmpty } from "String" + + + +Example :: { ...a, example :: String } -> Element State +export Example = pipe( + .example, + ifElse( + isEmpty, + always(), + (example) =>

    {example}

    , + ), +) diff --git a/.github/workflows/madlib_modules/MadDoc/src/Views/Expression.mad b/.github/workflows/madlib_modules/MadDoc/src/Views/Expression.mad new file mode 100644 index 0000000..dcd5a1c --- /dev/null +++ b/.github/workflows/madlib_modules/MadDoc/src/Views/Expression.mad @@ -0,0 +1,39 @@ +import type { Element } from "MadUI" + +import type { Expression, Targeted } from "@/Parser/Documentation" +import type { State, Target } from "@/State" +import type { TargetInfo } from "@/TargetInfo" + +import { className, key, li, text } from "MadUI" + +import { Description } from "@/Views/Description" +import { Etiquette } from "@/Views/Etiquette" +import { Example } from "@/Views/Example" +import { Since } from "@/Views/Since" +import { TargetedItem } from "@/Views/TargetedItem" +import { Title } from "@/Views/Title" +import { Typing } from "@/Views/Typing" + + + +ExpressionView :: String -> TargetInfo -> Expression -> Element State +ExpressionView = (moduleName, targetInfo, definition) => +
  • + {Etiquette("Function")} + {Title(definition.name, targetInfo, moduleName)} + {Typing(definition)} + {Since(definition)} + {Description(definition)} + {Example(definition)} +
  • + + +Expression :: Target -> String -> Targeted Expression -> Element State +export Expression = (target, moduleName, definition) => TargetedItem( + target, + definition, + ExpressionView(moduleName), +) diff --git a/.github/workflows/madlib_modules/MadDoc/src/Views/Header.mad b/.github/workflows/madlib_modules/MadDoc/src/Views/Header.mad new file mode 100644 index 0000000..e6f6f2a --- /dev/null +++ b/.github/workflows/madlib_modules/MadDoc/src/Views/Header.mad @@ -0,0 +1,67 @@ +import type { Action, Element } from "MadUI" + +import type { State, Target } from "@/State" + +import { always } from "Function" +import { + InputEvent, + button, + className, + div, + h1, + header, + input, + inputType, + onClick, + onInput, + placeholder, + syncAction, +} from "MadUI" +import String from "String" + +import { JS, LLVM } from "@/State" + + + +handleInput :: Action State +handleInput = (state, event) => where(event) { + InputEvent(e) => + [of(always({ ...state, search: String.toLower(e.target.value) }))] +} + + +handleTargetChange :: Target -> Action State +handleTargetChange = (target) => syncAction((state, _) => ({ ...state, target })) + + +Header :: Target -> Element State +export Header = (target) => +
    +

    + MadDoc +

    + +
    + + +
    +
    diff --git a/.github/workflows/madlib_modules/MadDoc/src/Views/Instance.mad b/.github/workflows/madlib_modules/MadDoc/src/Views/Instance.mad new file mode 100644 index 0000000..5f2ef9b --- /dev/null +++ b/.github/workflows/madlib_modules/MadDoc/src/Views/Instance.mad @@ -0,0 +1,49 @@ +import type { Element } from "MadUI" + +import type { Instance } from "@/Parser/Documentation" +import type { State } from "@/State" + +import { className, div, li, span, text } from "MadUI" + +import { Description } from "@/Views/Description" +import { Etiquette } from "@/Views/Etiquette" +import { Example } from "@/Views/Example" +import { Since } from "@/Views/Since" +import { Title } from "@/Views/Title" + + + +Instance :: String -> Instance -> Element State +export Instance = (moduleName, instanceDef) => { + constraints = instanceDef.constraints + constraintElements = if (constraints != "") { + [{constraints}, {` => `}] + } else { + [] + } + + return ( +
  • + {...[ + Etiquette("Instance"), + Title( + instanceDef.declaration, + { hasJS: false, hasLLVM: false, isAvailable: false }, + moduleName, + ), + ]} +
    + + instance + + + {...constraintElements} + + + {instanceDef.declaration} + +
    + {...[Since(instanceDef), Description(instanceDef), Example(instanceDef)]} +
  • + ) +} diff --git a/.github/workflows/madlib_modules/MadDoc/src/Views/Interface.mad b/.github/workflows/madlib_modules/MadDoc/src/Views/Interface.mad new file mode 100644 index 0000000..3b3ab9a --- /dev/null +++ b/.github/workflows/madlib_modules/MadDoc/src/Views/Interface.mad @@ -0,0 +1,56 @@ +import type { Element } from "MadUI" + +import type { Interface } from "@/Parser/Documentation" +import type { State } from "@/State" + +import { className, div, li, span, text } from "MadUI" + +import { Description } from "@/Views/Description" +import { Etiquette } from "@/Views/Etiquette" +import { Example } from "@/Views/Example" +import { Since } from "@/Views/Since" +import { Title } from "@/Views/Title" + + + +Interface :: String -> Interface -> Element State +export Interface = (moduleName, interfaceDef) => { + methods = interfaceDef.methods + constraints = interfaceDef.constraints + constraintElements = if (constraints != "") { + [{constraints}, {` => `}] + } else { + [] + } + + return ( +
  • + {...[ + Etiquette("Interface"), + Title(interfaceDef.name, { hasJS: false, hasLLVM: false, isAvailable: false }, moduleName), + ]} +
    + + interface + + + {...constraintElements} + + + {interfaceDef.name} + {interfaceDef.vars} + + + {` {`} + +
    + {...map((method) =>
    {method}
    , methods)} +
    + + {`}`} + +
    + {...[Since(interfaceDef), Description(interfaceDef), Example(interfaceDef)]} +
  • + ) +} diff --git a/.github/workflows/madlib_modules/MadDoc/src/Views/SideMenu.mad b/.github/workflows/madlib_modules/MadDoc/src/Views/SideMenu.mad new file mode 100644 index 0000000..9841c85 --- /dev/null +++ b/.github/workflows/madlib_modules/MadDoc/src/Views/SideMenu.mad @@ -0,0 +1,135 @@ +import type { Element } from "MadUI" + +import type { Module } from "@/Parser/Documentation" +import type { State } from "@/State" + +import {} from "Compare" +import List from "List" +import { className, div, h3, li, link, p, span, text, to, ul } from "MadUI" +import String from "String" +import Tuple from "Tuple" + +import { getName } from "@/Parser/Documentation" + + + +ModuleLink :: Module -> Element State +ModuleLink = (module) => +
  • + + + {module.name} + + +
  • + + +MenuLink :: #[String, String] -> Element State +MenuLink = where { + #[name, moduleName] => +
  • + + + {name} + + + {moduleName} + + +
  • +} + + +LinksForType :: String + -> ({ ...a, name :: String } -> List b) + -> (b -> String) + -> List { ...a, name :: String } + -> List (Element State) +LinksForType = (search, getItems, retrieveName) => pipe( + chain( + (module) => pipe( + getItems, + List.filter( + pipe( + retrieveName, + String.toLower, + String.match(search), + ), + ), + map((a) => #[retrieveName(a), module.name]), + )(module), + ), + itemsToLinks, +) + + +itemsToLinks :: List #[String, String] -> List (Element State) +itemsToLinks = pipe( + List.sortBy((a, b) => compare(Tuple.fst(a), Tuple.fst(b))), + map(MenuLink), +) + + +sortAndFilterModules :: String -> List Module -> List Module +sortAndFilterModules = (search) => pipe( + List.filter( + pipe( + .name, + String.toLower, + String.match(search), + ), + ), + List.sortBy((a, b) => compare(a.name, b.name)), +) + + +MenuSection :: String -> List (Element State) -> List (Element State) +MenuSection = (title, items) => List.isEmpty(items) + ? [] + : [ +

    + {title} +

    , +
      + {...items} +
    , + ] + +SideMenu :: String -> List Module -> Element State +export SideMenu = (search, modules) => { + moduleLinks = map(ModuleLink, sortAndFilterModules(search, modules)) + functionLinks = LinksForType(search, .expressions, getName, modules) + typeLinks = LinksForType(search, .typeDeclarations, .name, modules) + aliasLinks = LinksForType(search, .aliases, .name, modules) + interfaceLinks = LinksForType(search, .interfaces, .name, modules) + instanceLinks = LinksForType(search, .instances, .declaration, modules) + + notFound = List.all( + List.isEmpty, + [moduleLinks, functionLinks, typeLinks, aliasLinks, interfaceLinks, instanceLinks], + ) + + return notFound + ? ( +
    +

    + No result was found for + + {search} + +

    +
    + ) + : ( +
    +
    + {...MenuSection("MODULES", moduleLinks)} + {...MenuSection("FUNCTIONS", functionLinks)} + {...MenuSection("TYPES", typeLinks)} + {...MenuSection("ALIASES", aliasLinks)} + {...MenuSection("INTERFACES", interfaceLinks)} + {...MenuSection("INSTANCES", instanceLinks)} +
    +
    + ) +} diff --git a/.github/workflows/madlib_modules/MadDoc/src/Views/Since.mad b/.github/workflows/madlib_modules/MadDoc/src/Views/Since.mad new file mode 100644 index 0000000..62e0585 --- /dev/null +++ b/.github/workflows/madlib_modules/MadDoc/src/Views/Since.mad @@ -0,0 +1,19 @@ +import type { Element } from "MadUI" + +import type { State } from "@/State" + +import { always, ifElse } from "Function" +import { className, empty, p, text } from "MadUI" +import { isEmpty } from "String" + + + +Since :: { ...a, since :: String } -> Element State +export Since = pipe( + .since, + ifElse( + isEmpty, + always(), + (since) =>

    since v{since}

    , + ), +) diff --git a/.github/workflows/madlib_modules/MadDoc/src/Views/TargetedItem.mad b/.github/workflows/madlib_modules/MadDoc/src/Views/TargetedItem.mad new file mode 100644 index 0000000..cbafdf2 --- /dev/null +++ b/.github/workflows/madlib_modules/MadDoc/src/Views/TargetedItem.mad @@ -0,0 +1,28 @@ +import type { Element } from "MadUI" + +import type { Targeted } from "@/Parser/Documentation" +import type { State, Target } from "@/State" +import type { TargetInfo } from "@/TargetInfo" + +import { BothTargets, JSTarget, LLVMTarget } from "@/Parser/Documentation" +import { JS, LLVM } from "@/State" + + + +TargetedItem :: Target -> Targeted a -> (TargetInfo -> a -> Element State) -> Element State +export TargetedItem = (target, targeted, cardView) => where(targeted) { + JSTarget(js) => + target == JS + ? cardView({ hasJS: true, hasLLVM: false, isAvailable: true }, js) + : cardView({ hasJS: true, hasLLVM: false, isAvailable: false }, js) + + LLVMTarget(llvm) => + target == LLVM + ? cardView({ hasJS: false, hasLLVM: true, isAvailable: true }, llvm) + : cardView({ hasJS: false, hasLLVM: true, isAvailable: false }, llvm) + + BothTargets(js, llvm) => + target == JS + ? cardView({ hasJS: true, hasLLVM: true, isAvailable: true }, js) + : cardView({ hasJS: true, hasLLVM: true, isAvailable: true }, llvm) +} diff --git a/.github/workflows/madlib_modules/MadDoc/src/Views/Title.mad b/.github/workflows/madlib_modules/MadDoc/src/Views/Title.mad new file mode 100644 index 0000000..364c2dd --- /dev/null +++ b/.github/workflows/madlib_modules/MadDoc/src/Views/Title.mad @@ -0,0 +1,37 @@ +import type { Element } from "MadUI" + +import type { State } from "@/State" +import type { TargetInfo } from "@/TargetInfo" + +import { className, empty, h2, span, text } from "MadUI" + + + +makeTagClassName :: Boolean -> String +makeTagClassName = (isWarning) => isWarning + ? "definition__target-tag definition__target-tag--warning" + : "definition__target-tag" + + +TargetTags :: TargetInfo -> List (Element State) +TargetTags = (targetInfo) => { + unavailable = !targetInfo.isAvailable + unavailableClass = makeTagClassName(unavailable) + return [ + targetInfo.hasJS ? JS : , + targetInfo.hasLLVM ? LLVM : , + ] +} + + +Title :: String -> TargetInfo -> String -> Element State +export Title = (title, targetInfo, moduleName) => +

    + + {title} + + {...TargetTags(targetInfo)} + + {moduleName} + +

    diff --git a/.github/workflows/madlib_modules/MadDoc/src/Views/Type.mad b/.github/workflows/madlib_modules/MadDoc/src/Views/Type.mad new file mode 100644 index 0000000..8d71e3c --- /dev/null +++ b/.github/workflows/madlib_modules/MadDoc/src/Views/Type.mad @@ -0,0 +1,84 @@ +import type { Element } from "MadUI" + +import type { Type } from "@/Parser/Documentation" +import type { State } from "@/State" + +import { first, length } from "List" +import { className, div, li, span, text } from "MadUI" +import { fromMaybe } from "Maybe" + +import { Description } from "./Description" +import { Etiquette } from "./Etiquette" +import { Example } from "./Example" +import { Since } from "./Since" +import { Title } from "./Title" + + + +Type :: String -> Type -> Element State +export Type = (moduleName, typeDefinition) => { + constructors = typeDefinition.constructors + manyCtors = length(constructors) > 1 + + renderedConstructors = manyCtors + ? ConstructorsView("=", constructors) + : [ + + + = + + + {fromMaybe("???", first(constructors))} + + , + ] + + return ( +
  • + {...[ + Etiquette("Type"), + Title( + typeDefinition.name, + { hasJS: false, hasLLVM: false, isAvailable: false }, + moduleName, + ), + ]} +
    + + type + + + {typeDefinition.name} + {typeDefinition.params} + + + {...renderedConstructors} + +
    + {...[Since(typeDefinition), Description(typeDefinition), Example(typeDefinition)]} +
  • + ) +} + +ConstructorsView :: String -> List String -> List (Element a) +ConstructorsView = (separator, items) => where(items) { + [ctor, ...more] => + [ConstructorView(separator, ctor), ...ConstructorsView("|", more)] + + [ctor] => + [ConstructorView(separator, ctor)] + + [] => + [] +} + +ConstructorView :: String -> String -> Element a +ConstructorView = (separator, constructor) => +
    + + {separator} + + + {constructor} + +
    diff --git a/.github/workflows/madlib_modules/MadDoc/src/Views/Typing.mad b/.github/workflows/madlib_modules/MadDoc/src/Views/Typing.mad new file mode 100644 index 0000000..43c7b08 --- /dev/null +++ b/.github/workflows/madlib_modules/MadDoc/src/Views/Typing.mad @@ -0,0 +1,13 @@ +import type { Element } from "MadUI" + +import type { State } from "@/State" + +import { className, p, span, text } from "MadUI" + + + +Typing :: { ...a, typing :: String } -> Element State +export Typing = pipe( + .typing, + (typing) =>

    {typing}

    , +) diff --git a/.github/workflows/madlib_modules/MadDoc/src/index.html b/.github/workflows/madlib_modules/MadDoc/src/index.html new file mode 100644 index 0000000..a838502 --- /dev/null +++ b/.github/workflows/madlib_modules/MadDoc/src/index.html @@ -0,0 +1,11 @@ + + + + + + + +
    + + + diff --git a/.github/workflows/madlib_modules/MadDoc/src/styles/main.scss b/.github/workflows/madlib_modules/MadDoc/src/styles/main.scss new file mode 100644 index 0000000..0a8a0a5 --- /dev/null +++ b/.github/workflows/madlib_modules/MadDoc/src/styles/main.scss @@ -0,0 +1,442 @@ +$background-color: #eeeeee; +$primary-color: #0c96cc; +$primary-color-greyed-out: #cfcfcf; +$primary-color-light: #bce5f5; +$dark-grey: #333333; + +input:focus, +button:focus { + outline: none; +} + +ul { + list-style: none; + padding: 0; +} + +body { + font: + 14px "Helvetica Neue", + Helvetica, + Arial, + sans-serif; + color: $dark-grey; + background-color: $background-color; + margin: 0 auto; + --webkit-font-smoothing: antialiased; +} + +.documentation { + display: flex; + flex-direction: row; + min-height: 100vh; +} + +a { + color: inherit; + text-decoration: none; +} + +// ---------------------------------------------- +// Side Menu +// ---------------------------------------------- + +.side-menu { + min-width: 300px; + background-color: white; + height: calc(100vh - 80px); + position: sticky; + top: 80px; + border-right: 1px solid #ccc; + flex-shrink: 0; +} + +.side-menu__no-result { + padding: 20px; + max-width: 300px; +} + +.side-menu__no-result-search { + font-weight: 800; +} + +.side-menu__scrollbar-container { + height: 100%; + overflow: scroll; +} + +.side-menu__title { + padding: 0 15px 0 15px; + font-size: 24px; + margin-bottom: 5px; +} + +.side-menu__link-list { + margin: 0; + padding-bottom: 20px; +} + +.side-menu__link { + box-sizing: border-box; + cursor: pointer; + display: flex; + flex-direction: row; + width: 100%; + padding: 5px 15px; + + &:hover { + background: $background-color; + } +} + +.side-menu__link-name { + flex-grow: 1; + margin-right: 20px; + font-family: Menlo, Monaco, Consolas, "Courier New", monospace; + white-space: nowrap; +} + +.side-menu__link-extra { + background-color: $primary-color-light; + color: $primary-color; + padding: 1px 5px; + border-radius: 3px; +} + +// ---------------------------------------------- +// Main Content +// ---------------------------------------------- + +.documentation__content { + min-width: 230px; + flex-grow: 1; + padding: 100px 30px 0 30px; +} + +.content__items { + margin-top: 50px; +} + +// ---------------------------------------------- +// Header +// ---------------------------------------------- + +.header { + height: 60px; + padding: 10px 10px 10px 30px; + position: fixed; + z-index: 1; + width: 100%; + color: white; + background-color: $primary-color; + box-shadow: 0px 0px 10px 2px rgba(0, 0, 0, 0.36); +} + +.header__title { + display: inline-block; + margin: 15px 0; +} + +.search-field { + background: white; + border: none; + border-radius: 5px; + padding: 10px; + min-width: 350px; + position: relative; + display: -webkit-inline-box; + top: -7px; + margin-left: 50px; + + box-shadow: inset 0px 0px 5px -1px rgb(0 0 0 / 80%); + + &::placeholder { + color: #aaa; + font-style: italic; + } +} + +.target-selector { + display: inline-block; + position: absolute; + right: 60px; + top: 20%; + height: 60%; +} + +.target-selector__button { + height: 100%; + border: 0; + padding: 0 10px; + color: #939393; + background: #cfcfcf; + transition-timing-function: ease-in-out; + transition: + background 0.6s, + color 0.6s; + + cursor: pointer; + font-weight: bold; + // box-shadow: inset 0px 0px 5px 1px rgb(255 255 255 / 41%); + font-family: Verdana, Geneva, Tahoma, sans-serif; + + &:nth-child(1) { + border-top-left-radius: 5px; + border-bottom-left-radius: 5px; + border-top-right-radius: 0px; + border-bottom-right-radius: 0px; + } + + &:nth-child(2) { + border-top-left-radius: 0px; + border-bottom-left-radius: 0px; + border-top-right-radius: 5px; + border-bottom-right-radius: 5px; + } + + &:not(.target-selector__button--selected) { + &:hover { + transition: + background 0.3s, + color 0.3s; + color: white; + background: #5fbee4; + box-shadow: inset 0px 0px 5px 1px rgb(255 255 255 / 41%); + } + } + + &--selected { + color: $primary-color; + background: white; + box-shadow: inset 0px 0px 5px 0px rgb(0 0 0 / 40%); + cursor: initial; + } +} + +// ---------------------------------------------- +// Definition +// ---------------------------------------------- + +.definition { + font-size: 16px; + margin: 0 0 30px 0; + border: 1px solid #fff; + -webkit-box-shadow: 0 0 0 1px #ccc; + box-shadow: 0 0 0 1px #ccc; + padding: 15px; + background: #fff; + border-radius: 0 2px 2px 2px; + position: relative; +} + +.definition--greyed-out .definition__etiquette { + background: $primary-color-greyed-out; +} + +.definition__etiquette { + transition: + background 0.3s, + color 0.3s; + position: absolute; + left: -2px; + top: -2px; + transform: translateY(-100%); + text-orientation: upright; + color: white; + background: $primary-color; + padding: 0 10px; + font-weight: bold; + font-size: 14px; +} + +.definition--greyed-out .definition__title { + color: #808080; +} + +.definition__target-tag { + transition: + background 0.3s, + color 0.3s; + color: #0c96cc; + background-color: #bce5f5; + font-size: 12px; + margin-right: 10px; + padding: 5px; + border-radius: 5px; + vertical-align: middle; + + &--warning { + background-color: #ffeded; + color: #ee6969; + } +} + +.definition__title { + transition: + background 0.3s, + color 0.3s; + font-size: 30px; + font-weight: 700; + margin-top: 0; + margin-bottom: 10px; +} + +.definition__title-span { + margin-right: 15px; +} + +.definition--greyed-out .definition__module { + color: #c5c5c5; + background: #f0f0f0; +} + +.definition__module { + transition: + background 0.3s, + color 0.3s; + display: inline; + padding: 0.2em 0.6em 0.3em; + font-size: 75%; + font-weight: 700; + color: #fff; + text-align: center; + white-space: nowrap; + vertical-align: baseline; + border-radius: 0.25em; + background: $primary-color-light; + color: $primary-color; + float: right !important; +} + +.definition__type { + padding: 2px 4px; + font-size: 90%; + color: #000; + background-color: $background-color; + border-radius: 4px; + font-family: Menlo, Monaco, Consolas, "Courier New", monospace; +} + +.definition__since { + font-size: 14px; + font-style: italic; +} + +.definition__description { + margin-bottom: 20px; + + > p { + margin: 4px 0; + } +} + +.definition__example { + background-color: $dark-grey; + color: #cccccc; + margin: 0 -15px -15px -15px; + padding: 15px; + font-weight: 500; + white-space: pre-wrap; + word-wrap: break-word; + font-family: Menlo, Monaco, Consolas, "Courier New", monospace; +} + +.example__line { + margin-bottom: 4px; +} + +.highlight { + color: $primary-color; + font-weight: 800; +} + +.definition__adt, +.definition__interface { + white-space: pre-wrap; + font-family: Menlo, Monaco, Consolas, "Courier New", monospace; +} + +// ---------------------------------------------- +// Markdown +// ---------------------------------------------- +.markdown { + line-height: 1.5; + + p { + margin-top: 0; + margin-bottom: 10px; + } + + ul { + padding-left: 20px; + + li::before { + content: " "; + font-size: 16px; + display: inline-block; + width: 6px; + height: 6px; + background: black; + border-radius: 8px; + margin-right: 10px; + margin-bottom: 2px; + } + } +} + +.markdown__inline-code { + background-color: $background-color; + border-radius: 4px; + font-family: Menlo, Monaco, Consolas, "Courier New", monospace; + padding: 2px 4px; +} + +.markdown__link { + color: $primary-color; + cursor: pointer; +} + +// ---------------------------------------------- +// Breadcrumbs +// ---------------------------------------------- + +.breadcrumbs { + margin: 0 0 40px 0; +} + +.breadcrumbs__item { + display: inline-block; + cursor: pointer; +} + +.breadcrumbs__separator { + display: inline-block; + margin: 0 10px; +} + +// ---------------------------------------------- +// Module +// ---------------------------------------------- + +.module { + margin-bottom: 80px; +} + +.module__title { + margin: 0 0 20px 0; + font-size: 40px; + + > a { + cursor: pointer; + } +} + +.module__description { + margin: 0 0 80px 0; + font-size: 16px; + background-color: white; + box-shadow: 0 0 0 1px #ccc; + border: 1px solid #fff; + border-radius: 2px; + padding: 15px; +} diff --git a/.github/workflows/madlib_modules/MadDoc/version.lock b/.github/workflows/madlib_modules/MadDoc/version.lock new file mode 100644 index 0000000..deecab9 --- /dev/null +++ b/.github/workflows/madlib_modules/MadDoc/version.lock @@ -0,0 +1,18 @@ +{ + "buildHash": "25f6cef77410c505301cb6de49b86dd9", + "jsApi": { + "apiInstances": [], + "apiAliases": {}, + "apiInterfaces": {}, + "apiNames": {}, + "apiTypes": {} + }, + "llvmApi": { + "apiInstances": [], + "apiAliases": {}, + "apiInterfaces": {}, + "apiNames": {}, + "apiTypes": {} + }, + "versionHash": "0303f93637e61e28843862449f225607" +} diff --git a/.github/workflows/madlib_modules/MadDocCli/.github/workflows/build.yml b/.github/workflows/madlib_modules/MadDocCli/.github/workflows/build.yml new file mode 100644 index 0000000..fb9bf22 --- /dev/null +++ b/.github/workflows/madlib_modules/MadDocCli/.github/workflows/build.yml @@ -0,0 +1,33 @@ +on: [push] + +env: + node-version: 14.x + +name: build + +jobs: + build: + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v2 + + - name: Setup Node.js ${{ env.node-version }} + uses: actions/setup-node@v1 + with: + node-version: ${{ env.node-version }} + + - name: Install Madlib + run: npm install -g @madlib-lang/madlib@0.15.1 + + - name: Display Madlib version + run: madlib -v + + - name: Run tests + run: madlib test --coverage + + - name: Push coverage to Coveralls + uses: coverallsapp/github-action@master + with: + github-token: ${{ secrets.GITHUB_TOKEN }} + path-to-lcov: .coverage/lcov.info diff --git a/.github/workflows/madlib_modules/MadDocCli/.github/workflows/release.yml b/.github/workflows/madlib_modules/MadDocCli/.github/workflows/release.yml new file mode 100644 index 0000000..94e2222 --- /dev/null +++ b/.github/workflows/madlib_modules/MadDocCli/.github/workflows/release.yml @@ -0,0 +1,67 @@ +name: 'Publish new version' + +on: + workflow_dispatch: + inputs: + version: + description: 'Version to publish ( ex: v0.0.1 )' + required: true + +env: + node-version: 14.x + + +jobs: + check-version: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + - run: | + MADLIB_PKG_VERSION="v$(cat madlib.json | grep version | cut -d":" -f2 | cut -d"\"" -f2)" + TAG_NAME=${{ github.event.inputs.version }} + if [ "$TAG_NAME" = "$MADLIB_PKG_VERSION" ]; then + echo "Versions match" + else + echo "Versions in madlib.json is not ${TAG_NAME}" + exit 1 + fi + + release: + needs: check-version + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + + - name: Use Node.js ${{ env.node-version }} + uses: actions/setup-node@v2 + with: + node-version: ${{ env.node-version }} + + - name: "Changelog: generate changelog" + id: changelog + uses: TriPSs/conventional-changelog-action@v3.4.1 + with: + presets: "conventionalcommits" + github-token: ${{ secrets.GITHUB_TOKEN }} + skip-on-empty: false + output-file: false + tag-prefix: 'v' + skip-commit: true + skip-version-file: true + + - name: "Delete created tag from changelog" + run: | + git push --delete origin v${{ steps.changelog.outputs.version }} + git tag -d v${{ steps.changelog.outputs.version }} + + - name: "Create Release" + id: create_release + uses: actions/create-release@v1.1.4 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + with: + tag_name: ${{ github.event.inputs.version }} + release_name: Release ${{ github.event.inputs.version }} + body: ${{ steps.changelog.outputs.clean_changelog }} + draft: false + prerelease: false diff --git a/.github/workflows/madlib_modules/MadDocCli/.gitignore b/.github/workflows/madlib_modules/MadDocCli/.gitignore new file mode 100644 index 0000000..c8b8341 --- /dev/null +++ b/.github/workflows/madlib_modules/MadDocCli/.gitignore @@ -0,0 +1,12 @@ +madlib_modules +node_modules +/build +.DS_Store +.run +.docs +.tests +.coverage +documentation.json +coverage +.module_cache + diff --git a/.github/workflows/madlib_modules/MadDocCli/README.md b/.github/workflows/madlib_modules/MadDocCli/README.md new file mode 100644 index 0000000..ba55ce2 --- /dev/null +++ b/.github/workflows/madlib_modules/MadDocCli/README.md @@ -0,0 +1,3 @@ +# MadDoc CLI +[![build](https://github.com/madlib-lang/maddoc-cli/actions/workflows/build.yml/badge.svg)](https://github.com/madlib-lang/maddoc-cli/actions/workflows/build.yml) +[![Coverage Status](https://coveralls.io/repos/github/madlib-lang/maddoc-cli/badge.svg?branch=master)](https://coveralls.io/github/madlib-lang/maddoc-cli?branch=master) diff --git a/.github/workflows/madlib_modules/MadDocCli/madlib.json b/.github/workflows/madlib_modules/MadDocCli/madlib.json new file mode 100644 index 0000000..481bcec --- /dev/null +++ b/.github/workflows/madlib_modules/MadDocCli/madlib.json @@ -0,0 +1,17 @@ +{ + "name": "MadDocCli", + "version": "0.0.9", + "madlibVersion": "0.14.0", + "main": "src/Main.mad", + "bin": "src/Main.mad", + "importAliases": { + ".": "src" + }, + "dependencies": [ + { + "minVersion": "0.0.6", + "url": "https://github.com/madlib-lang/maddoc/archive/refs/tags/v0.0.6.zip", + "description": "MadDoc" + } + ] +} diff --git a/.github/workflows/madlib_modules/MadDocCli/package-lock.json b/.github/workflows/madlib_modules/MadDocCli/package-lock.json new file mode 100644 index 0000000..8f0c893 --- /dev/null +++ b/.github/workflows/madlib_modules/MadDocCli/package-lock.json @@ -0,0 +1,138 @@ +{ + "name": "maddoc-cli", + "version": "0.0.1", + "lockfileVersion": 1, + "requires": true, + "dependencies": { + "anymatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", + "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", + "requires": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + } + }, + "binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==" + }, + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "requires": { + "fill-range": "^7.0.1" + } + }, + "chokidar": { + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.1.tgz", + "integrity": "sha512-9+s+Od+W0VJJzawDma/gvBNQqkTiqYTWLuZoyAsivsI4AaWTCzHG06/TMjsf1cYe9Cb97UCEhjz7HvnPk2p/tw==", + "requires": { + "anymatch": "~3.1.1", + "braces": "~3.0.2", + "fsevents": "~2.3.1", + "glob-parent": "~5.1.0", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.5.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==", + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "optional": true + }, + "glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "requires": { + "is-glob": "^4.0.1" + } + }, + "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==", + "requires": { + "binary-extensions": "^2.0.0" + } + }, + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=" + }, + "is-glob": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", + "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", + "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==" + }, + "madmarkdown-renderer": { + "version": "file:madlib_modules/MadMarkdownRenderer", + "requires": { + "sass": "^1.32.6" + } + }, + "normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==" + }, + "picomatch": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.3.tgz", + "integrity": "sha512-KpELjfwcCDUb9PeigTs2mBJzXUPzAuP2oPcA989He8Rte0+YUAjw1JVedDhuTKPkHjSYzMN3npC9luThGYEKdg==" + }, + "readdirp": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.5.0.tgz", + "integrity": "sha512-cMhu7c/8rdhkHXWsY+osBhfSy0JikwpHK/5+imo+LpeasTF8ouErHrlYkwT0++njiyuDvc7OFY5T3ukvZ8qmFQ==", + "requires": { + "picomatch": "^2.2.1" + } + }, + "sass": { + "version": "1.32.8", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.32.8.tgz", + "integrity": "sha512-Sl6mIeGpzjIUZqvKnKETfMf0iDAswD9TNlv13A7aAF3XZlRPMq4VvJWBC2N2DXbp94MQVdNSFG6LfF/iOXrPHQ==", + "requires": { + "chokidar": ">=2.0.0 <4.0.0" + } + }, + "snabbdom": { + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/snabbdom/-/snabbdom-3.5.1.tgz", + "integrity": "sha512-wHMNIOjkm/YNE5EM3RCbr/+DVgPg6AqQAX1eOxO46zYNvCXjKP5Y865tqQj3EXnaMBjkxmQA5jFuDpDK/dbfiA==" + }, + "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==", + "requires": { + "is-number": "^7.0.0" + } + } + } +} diff --git a/.github/workflows/madlib_modules/MadDocCli/package.json b/.github/workflows/madlib_modules/MadDocCli/package.json new file mode 100644 index 0000000..5023bbc --- /dev/null +++ b/.github/workflows/madlib_modules/MadDocCli/package.json @@ -0,0 +1,16 @@ +{ + "name": "maddoc-cli", + "version": "0.0.1", + "description": "You just created a new madlib project, if it's your first project you should read the following. ### Notes on Madlib Madlib is a general purpose programming language that compiles to Javascript. It means that you need to have [Nodejs](https://nodejs.org/) installed and configured in order to make it work. Madlib can target nodejs or browser, by default it will compile for nodejs. ### How to run it First, you need to compile the program: ```shell madlib compile -i src/Main.mad ``` Then, you can run it like this: ```shell node build/Main.mjs ```", + "main": "index.js", + "dependencies": { + "sass": "^1.32.8", + "snabbdom": "^3.5.1" + }, + "devDependencies": {}, + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1" + }, + "author": "", + "license": "ISC" +} diff --git a/.github/workflows/madlib_modules/MadDocCli/src/Build.mad b/.github/workflows/madlib_modules/MadDocCli/src/Build.mad new file mode 100644 index 0000000..2c49885 --- /dev/null +++ b/.github/workflows/madlib_modules/MadDocCli/src/Build.mad @@ -0,0 +1,204 @@ +#iftarget js +import type { Wish } from "Wish" + +import type { IOUtils } from "@/IOUtils" + +import { always } from "Function" +import IO from "IO" +import { dropLast, intersperse, last, nth, reduce } from "List" +import { Just, Nothing } from "Maybe" +import Process from "Process" +import String from "String" +import { join, split } from "String" +import { bad, mapRej } from "Wish" + + + +alias InputOutput = { input :: String, output :: String } + +export alias Config = { + documentationDotJson :: InputOutput, + html :: InputOutput, + madlib :: InputOutput, + sassExecutablePath :: String, + styles :: InputOutput, +} + +MADDOC_PACKAGE_FOLDER :: String +MADDOC_PACKAGE_FOLDER = "MadDoc" + +MADLIB_MODULES_FOLDER :: String +MADLIB_MODULES_FOLDER = "madlib_modules" + +JS_BUNDLE_PATH :: String +JS_BUNDLE_PATH = ".docs/bundle.js" + +CSS_TARGET_PATH :: String +CSS_TARGET_PATH = ".docs/styles/main.css" + +HTML_TARGET_PATH :: String +HTML_TARGET_PATH = ".docs/index.html" + + +parentPath :: Integer -> String -> String +parentPath = (levelsUp, path) => pipe( + split("/"), + dropLast(levelsUp), + join("/"), +)(path) + +pathToDocument :: IOUtils -> Wish String String +export pathToDocument = pipe( + .args, + nth(1), + where { + Just(path) => + of(path) + + Nothing => + bad("You must give a path to the .mad files to document!") + }, +) + + +madDocRootPath :: IOUtils -> String +export madDocRootPath = (ioUtils) => { + exePath = ioUtils.getExecutablePath() + + return pipe( + parentPath(3), + split("/"), + last, + where { + Just("madlib_modules") => + `${parentPath(3, exePath)}/${MADDOC_PACKAGE_FOLDER}` + + _ => + `${parentPath(3, exePath)}/${MADLIB_MODULES_FOLDER}/${MADDOC_PACKAGE_FOLDER}` + }, + )(exePath) +} + +sassExecutablePath :: IOUtils -> String +export sassExecutablePath = (ioUtils) => pipe( + madDocRootPath, + (rootPath) => `${parentPath(2, rootPath)}/node_modules/.bin/sass`, +)(ioUtils) + +madDocSrcPath :: IOUtils -> String +export madDocSrcPath = (ioUtils) => pipe( + madDocRootPath, + mappend($, "/src"), +)(ioUtils) + +documentationTargetPath :: IOUtils -> String +export documentationTargetPath = (ioUtils) => pipe( + madDocSrcPath, + mappend($, "/documentation.json"), +)(ioUtils) + +madDocMainPath :: IOUtils -> String +export madDocMainPath = (ioUtils) => pipe( + madDocSrcPath, + mappend($, "/Main.mad"), +)(ioUtils) + +sassPath :: IOUtils -> String +export sassPath = (ioUtils) => pipe( + madDocSrcPath, + mappend($, "/styles/main.scss"), +)(ioUtils) + +htmlSourcePath :: IOUtils -> String +export htmlSourcePath = (ioUtils) => pipe( + madDocSrcPath, + mappend($, "/index.html"), +)(ioUtils) + + +generateConfiguration :: IOUtils -> Wish String Config +export generateConfiguration = (ioUtils) => do { + input <- pathToDocument(ioUtils) + generated = { + madlib: { input: madDocMainPath(ioUtils), output: JS_BUNDLE_PATH }, + styles: { input: sassPath(ioUtils), output: CSS_TARGET_PATH }, + html: { input: htmlSourcePath(ioUtils), output: HTML_TARGET_PATH }, + sassExecutablePath: sassExecutablePath(ioUtils), + documentationDotJson: { input, output: documentationTargetPath(ioUtils) }, + } + return of(generated) +} + + +generateJson :: IOUtils -> Config -> Wish String String +export generateJson = (ioUtils, config) => pipe( + (c) => ["doc", "-i", c.documentationDotJson.input], + ioUtils.exec("madlib", $, Process.DEFAULT_COMMAND_OPTIONS), + mapRej(.stderr), + mapRej( + (err) => `An error occured while generating the docs, here is the error from madlib:\n${err}`, + ), + chain( + pipe( + .stdout, + ioUtils.writeFile(config.documentationDotJson.output), + mapRej( + always( + `documentation.json file could not be saved to ${config.documentationDotJson.output}`, + ), + ), + ), + ), + map(always(`Documentation built and saved in '${config.documentationDotJson.output}'`)), +)(config) + + +buildBundle :: IOUtils -> Config -> Wish String String +export buildBundle = (ioUtils) => pipe( + (c) => [ + "compile", + "-i", + c.madlib.input, + "--target", + "browser", + "--bundle", + "-o", + c.madlib.output, + ], + (x) => { + IO.putLine(`madlib ${String.join(" ", x)}`) + return x + }, + ioUtils.exec("madlib", $, Process.DEFAULT_COMMAND_OPTIONS), + mapRej(.stderr), + map(.stdout), +) + +buildSass :: IOUtils -> Config -> Wish String String +export buildSass = (ioUtils) => pipe( + (c) => ioUtils.exec( + c.sassExecutablePath, + [c.styles.input, c.styles.output], + Process.DEFAULT_COMMAND_OPTIONS, + ), + mapRej(.stderr), + map(.stdout), +) + +copyHtml :: IOUtils -> Config -> Wish String String +export copyHtml = (ioUtils) => pipe( + (c) => ioUtils.exec("cp", [c.html.input, c.html.output], Process.DEFAULT_COMMAND_OPTIONS), + mapRej(.stderr), + map(.stdout), +) + +buildDocumentation :: IOUtils -> Config -> Wish String String +export buildDocumentation = (ioUtils, config) => pipe( + buildBundle(ioUtils), + // chain(() => buildSass(ioUtils, config)), + chain(() => copyHtml(ioUtils, config)), + chain(() => of(`${ioUtils.getCurrentWorkingDirectory()}/.docs`)), + map((outputPath) => `Documentation built and available in the folder '${outputPath}'`), +)(config) + +#endif diff --git a/.github/workflows/madlib_modules/MadDocCli/src/Build.spec.mad b/.github/workflows/madlib_modules/MadDocCli/src/Build.spec.mad new file mode 100644 index 0000000..ad86570 --- /dev/null +++ b/.github/workflows/madlib_modules/MadDocCli/src/Build.spec.mad @@ -0,0 +1,371 @@ +#iftarget js + +import type { Wish } from "Wish" + +import type { Config } from "@/Build" +import type { IOUtils } from "@/IOUtils" + +import FilePath from "FilePath" +import { always } from "Function" +import Process from "Process" +import String from "String" +import { ErrorWithMessage, assertEquals, test } from "Test" +import { bad, chainRej, mapRej } from "Wish" + +import { + buildBundle, + buildDocumentation, + buildSass, + copyHtml, + documentationTargetPath, + generateConfiguration, + generateJson, + htmlSourcePath, + madDocMainPath, + madDocRootPath, + madDocSrcPath, + pathToDocument, + sassExecutablePath, + sassPath, +} from "@/Build" + + + +INITIAL_IOUTILS :: IOUtils +INITIAL_IOUTILS = { + args: [], + writeFile: (_, _) => of({}), + getCurrentWorkingDirectory: () => "", + getExecutablePath: () => "", + exec: (cmd, args, _) => of({ + exitCode: 0, + stderr: "", + stdout: `${cmd} ${String.join(" ", args)}`, + }), +} + +local :: String -> String +local = (str) => FilePath.joinPath([Process.getCurrentWorkingDirectory(), str]) + + +MADDOCCLI_MAIN_DOT_JS_PATH = local("build/src/Main.mjs") +FIXTURE_IOUTILS = { ...INITIAL_IOUTILS, getExecutablePath: () => MADDOCCLI_MAIN_DOT_JS_PATH } + + +DEFAULT_CONFIG :: Config +DEFAULT_CONFIG = { + madlib: { input: local("madlib_modules/MadDoc/src/Main.mad"), output: ".docs/bundle.js" }, + styles: { + input: local("madlib_modules/MadDoc/src/styles/main.scss"), + output: ".docs/styles/main.css", + }, + html: { input: local("madlib_modules/MadDoc/src/index.html"), output: ".docs/index.html" }, + sassExecutablePath: local("node_modules/.bin/sass"), + documentationDotJson: { + input: "/path/to/document", + output: local("madlib_modules/MadDoc/src/documentation.json"), + }, +} + +test( + "pathToDocument - arg is set", + () => pipe( + pathToDocument, + mapRej(() => ErrorWithMessage("pathToDocument should succeed")), + chain(assertEquals($, "/path/to/document")), + )({ ...INITIAL_IOUTILS, args: ["", "/path/to/document"] }), +) + +test( + "pathToDocument - arg is not set", + () => pipe( + pathToDocument, + map(always({})), + chainRej(assertEquals($, "You must give a path to the .mad files to document!")), + )({ ...INITIAL_IOUTILS, args: [] }), +) + +test( + "madDocRootPath - should return the root of maddoc project", + () => pipe( + madDocRootPath, + assertEquals($, local("madlib_modules/MadDoc")), + )(FIXTURE_IOUTILS), +) + +test( + "madDocRootPath - should return the root of maddoc project when installed as a dependency", + () => pipe( + madDocRootPath, + assertEquals($, "/home/madlib/my-package/madlib_modules/MadDoc"), + )({ + ...INITIAL_IOUTILS, + getExecutablePath: ( + + ) => "/home/madlib/my-package/madlib_modules/https___github_com_madlib_lang_maddoc_cli_archive_refs_heads_master_zip/.run/Main.mjs", + }), +) + +test( + "sassExecutablePath - should return the local sass install in node_modules if run locally", + () => pipe( + sassExecutablePath, + assertEquals($, local("node_modules/.bin/sass")), + )(FIXTURE_IOUTILS), +) + +test( + "sassExecutablePath - should return the local sass install in node_modules if run from a package", + () => pipe( + sassExecutablePath, + assertEquals($, "/home/madlib/my-package/node_modules/.bin/sass"), + )({ + ...INITIAL_IOUTILS, + getExecutablePath: () => "/home/madlib/my-package/madlib_modules/MadDoc/.run/Main.mjs", + }), +) + +test( + "madDocSrcPath - should return the path of the src folder from MadDoc", + () => pipe( + madDocSrcPath, + assertEquals($, local("madlib_modules/MadDoc/src")), + )(FIXTURE_IOUTILS), +) + +test( + "documentationTargetPath - should return the path for the documentation.json file", + () => pipe( + documentationTargetPath, + assertEquals($, local("madlib_modules/MadDoc/src/documentation.json")), + )(FIXTURE_IOUTILS), +) + +test( + "madDocMainPath - should return the path for the Main module of MadDoc", + () => pipe( + madDocMainPath, + assertEquals($, local("madlib_modules/MadDoc/src/Main.mad")), + )(FIXTURE_IOUTILS), +) + +test( + "sassPath - should return the path for the sass file to compile", + () => pipe( + sassPath, + assertEquals($, local("madlib_modules/MadDoc/src/styles/main.scss")), + )(FIXTURE_IOUTILS), +) + +test( + "htmlSourcePath - should return the path of index.html file to copy", + () => pipe( + htmlSourcePath, + assertEquals($, local("madlib_modules/MadDoc/src/index.html")), + )(FIXTURE_IOUTILS), +) + +test( + "generateConfiguration - should generate a correct Config with all paths", + () => { + expected = DEFAULT_CONFIG + + return pipe( + generateConfiguration, + mapRej(() => ErrorWithMessage("generateConfiguration should be success")), + chain(assertEquals($, expected)), + )({ + ...INITIAL_IOUTILS, + getExecutablePath: () => MADDOCCLI_MAIN_DOT_JS_PATH, + args: ["", "/path/to/document"], + }) + }, +) + +test( + "generateJson - should call 'madlib doc' command with correct options", + () => { + command = "" + expected = "madlib doc -i /path/to/document" + + execRecorder :: String + -> List String + -> a + -> Wish e { exitCode :: b, stderr :: String, stdout :: String } + execRecorder = (cmd, args, _) => { + command := `${cmd} ${String.join(" ", args)}` + return of({ exitCode: 0, stderr: "", stdout: "good" }) + } + + return pipe( + generateJson({ ...INITIAL_IOUTILS, exec: execRecorder }), + mapRej(() => ErrorWithMessage("generateJson should be success")), + chain(() => assertEquals(command, expected)), + )(DEFAULT_CONFIG) + }, +) + +test( + "generateJson - should reject if 'madlib doc' command fails", + () => { + expected = "An error occured while generating the docs, here is the error from madlib:\nCould not generate doc" + execRecorder = (_, _, _) => bad({ exitCode: 1, stderr: "Could not generate doc", stdout: "" }) + + return pipe( + generateJson({ ...INITIAL_IOUTILS, exec: execRecorder }), + map(always({})), + chainRej(assertEquals($, expected)), + )(DEFAULT_CONFIG) + }, +) + +test( + "buildBundle - should call the madlib compiler with correct options", + () => { + command = "" + expected = `madlib compile -i ${ + local("madlib_modules/MadDoc/src/Main.mad") + } --target browser --bundle -o .docs/bundle.js` + + execRecorder :: String + -> List String + -> a + -> Wish e { exitCode :: b, stderr :: String, stdout :: String } + execRecorder = (cmd, args, _) => { + command := `${cmd} ${String.join(" ", args)}` + return of({ exitCode: 0, stderr: "", stdout: "good" }) + } + + return pipe( + buildBundle({ ...INITIAL_IOUTILS, exec: execRecorder }), + mapRej(() => ErrorWithMessage("buildBundle should be success")), + chain(() => assertEquals(command, expected)), + )(DEFAULT_CONFIG) + }, +) + +test( + "buildBundle - should reject if 'madlib compile' command fails", + () => { + expected = "Compilation error" + execRecorder = (_, _, _) => bad({ exitCode: 1, stderr: "Compilation error", stdout: "" }) + + return pipe( + buildBundle({ ...INITIAL_IOUTILS, exec: execRecorder }), + map(always({})), + chainRej(assertEquals($, expected)), + )(DEFAULT_CONFIG) + }, +) + +test( + "buildSass - should call the sass executable with correct options", + () => { + command = "" + expected = local( + `node_modules/.bin/sass ${ + local("madlib_modules/MadDoc/src/styles/main.scss") + } .docs/styles/main.css`, + ) + + execRecorder :: String + -> List String + -> a + -> Wish e { exitCode :: b, stderr :: String, stdout :: String } + execRecorder = (cmd, args, _) => { + command := `${cmd} ${String.join(" ", args)}` + return of({ exitCode: 0, stderr: "", stdout: "good" }) + } + + return pipe( + buildSass({ ...INITIAL_IOUTILS, exec: execRecorder }), + mapRej(() => ErrorWithMessage("buildSass should be success")), + chain(() => assertEquals(command, expected)), + )(DEFAULT_CONFIG) + }, +) + +test( + "buildSass - should reject if 'sass' command fails", + () => { + expected = "Sass error" + execRecorder = (_, _, _) => bad({ exitCode: 1, stderr: "Sass error", stdout: "" }) + + return pipe( + buildSass({ ...INITIAL_IOUTILS, exec: execRecorder }), + map(always({})), + chainRej(assertEquals($, expected)), + )(DEFAULT_CONFIG) + }, +) + +test( + "copyHtml - should call 'cp' with correct options", + () => { + command = "" + expected = `cp ${local("madlib_modules/MadDoc/src/index.html")} .docs/index.html` + + execRecorder :: String + -> List String + -> a + -> Wish e { exitCode :: b, stderr :: String, stdout :: String } + execRecorder = (cmd, args, _) => { + command := `${cmd} ${String.join(" ", args)}` + return of({ exitCode: 0, stderr: "", stdout: "good" }) + } + + return pipe( + copyHtml({ ...INITIAL_IOUTILS, exec: execRecorder }), + mapRej(() => ErrorWithMessage("copyHtml should be success")), + chain(() => assertEquals(command, expected)), + )(DEFAULT_CONFIG) + }, +) + +test( + "copyHtml - should reject if 'cp' command fails", + () => { + expected = "cp error" + execRecorder = (_, _, _) => bad({ exitCode: 1, stderr: "cp error", stdout: "" }) + + return pipe( + copyHtml({ ...INITIAL_IOUTILS, exec: execRecorder }), + map(always({})), + chainRej(assertEquals($, expected)), + )(DEFAULT_CONFIG) + }, +) + +test( + "buildDocumentation", + () => { + commands = [] + expected = [ + `madlib compile -i ${ + local("madlib_modules/MadDoc/src/Main.mad") + } --target browser --bundle -o .docs/bundle.js`, + `${local("node_modules/.bin/sass")} ${ + local("madlib_modules/MadDoc/src/styles/main.scss") + } .docs/styles/main.css`, + `cp ${local("madlib_modules/MadDoc/src/index.html")} .docs/index.html`, + ] + + execRecorder :: String + -> List String + -> a + -> Wish e { exitCode :: b, stderr :: String, stdout :: String } + execRecorder = (cmd, args, _) => { + command = `${cmd} ${String.join(" ", args)}` + commands := mappend(commands, [command]) + return of({ exitCode: 0, stderr: "", stdout: "good" }) + } + + return pipe( + buildDocumentation({ ...INITIAL_IOUTILS, exec: execRecorder }), + mapRej(() => ErrorWithMessage("buildDocumentation should be success")), + chain(() => assertEquals(commands, expected)), + )(DEFAULT_CONFIG) + }, +) + +#endif diff --git a/.github/workflows/madlib_modules/MadDocCli/src/IOUtils.mad b/.github/workflows/madlib_modules/MadDocCli/src/IOUtils.mad new file mode 100644 index 0000000..2587e95 --- /dev/null +++ b/.github/workflows/madlib_modules/MadDocCli/src/IOUtils.mad @@ -0,0 +1,34 @@ +#iftarget js +import type { Error } from "IO" +import type { CommandOptions, CommandResult } from "Process" +import type { Wish } from "Wish" + +import File from "File" +import IO from "IO" +import { Argv, exec, getCurrentWorkingDirectory, getExecutablePath } from "Process" +import String from "String" + + + +export alias IOUtils = { + args :: List String, + exec :: String -> List String -> CommandOptions -> Wish CommandResult CommandResult, + getCurrentWorkingDirectory :: {} -> String, + getExecutablePath :: {} -> String, + writeFile :: String -> String -> Wish Error {}, +} + + +defaultIOUtils :: IOUtils +export defaultIOUtils = { + args: Argv, + writeFile: File.write, + getCurrentWorkingDirectory, + getExecutablePath, + exec: (cmd, args, opts) => { + IO.putLine(`Running: ${cmd} ${String.join(" ", args)}...`) + return exec(cmd, args, opts) + }, +} + +#endif diff --git a/.github/workflows/madlib_modules/MadDocCli/src/Main.mad b/.github/workflows/madlib_modules/MadDocCli/src/Main.mad new file mode 100644 index 0000000..dda6727 --- /dev/null +++ b/.github/workflows/madlib_modules/MadDocCli/src/Main.mad @@ -0,0 +1,42 @@ +#iftarget js + +import type { Wish } from "Wish" + +import type { Config } from "@/Build" + +import IO from "IO" +import { andDo } from "Monad" +import { fulfill } from "Wish" + +import { buildDocumentation, generateConfiguration, generateJson, pathToDocument } from "@/Build" +import { defaultIOUtils } from "@/IOUtils" + + + +run :: Config -> Wish String String +run = (config) => pipe( + generateJson(defaultIOUtils), + andDo(buildDocumentation(defaultIOUtils, config)), +)(config) + + +main :: List String -> {} +main = () => { + fulfill( + IO.log, + (path) => IO.log(`Running documentation generation for the madlib modules in '${path}'`), + pathToDocument(defaultIOUtils), + ) + + fulfill( + (e) => { + IO.trace("err", e) + }, + (x) => { + IO.trace("good", x) + }, + chain(run, generateConfiguration(defaultIOUtils)), + ) +} + +#endif diff --git a/.github/workflows/madlib_modules/MadDocCli/src/Main.spec.mad b/.github/workflows/madlib_modules/MadDocCli/src/Main.spec.mad new file mode 100644 index 0000000..5acbdfe --- /dev/null +++ b/.github/workflows/madlib_modules/MadDocCli/src/Main.spec.mad @@ -0,0 +1,38 @@ +#iftarget js +import type { AssertionError } from "Test" +import type { Wish } from "Wish" + +import { exists } from "File" +import { always } from "Function" +import IO from "IO" +import { andDo } from "Monad" +import Process from "Process" +import { AssertionError, test } from "Test" +import { mapRej } from "Wish" + + + +assertFileExists :: String -> Wish AssertionError {} +assertFileExists = (filePath) => pipe( + exists, + mapRej((_) => AssertionError("OK", `${filePath} not found`)), + map(always({})), +)(filePath) + +test( + "MadDoc cli should work", + () => pipe( + mapRej( + (raw) => do { + IO.pTrace("...", raw.stderr) + return AssertionError("OK", "maddoc exited with non 0 code") + }, + ), + andDo(assertFileExists("./madlib_modules/MadDoc/src/documentation.json")), + andDo(assertFileExists(".docs/bundle.js")), + andDo(assertFileExists(".docs/index.html")), + andDo(assertFileExists(".docs/styles/main.css")), + )(Process.exec("madlib", ["run", "./src/Main.mad", "src"], Process.DEFAULT_COMMAND_OPTIONS)), +) + +#endif diff --git a/.github/workflows/madlib_modules/MadDocCli/version.lock b/.github/workflows/madlib_modules/MadDocCli/version.lock new file mode 100644 index 0000000..f4a454f --- /dev/null +++ b/.github/workflows/madlib_modules/MadDocCli/version.lock @@ -0,0 +1,18 @@ +{ + "buildHash": "da7240d624ea40b9511a041c3b67e119", + "jsApi": { + "apiInstances": [], + "apiAliases": {}, + "apiInterfaces": {}, + "apiNames": {}, + "apiTypes": {} + }, + "llvmApi": { + "apiInstances": [], + "apiAliases": {}, + "apiInterfaces": {}, + "apiNames": {}, + "apiTypes": {} + }, + "versionHash": "f723810a82dbb962df96794ccedc3cc3" +} diff --git a/.github/workflows/madlib_modules/MadMarkdownParser/.github/workflows/release.yml b/.github/workflows/madlib_modules/MadMarkdownParser/.github/workflows/release.yml new file mode 100644 index 0000000..94e2222 --- /dev/null +++ b/.github/workflows/madlib_modules/MadMarkdownParser/.github/workflows/release.yml @@ -0,0 +1,67 @@ +name: 'Publish new version' + +on: + workflow_dispatch: + inputs: + version: + description: 'Version to publish ( ex: v0.0.1 )' + required: true + +env: + node-version: 14.x + + +jobs: + check-version: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + - run: | + MADLIB_PKG_VERSION="v$(cat madlib.json | grep version | cut -d":" -f2 | cut -d"\"" -f2)" + TAG_NAME=${{ github.event.inputs.version }} + if [ "$TAG_NAME" = "$MADLIB_PKG_VERSION" ]; then + echo "Versions match" + else + echo "Versions in madlib.json is not ${TAG_NAME}" + exit 1 + fi + + release: + needs: check-version + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + + - name: Use Node.js ${{ env.node-version }} + uses: actions/setup-node@v2 + with: + node-version: ${{ env.node-version }} + + - name: "Changelog: generate changelog" + id: changelog + uses: TriPSs/conventional-changelog-action@v3.4.1 + with: + presets: "conventionalcommits" + github-token: ${{ secrets.GITHUB_TOKEN }} + skip-on-empty: false + output-file: false + tag-prefix: 'v' + skip-commit: true + skip-version-file: true + + - name: "Delete created tag from changelog" + run: | + git push --delete origin v${{ steps.changelog.outputs.version }} + git tag -d v${{ steps.changelog.outputs.version }} + + - name: "Create Release" + id: create_release + uses: actions/create-release@v1.1.4 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + with: + tag_name: ${{ github.event.inputs.version }} + release_name: Release ${{ github.event.inputs.version }} + body: ${{ steps.changelog.outputs.clean_changelog }} + draft: false + prerelease: false diff --git a/.github/workflows/madlib_modules/MadMarkdownParser/.gitignore b/.github/workflows/madlib_modules/MadMarkdownParser/.gitignore new file mode 100644 index 0000000..84284e6 --- /dev/null +++ b/.github/workflows/madlib_modules/MadMarkdownParser/.gitignore @@ -0,0 +1,5 @@ +build +.run +madlib_modules +node_modules +.module_cache diff --git a/.github/workflows/madlib_modules/MadMarkdownParser/README.md b/.github/workflows/madlib_modules/MadMarkdownParser/README.md new file mode 100644 index 0000000..9bd0e25 --- /dev/null +++ b/.github/workflows/madlib_modules/MadMarkdownParser/README.md @@ -0,0 +1,61 @@ +# madmarkdown-parser +Parser library for markdown format for madlib + +## How to use it +Add it to the dependencies of your `madlib.json` file: +```json +{ + "dependencies": { + "MarkdownParser": "https://github.com/madlib-lang/madmarkdown-parser/archive/refs/heads/master.zip" + } +} +``` +Run `madlib install` + +```madlib +import IO from "IO" +import { parseMarkdown } from "MarkdownParser" + +yourMarkdown = ` +# Hello World +` + +where(parseMarkdown(yourMarkdown)) + is Right ast: IO.inspect(ast) + is Left err : IO.log(err) + +``` + +## Run the example +```madlib +madlib install +madlib run src/Example.mad +``` + +## Markdown syntax currently supported + +### Headings +Only the hash syntax is currently supported and stops after a line return: +```markdown +# Heading (h1) +## Heading (h2) +### Heading (h3) +#### Heading (h4) +##### Heading (h5) +###### Heading (h6) +``` + +### Paragraphs +Paragraphs are any text that is not part of another block type and is ended by a double line return: +```markdown +This is a paragraph +And here was added a line return + +This is now a new paragraph +``` + +### Blockquotes +Blockquotes start with a right chevron sign (`>`) and end after a double line return: +```markdown +> This is a blockquote +``` diff --git a/.github/workflows/madlib_modules/MadMarkdownParser/madlib.json b/.github/workflows/madlib_modules/MadMarkdownParser/madlib.json new file mode 100644 index 0000000..5b64198 --- /dev/null +++ b/.github/workflows/madlib_modules/MadMarkdownParser/madlib.json @@ -0,0 +1,10 @@ +{ + "name": "MadMarkdownParser", + "version": "0.0.3", + "madlibVersion": "0.12.0", + "main": "src/Main.mad", + "importAliases": { + ".": "src" + }, + "dependencies": [] +} diff --git a/.github/workflows/madlib_modules/MadMarkdownParser/src/Example.mad b/.github/workflows/madlib_modules/MadMarkdownParser/src/Example.mad new file mode 100644 index 0000000..80f721d --- /dev/null +++ b/.github/workflows/madlib_modules/MadMarkdownParser/src/Example.mad @@ -0,0 +1,60 @@ +import IO from "IO" +import { parseMarkdown } from "@/Main" + + +mdFixture = ` +## This \`is\` a **with bold** *tiltle*! +# This is a tiltle! + +>*I* am a blockquote * not italic* + +\`\`\`javascript +some code is in there + + +\`\`\` + + +[link](http://some-link11.com) [name](http://some-link.com) + sdf ![alt text](http://image-url.com) +And some paragraph1 +sdf \`TCHOU\` **and BIM** and *italic again* + +> with another blockquote +same same +> oups +\`\`\`javascript +some code is in there + +* This is not a list +* because it's in a code block! ++ because it's in a code block! +- because it's in a code block! + +\`\`\` + +here are the items: +* list YO +* second item ++ third +- fourth ! + some chars $ that [] are @ \`random\` with a [link](http://someplace.com) + + +**CRAZY BOLD ALSO BOLD !&%$§[]**+# + +` + + +// mdBig = repeat(1500, mdFixture) +// mdBig = repeat(15000, mdFixture) +// mdBig2 = repeat(10000, "Some markdown title") + +// IO.log(len(mdBig)) + +// P.runParser(P.many(P.anyChar), mdBig) +// P.runParser(P.many(P.choice([P.anyChar])), mdBig) + + +parseMarkdown(mdFixture) |> IO.log + + diff --git a/.github/workflows/madlib_modules/MadMarkdownParser/src/Main.mad b/.github/workflows/madlib_modules/MadMarkdownParser/src/Main.mad new file mode 100644 index 0000000..79c3219 --- /dev/null +++ b/.github/workflows/madlib_modules/MadMarkdownParser/src/Main.mad @@ -0,0 +1,317 @@ +import type { Either } from "Either" + +import { apL } from "Applicative" +import { mapLeft } from "Either" +import { always, equals, identity } from "Function" +import { mapL } from "Functor" +import { dropWhile, mapMaybe } from "List" +import { Just, Nothing } from "Maybe" +import P from "Parse" +import String from "String" + + + +export type ContentPart + = Text(String) + | Bold(String) + | Italic(String) + | InlineCode(String) + | Link(String, String) + | Image(String, String) + | LineReturn + +export alias Content = List ContentPart + +export type Block + = H1(Content) + | H2(Content) + | H3(Content) + | H4(Content) + | H5(Content) + | H6(Content) + | Paragraph(Content) + | Blockquote(Content) + | Code(String, String) + | UnorderedList(List Content) + +export alias Markdown = List Block + +between :: P.Parser a -> P.Parser b -> P.Parser c -> P.Parser b +between = (start, mid, end) => pipe( + mapL(identity), + ap($, mid), + apL($, end), +)(start) + +// https://stackoverflow.com/questions/1547899/which-characters-make-a-url-invalid +linkCharacter :: P.Parser Char +linkCharacter = P.choice([ + P.letter, + P.digit, + P.char('!'), + P.char('#'), + P.char('$'), + P.char('%'), + P.char('&'), + P.char('\''), + P.char('*'), + P.char('+'), + P.char(','), + P.char('-'), + P.char('.'), + P.char('/'), + P.char(':'), + P.char(';'), + P.char('='), + P.char('?'), + P.char('@'), + P.char('_'), + P.char('~'), +]) + + +bold :: P.Parser ContentPart +bold = pipe( + mapL(Bold), + ap( + $, + pipe( + (a) => P.someTill(a, P.lookAhead(P.string("**"))), + map(String.fromList), + )(P.notChar('\n')), + ), + apL($, P.string("**")), +)(P.string("**")) + +italic :: P.Parser ContentPart +italic = do { + _ <- P.char('*') + firstChar <- P.notChar(' ') + nextChars <- P.many(P.notOneOf(['*', '\n'])) + _ <- P.char('*') + + return pipe( + String.fromList, + String.prependChar(firstChar), + Italic, + of, + )([firstChar, ...nextChars]) +} + +inlineCode :: P.Parser ContentPart +inlineCode = pipe( + mapL(InlineCode), + ap( + $, + pipe( + P.many, + map(String.fromList), + )(P.notOneOf(['`', '\n'])), + ), + apL($, P.char('`')), +)(P.char('`')) + +link :: P.Parser ContentPart +link = pipe( + map(Link), + ap( + $, + between( + P.char('('), + pipe( + P.many, + map(String.fromList), + )(linkCharacter), + P.char(')'), + ), + ), +)( + between( + P.char('['), + pipe( + P.many, + map(String.fromList), + )(P.notOneOf([']', '\n'])), + P.char(']'), + ), +) + +image :: P.Parser ContentPart +image = pipe( + mapL(Image), + ap( + $, + between( + P.char('['), + pipe( + P.many, + map(String.fromList), + )(P.notOneOf([']', '\n'])), + P.char(']'), + ), + ), + ap( + $, + between( + P.char('('), + pipe( + P.many, + map(String.fromList), + )(linkCharacter), + P.char(')'), + ), + ), +)(P.char('!')) + +textTerminals :: P.Parser String +textTerminals = P.choice([ + map(always(""), bold), + map(always(""), italic), + map(always(""), inlineCode), + map(always(""), image), + map(always(""), link), + map(always(""), P.eof), + P.string("\n"), +]) + +text :: P.Parser ContentPart +text = pipe( + P.someTill($, P.lookAhead(textTerminals)), + map( + pipe( + String.fromList, + Text, + ), + ), +)(P.notChar('\n')) + +lineReturn :: P.Parser ContentPart +lineReturn = map(always(LineReturn), P.char('\n')) + +content :: P.Parser Content +content = pipe( + P.choice, + P.many, +)([bold, italic, inlineCode, image, link, text]) + +lineReturnExceptBefore :: P.Parser a -> P.Parser ContentPart +lineReturnExceptBefore = (before) => pipe( + mapL(identity), + ap($, alt(map(always(Just({})), before), pure(Nothing))), + P.lookAhead, + chain( + where { + Just(_) => + aempty + + Nothing => + lineReturn + }, + ), +)(lineReturn) + +contentWithLineReturn :: P.Parser a -> P.Parser Content +contentWithLineReturn = (delimiter) => pipe( + P.choice, + P.some, + map(dropWhile(equals(LineReturn))), +)([bold, italic, inlineCode, image, link, text, lineReturnExceptBefore(delimiter)]) + +heading :: (Content -> Block) -> String -> P.Parser Block +heading = (constructor) => pipe( + P.symbol, + mapL(constructor), + ap($, content), + apL($, singleReturnTerminal), +) + +singleReturnTerminal :: P.Parser String +singleReturnTerminal = alt(P.string("\n"), map(always(""), P.eof)) + +doubleReturnTerminal :: P.Parser String +doubleReturnTerminal = P.choice([ + P.string("\n\n"), + map(always(""), P.eof), + pipe( + ap(pure((_, _) => "")), + ap($, P.eof), + )(P.char('\n')), +]) + +code :: P.Parser Block +code = pipe( + mapL((lang, c) => Code(lang, c)), + ap($, alt(map(String.fromList, P.letters), pure(""))), + apL($, P.char('\n')), + ap($, map(String.fromList, P.manyTill(P.anyChar, P.lookAhead(P.string("\n```"))))), + apL($, P.choice([map((_) => "", apL(P.string("\n```"), P.eof)), P.string("\n```\n")])), +)(P.string("```")) + +blockquote :: P.Parser Block +blockquote = pipe( + mapL(Blockquote), + ap($, contentWithLineReturn(P.choice([P.string("\n"), P.string("```"), P.string(">")]))), + apL( + $, + P.choice([doubleReturnTerminal, P.lookAhead(P.string("\n```")), P.lookAhead(P.string("\n>"))]), + ), +)(alt(P.symbol(">"), P.string(">"))) + + +listItemStart = map( + always(""), + apL(P.many(P.char(' ')), apL(P.oneOf(['*', '-', '+']), P.some(P.char(' ')))), +) + +unorderedListItem :: P.Parser Content +unorderedListItem = pipe( + chain(always(apL(content, singleReturnTerminal))), +)(listItemStart) + +unorderedList :: P.Parser Block +unorderedList = pipe( + P.some, + map(UnorderedList), +)(unorderedListItem) + + +paragraph :: P.Parser Block +paragraph = pipe( + map(Paragraph), + apL( + $, + P.choice([ + doubleReturnTerminal, + P.lookAhead(P.string("\n```")), + P.lookAhead(P.string("\n>")), + P.lookAhead(apL(P.string("\n"), listItemStart)), + ]), + ), +)(contentWithLineReturn(P.choice([listItemStart, P.string("\n"), P.string("```"), P.string(">")]))) + +block :: P.Parser Block +block = P.choice([ + heading(H6, "######"), + heading(H5, "#####"), + heading(H4, "####"), + heading(H3, "###"), + heading(H2, "##"), + heading(H1, "#"), + unorderedList, + blockquote, + code, + paragraph, +]) + +markdownParser :: P.Parser Markdown +markdownParser = pipe( + P.choice, + P.many, + map(mapMaybe((x) => x)), +)([map(always(Nothing), P.spaces), map(Just, block)]) + +parseMarkdown :: String -> Either String Markdown +export parseMarkdown = pipe( + P.runParser(markdownParser), + mapLeft(always("Malformed markdown input")), +) diff --git a/.github/workflows/madlib_modules/MadMarkdownParser/version.lock b/.github/workflows/madlib_modules/MadMarkdownParser/version.lock new file mode 100644 index 0000000..5179627 --- /dev/null +++ b/.github/workflows/madlib_modules/MadMarkdownParser/version.lock @@ -0,0 +1,38 @@ +{ + "api": { + "apiAliases": { + "Content": "(List ContentPart)", + "Markdown": "(List Block)" + }, + "apiInstances": [], + "apiInterfaces": {}, + "apiNames": { + "parseMarkdown": "String -> Either String (List Block)" + }, + "apiTypes": { + "Block": [ + "H1 Content", + "H2 Content", + "H3 Content", + "H4 Content", + "H5 Content", + "H6 Content", + "Paragraph Content", + "Blockquote Content", + "Code String String", + "UnorderedList (List Content)" + ], + "ContentPart": [ + "Text String", + "Bold String", + "Italic String", + "InlineCode String", + "Link String String", + "Image String String", + "LineReturn" + ] + } + }, + "buildHash": "e1f3048c1f97de9540efb556aa817949", + "versionHash": "7f76975313afde67f0b4efca59761e8a" +} diff --git a/.github/workflows/madlib_modules/MadMarkdownRenderer/.github/workflows/release.yml b/.github/workflows/madlib_modules/MadMarkdownRenderer/.github/workflows/release.yml new file mode 100644 index 0000000..94e2222 --- /dev/null +++ b/.github/workflows/madlib_modules/MadMarkdownRenderer/.github/workflows/release.yml @@ -0,0 +1,67 @@ +name: 'Publish new version' + +on: + workflow_dispatch: + inputs: + version: + description: 'Version to publish ( ex: v0.0.1 )' + required: true + +env: + node-version: 14.x + + +jobs: + check-version: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + - run: | + MADLIB_PKG_VERSION="v$(cat madlib.json | grep version | cut -d":" -f2 | cut -d"\"" -f2)" + TAG_NAME=${{ github.event.inputs.version }} + if [ "$TAG_NAME" = "$MADLIB_PKG_VERSION" ]; then + echo "Versions match" + else + echo "Versions in madlib.json is not ${TAG_NAME}" + exit 1 + fi + + release: + needs: check-version + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + + - name: Use Node.js ${{ env.node-version }} + uses: actions/setup-node@v2 + with: + node-version: ${{ env.node-version }} + + - name: "Changelog: generate changelog" + id: changelog + uses: TriPSs/conventional-changelog-action@v3.4.1 + with: + presets: "conventionalcommits" + github-token: ${{ secrets.GITHUB_TOKEN }} + skip-on-empty: false + output-file: false + tag-prefix: 'v' + skip-commit: true + skip-version-file: true + + - name: "Delete created tag from changelog" + run: | + git push --delete origin v${{ steps.changelog.outputs.version }} + git tag -d v${{ steps.changelog.outputs.version }} + + - name: "Create Release" + id: create_release + uses: actions/create-release@v1.1.4 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + with: + tag_name: ${{ github.event.inputs.version }} + release_name: Release ${{ github.event.inputs.version }} + body: ${{ steps.changelog.outputs.clean_changelog }} + draft: false + prerelease: false diff --git a/.github/workflows/madlib_modules/MadMarkdownRenderer/.gitignore b/.github/workflows/madlib_modules/MadMarkdownRenderer/.gitignore new file mode 100644 index 0000000..4f60c26 --- /dev/null +++ b/.github/workflows/madlib_modules/MadMarkdownRenderer/.gitignore @@ -0,0 +1,4 @@ +node_modules +build +madlib_modules +.module_cache diff --git a/.github/workflows/madlib_modules/MadMarkdownRenderer/README.md b/.github/workflows/madlib_modules/MadMarkdownRenderer/README.md new file mode 100644 index 0000000..6ee86bd --- /dev/null +++ b/.github/workflows/madlib_modules/MadMarkdownRenderer/README.md @@ -0,0 +1,26 @@ +# madmarkdown-renderer +Markdown renderer for [MadUI](https://github.com/madlib-lang/madui) + +## How to use it +Add it to the dependencies of your `madlib.json` file: +```json +{ + "dependencies": { + "MarkdownRenderer": "https://github.com/madlib-lang/madmarkdown-renderer/archive/refs/heads/master.zip", + "MadUI": "https://github.com/madlib-lang/madui/archive/refs/heads/master.zip" + } +} +``` +Run `madlib install` + +```madlib +import { renderMarkdown } from "MarkdownRenderer" +import { render } from "MadUI" + +yourMarkdown = ` +# Hello World +` + +render((_) => renderMarkdown(yourMarkdown), {}, "app") + +``` diff --git a/.github/workflows/madlib_modules/MadMarkdownRenderer/madlib.json b/.github/workflows/madlib_modules/MadMarkdownRenderer/madlib.json new file mode 100644 index 0000000..4543b31 --- /dev/null +++ b/.github/workflows/madlib_modules/MadMarkdownRenderer/madlib.json @@ -0,0 +1,21 @@ +{ + "name": "MadMarkdownRenderer", + "version": "1.0.0", + "madlibVersion": "0.12.0", + "main": "src/Main.mad", + "importAliases": { + ".": "src" + }, + "dependencies": [ + { + "description": "MadUI", + "minVersion": "3.0.0", + "url": "https://github.com/madlib-lang/madui/archive/refs/tags/v3.0.0.zip" + }, + { + "description": "MadMarkdownParser", + "minVersion": "0.0.3", + "url": "https://github.com/madlib-lang/madmarkdown-parser/archive/refs/tags/v0.0.3.zip" + } + ] +} diff --git a/.github/workflows/madlib_modules/MadMarkdownRenderer/package-lock.json b/.github/workflows/madlib_modules/MadMarkdownRenderer/package-lock.json new file mode 100644 index 0000000..d511100 --- /dev/null +++ b/.github/workflows/madlib_modules/MadMarkdownRenderer/package-lock.json @@ -0,0 +1,5004 @@ +{ + "name": "madmarkdown-renderer", + "version": "0.0.1", + "lockfileVersion": 2, + "requires": true, + "packages": { + "": { + "name": "madmarkdown-renderer", + "version": "0.0.1", + "license": "ISC", + "dependencies": { + "madui": "file:madlib_modules/MadUI", + "sass": "^1.32.6" + }, + "devDependencies": { + "browser-sync": "^2.26.14", + "concurrently": "^5.3.0", + "copy-and-watch": "^0.1.5", + "watch": "^1.0.2" + } + }, + "madlib_modules/maddoc-cli": { + "extraneous": true, + "dependencies": { + "sass": "^1.32.8" + } + }, + "madlib_modules/MadUI": { + "name": "madui", + "version": "0.0.1", + "license": "ISC", + "dependencies": { + "snabbdom": "^3.0.1" + }, + "devDependencies": { + "@rollup/plugin-node-resolve": "^11.2.0", + "rollup": "^2.39.1" + } + }, + "node_modules/@rollup/plugin-node-resolve": { + "version": "11.2.1", + "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-11.2.1.tgz", + "integrity": "sha512-yc2n43jcqVyGE2sqV5/YCmocy9ArjVAP/BeXyTtADTBBX6V0e5UMqwO8CdQ0kzjb6zu5P1qMzsScCMRvE9OlVg==", + "dev": true, + "dependencies": { + "@rollup/pluginutils": "^3.1.0", + "@types/resolve": "1.17.1", + "builtin-modules": "^3.1.0", + "deepmerge": "^4.2.2", + "is-module": "^1.0.0", + "resolve": "^1.19.0" + }, + "engines": { + "node": ">= 10.0.0" + }, + "peerDependencies": { + "rollup": "^1.20.0||^2.0.0" + } + }, + "node_modules/@rollup/pluginutils": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-3.1.0.tgz", + "integrity": "sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg==", + "dev": true, + "dependencies": { + "@types/estree": "0.0.39", + "estree-walker": "^1.0.1", + "picomatch": "^2.2.2" + }, + "engines": { + "node": ">= 8.0.0" + }, + "peerDependencies": { + "rollup": "^1.20.0||^2.0.0" + } + }, + "node_modules/@types/estree": { + "version": "0.0.39", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.39.tgz", + "integrity": "sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==", + "dev": true + }, + "node_modules/@types/node": { + "version": "17.0.30", + "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.30.tgz", + "integrity": "sha512-oNBIZjIqyHYP8VCNAV9uEytXVeXG2oR0w9lgAXro20eugRQfY002qr3CUl6BAe+Yf/z3CRjPdz27Pu6WWtuSRw==", + "dev": true + }, + "node_modules/@types/resolve": { + "version": "1.17.1", + "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-1.17.1.tgz", + "integrity": "sha512-yy7HuzQhj0dhGpD8RLXSZWEkLsV9ibvxvi6EiJ3bkqLAO1RGo0WbkWQiwpRlSFymTJRz0d3k5LM3kkx8ArDbLw==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/accepts": { + "version": "1.3.7", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", + "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==", + "dev": true, + "dependencies": { + "mime-types": "~2.1.24", + "negotiator": "0.6.2" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/after": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/after/-/after-0.8.2.tgz", + "integrity": "sha1-/ts5T58OAqqXaOcCvaI7UF+ufh8=", + "dev": true + }, + "node_modules/ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/anymatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", + "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/arraybuffer.slice": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/arraybuffer.slice/-/arraybuffer.slice-0.0.7.tgz", + "integrity": "sha512-wGUIVQXuehL5TCqQun8OW81jGzAWycqzFF8lFp+GOM5BXLYj3bKNsYC4daB7n6XjCqxQA/qgTJ+8ANR3acjrog==", + "dev": true + }, + "node_modules/async": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", + "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=", + "dev": true + }, + "node_modules/async-each-series": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/async-each-series/-/async-each-series-0.1.1.tgz", + "integrity": "sha1-dhfBkXQB/Yykooqtzj266Yr+tDI=", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/axios": { + "version": "0.21.1", + "resolved": "https://registry.npmjs.org/axios/-/axios-0.21.1.tgz", + "integrity": "sha512-dKQiRHxGD9PPRIUNIWvZhPTPpl1rf/OxTYKsqKUDjBwYylTvV7SjSHJb9ratfyzM6wCdLCOYLzs73qpg5c4iGA==", + "dev": true, + "dependencies": { + "follow-redirects": "^1.10.0" + } + }, + "node_modules/backo2": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/backo2/-/backo2-1.0.2.tgz", + "integrity": "sha1-MasayLEpNjRj41s+u2n038+6eUc=", + "dev": true + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true + }, + "node_modules/base64-arraybuffer": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-0.1.4.tgz", + "integrity": "sha1-mBjHngWbE1X5fgQooBfIOOkLqBI=", + "dev": true, + "engines": { + "node": ">= 0.6.0" + } + }, + "node_modules/base64id": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/base64id/-/base64id-2.0.0.tgz", + "integrity": "sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog==", + "dev": true, + "engines": { + "node": "^4.5.0 || >= 5.9" + } + }, + "node_modules/batch": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", + "integrity": "sha1-3DQxT05nkxgJP8dgJyUl+UvyXBY=", + "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==", + "engines": { + "node": ">=8" + } + }, + "node_modules/blob": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/blob/-/blob-0.0.5.tgz", + "integrity": "sha512-gaqbzQPqOoamawKg0LGVd7SzLgXS+JH61oWprSLH+P+abTczqJbhTR8CmJ2u9/bUYNmHTGJx/UEmn6doAvvuig==", + "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==", + "dependencies": { + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/browser-sync": { + "version": "2.26.14", + "resolved": "https://registry.npmjs.org/browser-sync/-/browser-sync-2.26.14.tgz", + "integrity": "sha512-3TtpsheGolJT6UFtM2CZWEcGJmI4ZEvoCKiKE2bvcDnPxRkhQT4nIGVtfiyPcoHKXGM0LwMOZmYJNWfiNfVXWA==", + "dev": true, + "dependencies": { + "browser-sync-client": "^2.26.14", + "browser-sync-ui": "^2.26.14", + "bs-recipes": "1.3.4", + "bs-snippet-injector": "^2.0.1", + "chokidar": "^3.5.1", + "connect": "3.6.6", + "connect-history-api-fallback": "^1", + "dev-ip": "^1.0.1", + "easy-extender": "^2.3.4", + "eazy-logger": "3.1.0", + "etag": "^1.8.1", + "fresh": "^0.5.2", + "fs-extra": "3.0.1", + "http-proxy": "^1.18.1", + "immutable": "^3", + "localtunnel": "^2.0.1", + "micromatch": "^4.0.2", + "opn": "5.3.0", + "portscanner": "2.1.1", + "qs": "6.2.3", + "raw-body": "^2.3.2", + "resp-modifier": "6.0.2", + "rx": "4.1.0", + "send": "0.16.2", + "serve-index": "1.9.1", + "serve-static": "1.13.2", + "server-destroy": "1.0.1", + "socket.io": "2.4.0", + "ua-parser-js": "^0.7.18", + "yargs": "^15.4.1" + }, + "bin": { + "browser-sync": "dist/bin.js" + }, + "engines": { + "node": ">= 8.0.0" + } + }, + "node_modules/browser-sync-client": { + "version": "2.26.14", + "resolved": "https://registry.npmjs.org/browser-sync-client/-/browser-sync-client-2.26.14.tgz", + "integrity": "sha512-be0m1MchmKv/26r/yyyolxXcBi052aYrmaQep5nm8YNMjFcEyzv0ZoOKn/c3WEXNlEB/KeXWaw70fAOJ+/F1zQ==", + "dev": true, + "dependencies": { + "etag": "1.8.1", + "fresh": "0.5.2", + "mitt": "^1.1.3", + "rxjs": "^5.5.6" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/browser-sync-ui": { + "version": "2.26.14", + "resolved": "https://registry.npmjs.org/browser-sync-ui/-/browser-sync-ui-2.26.14.tgz", + "integrity": "sha512-6oT1sboM4KVNnWCCJDMGbRIeTBw97toMFQ+srImvwQ6J5t9KMgizaIX8HcKLiemsUMSJkgGM9RVKIpq2UblgOA==", + "dev": true, + "dependencies": { + "async-each-series": "0.1.1", + "connect-history-api-fallback": "^1", + "immutable": "^3", + "server-destroy": "1.0.1", + "socket.io-client": "^2.4.0", + "stream-throttle": "^0.1.3" + } + }, + "node_modules/bs-recipes": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/bs-recipes/-/bs-recipes-1.3.4.tgz", + "integrity": "sha1-DS1NSKcYyMBEdp/cT4lZLci2lYU=", + "dev": true + }, + "node_modules/bs-snippet-injector": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/bs-snippet-injector/-/bs-snippet-injector-2.0.1.tgz", + "integrity": "sha1-YbU5PxH1JVntEgaTEANDtu2wTdU=", + "dev": true + }, + "node_modules/builtin-modules": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.2.0.tgz", + "integrity": "sha512-lGzLKcioL90C7wMczpkY0n/oART3MbBa8R9OFGE1rJxoVI86u4WAGfEk8Wjv10eKSyTHVGkSo3bvBylCEtk7LA==", + "dev": true, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/bytes": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", + "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "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/chokidar": { + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.1.tgz", + "integrity": "sha512-9+s+Od+W0VJJzawDma/gvBNQqkTiqYTWLuZoyAsivsI4AaWTCzHG06/TMjsf1cYe9Cb97UCEhjz7HvnPk2p/tw==", + "dependencies": { + "anymatch": "~3.1.1", + "braces": "~3.0.2", + "glob-parent": "~5.1.0", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.5.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.1" + } + }, + "node_modules/cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "dev": true, + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, + "node_modules/cliui/node_modules/ansi-regex": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/cliui/node_modules/strip-ansi": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "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": "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/component-bind": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/component-bind/-/component-bind-1.0.0.tgz", + "integrity": "sha1-AMYIq33Nk4l8AAllGx06jh5zu9E=", + "dev": true + }, + "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/component-inherit": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/component-inherit/-/component-inherit-0.0.3.tgz", + "integrity": "sha1-ZF/ErfWLcrZJ1crmUTVhnbJv8UM=", + "dev": true + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "dev": true + }, + "node_modules/concurrently": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/concurrently/-/concurrently-5.3.0.tgz", + "integrity": "sha512-8MhqOB6PWlBfA2vJ8a0bSFKATOdWlHiQlk11IfmQBPaHVP8oP2gsh2MObE6UR3hqDHqvaIvLTyceNW6obVuFHQ==", + "dev": true, + "dependencies": { + "chalk": "^2.4.2", + "date-fns": "^2.0.1", + "lodash": "^4.17.15", + "read-pkg": "^4.0.1", + "rxjs": "^6.5.2", + "spawn-command": "^0.0.2-1", + "supports-color": "^6.1.0", + "tree-kill": "^1.2.2", + "yargs": "^13.3.0" + }, + "bin": { + "concurrently": "bin/concurrently.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/concurrently/node_modules/ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/concurrently/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/concurrently/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/concurrently/node_modules/chalk/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/concurrently/node_modules/cliui": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", + "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", + "dev": true, + "dependencies": { + "string-width": "^3.1.0", + "strip-ansi": "^5.2.0", + "wrap-ansi": "^5.1.0" + } + }, + "node_modules/concurrently/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/concurrently/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, + "node_modules/concurrently/node_modules/emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", + "dev": true + }, + "node_modules/concurrently/node_modules/find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "dev": true, + "dependencies": { + "locate-path": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/concurrently/node_modules/is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/concurrently/node_modules/locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "dev": true, + "dependencies": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/concurrently/node_modules/p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "dev": true, + "dependencies": { + "p-limit": "^2.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/concurrently/node_modules/path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/concurrently/node_modules/rxjs": { + "version": "6.6.7", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", + "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", + "dev": true, + "dependencies": { + "tslib": "^1.9.0" + }, + "engines": { + "npm": ">=2.0.0" + } + }, + "node_modules/concurrently/node_modules/string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "dev": true, + "dependencies": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/concurrently/node_modules/strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "dependencies": { + "ansi-regex": "^4.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/concurrently/node_modules/supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/concurrently/node_modules/wrap-ansi": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", + "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.0", + "string-width": "^3.0.0", + "strip-ansi": "^5.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/concurrently/node_modules/y18n": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", + "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", + "dev": true + }, + "node_modules/concurrently/node_modules/yargs": { + "version": "13.3.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz", + "integrity": "sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==", + "dev": true, + "dependencies": { + "cliui": "^5.0.0", + "find-up": "^3.0.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^3.0.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^13.1.2" + } + }, + "node_modules/concurrently/node_modules/yargs-parser": { + "version": "13.1.2", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz", + "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==", + "dev": true, + "dependencies": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + } + }, + "node_modules/connect": { + "version": "3.6.6", + "resolved": "https://registry.npmjs.org/connect/-/connect-3.6.6.tgz", + "integrity": "sha1-Ce/2xVr3I24TcTWnJXSFi2eG9SQ=", + "dev": true, + "dependencies": { + "debug": "2.6.9", + "finalhandler": "1.1.0", + "parseurl": "~1.3.2", + "utils-merge": "1.0.1" + }, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/connect-history-api-fallback": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-1.6.0.tgz", + "integrity": "sha512-e54B99q/OUoH64zYYRf3HBP5z24G38h5D3qXu23JGRoigpX5Ss4r9ZnDk3g0Z8uQC2x2lPaJ+UlWBc1ZWBWdLg==", + "dev": true, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/connect/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/cookie": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.1.tgz", + "integrity": "sha512-ZwrFkGJxUR3EIoXtO+yVE69Eb7KlixbaeAWfBQB9vVsNn/o+Yw69gBWSSDK825hQNdN+wF8zELf3dFNl/kxkUA==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/copy-and-watch": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/copy-and-watch/-/copy-and-watch-0.1.5.tgz", + "integrity": "sha512-DHWIPXhboSoAeWWMnG3GTetgzunjX9MLVuLb6yfLxEYzVu56C3LHZ5GNelA1wNChLWKM4Xmspg8np2yRs15Zsg==", + "dev": true, + "dependencies": { + "chokidar": "3.4.1", + "colors": "1.4.0", + "glob": "7.1.6", + "glob-parent": "5.1.1" + }, + "bin": { + "copy-and-watch": "bin/copy-and-watch" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/copy-and-watch/node_modules/chokidar": { + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.4.1.tgz", + "integrity": "sha512-TQTJyr2stihpC4Sya9hs2Xh+O2wf+igjL36Y75xx2WdHuiICcn/XJza46Jwt0eT5hVpQOzo3FpY3cj3RVYLX0g==", + "dev": true, + "dependencies": { + "anymatch": "~3.1.1", + "braces": "~3.0.2", + "glob-parent": "~5.1.0", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.4.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "optionalDependencies": { + "fsevents": "~2.1.2" + } + }, + "node_modules/copy-and-watch/node_modules/fsevents": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.1.3.tgz", + "integrity": "sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ==", + "deprecated": "\"Please update to latest v2.3 or v2.2\"", + "dev": true, + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/copy-and-watch/node_modules/glob-parent": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.1.tgz", + "integrity": "sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/copy-and-watch/node_modules/readdirp": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.4.0.tgz", + "integrity": "sha512-0xe001vZBnJEK+uKcj8qOhyAKPzIT+gStxWr3LCB0DwcXR5NZJ3IaC+yGnHCYzB/S7ov3m3EEbZI2zeNvX+hGQ==", + "dev": true, + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/date-fns": { + "version": "2.21.1", + "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-2.21.1.tgz", + "integrity": "sha512-m1WR0xGiC6j6jNFAyW4Nvh4WxAi4JF4w9jRJwSI8nBmNcyZXPcP9VUQG+6gHQXAmqaGEKDKhOqAtENDC941UkA==", + "dev": true, + "engines": { + "node": ">=0.11" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/date-fns" + } + }, + "node_modules/debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/deepmerge": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz", + "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/destroy": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", + "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=", + "dev": true + }, + "node_modules/dev-ip": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/dev-ip/-/dev-ip-1.0.1.tgz", + "integrity": "sha1-p2o+0YVb56ASu4rBbLgPPADcKPA=", + "dev": true, + "bin": { + "dev-ip": "lib/dev-ip.js" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/dlv": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz", + "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==", + "dev": true + }, + "node_modules/easy-extender": { + "version": "2.3.4", + "resolved": "https://registry.npmjs.org/easy-extender/-/easy-extender-2.3.4.tgz", + "integrity": "sha512-8cAwm6md1YTiPpOvDULYJL4ZS6WfM5/cTeVVh4JsvyYZAoqlRVUpHL9Gr5Fy7HA6xcSZicUia3DeAgO3Us8E+Q==", + "dev": true, + "dependencies": { + "lodash": "^4.17.10" + }, + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/eazy-logger": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/eazy-logger/-/eazy-logger-3.1.0.tgz", + "integrity": "sha512-/snsn2JqBtUSSstEl4R0RKjkisGHAhvYj89i7r3ytNUKW12y178KDZwXLXIgwDqLW6E/VRMT9qfld7wvFae8bQ==", + "dev": true, + "dependencies": { + "tfunk": "^4.0.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=", + "dev": true + }, + "node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "node_modules/encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/engine.io": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-3.5.0.tgz", + "integrity": "sha512-21HlvPUKaitDGE4GXNtQ7PLP0Sz4aWLddMPw2VTyFz1FVZqu/kZsJUO8WNpKuE/OCL7nkfRaOui2ZCJloGznGA==", + "dev": true, + "dependencies": { + "accepts": "~1.3.4", + "base64id": "2.0.0", + "cookie": "~0.4.1", + "debug": "~4.1.0", + "engine.io-parser": "~2.2.0", + "ws": "~7.4.2" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/engine.io-client": { + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-3.5.1.tgz", + "integrity": "sha512-oVu9kBkGbcggulyVF0kz6BV3ganqUeqXvD79WOFKa+11oK692w1NyFkuEj4xrkFRpZhn92QOqTk4RQq5LiBXbQ==", + "dev": true, + "dependencies": { + "component-emitter": "~1.3.0", + "component-inherit": "0.0.3", + "debug": "~3.1.0", + "engine.io-parser": "~2.2.0", + "has-cors": "1.1.0", + "indexof": "0.0.1", + "parseqs": "0.0.6", + "parseuri": "0.0.6", + "ws": "~7.4.2", + "xmlhttprequest-ssl": "~1.5.4", + "yeast": "0.1.2" + } + }, + "node_modules/engine.io-parser": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-2.2.1.tgz", + "integrity": "sha512-x+dN/fBH8Ro8TFwJ+rkB2AmuVw9Yu2mockR/p3W8f8YtExwFgDvBDi0GWyb4ZLkpahtDGZgtr3zLovanJghPqg==", + "dev": true, + "dependencies": { + "after": "0.8.2", + "arraybuffer.slice": "~0.0.7", + "base64-arraybuffer": "0.1.4", + "blob": "0.0.5", + "has-binary2": "~1.0.2" + } + }, + "node_modules/engine.io/node_modules/debug": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", + "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "deprecated": "Debug versions >=3.2.0 <3.2.7 || >=4 <4.3.1 have a low-severity ReDos regression when used in a Node.js environment. It is recommended you upgrade to 3.2.7 or 4.3.1. (https://github.com/visionmedia/debug/issues/797)", + "dev": true, + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/engine.io/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/error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "dev": true, + "dependencies": { + "is-arrayish": "^0.2.1" + } + }, + "node_modules/escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=", + "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": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/estree-walker": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-1.0.1.tgz", + "integrity": "sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg==", + "dev": true + }, + "node_modules/etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/eventemitter3": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", + "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", + "dev": true + }, + "node_modules/exec-sh": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/exec-sh/-/exec-sh-0.2.2.tgz", + "integrity": "sha512-FIUCJz1RbuS0FKTdaAafAByGS0CPvU3R0MeHxgtl+djzCc//F8HakL8GzmVNZanasTbTAY/3DRFA0KpVqj/eAw==", + "dev": true, + "dependencies": { + "merge": "^1.2.0" + } + }, + "node_modules/fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/finalhandler": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.0.tgz", + "integrity": "sha1-zgtoVbRYU+eRsvzGgARtiCU91/U=", + "dev": true, + "dependencies": { + "debug": "2.6.9", + "encodeurl": "~1.0.1", + "escape-html": "~1.0.3", + "on-finished": "~2.3.0", + "parseurl": "~1.3.2", + "statuses": "~1.3.1", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/finalhandler/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/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/follow-redirects": { + "version": "1.13.3", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.13.3.tgz", + "integrity": "sha512-DUgl6+HDzB0iEptNQEXLx/KhTmDb8tZUHSeLqpnjpknR70H0nC2t9N73BK6fN4hOvJ84pKlIQVQ4k5FFlBedKA==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, + "node_modules/fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fs-extra": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-3.0.1.tgz", + "integrity": "sha1-N5TzeMWLNC6n27sjCVEJxLO2IpE=", + "dev": true, + "dependencies": { + "graceful-fs": "^4.1.2", + "jsonfile": "^3.0.0", + "universalify": "^0.1.0" + } + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "dev": true + }, + "node_modules/fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "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-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true, + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/glob": { + "version": "7.1.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", + "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "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==", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.6", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.6.tgz", + "integrity": "sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ==", + "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": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", + "dev": true, + "dependencies": { + "ansi-regex": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/has-binary2": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-binary2/-/has-binary2-1.0.3.tgz", + "integrity": "sha512-G1LWKhDSvhGeAQ8mPVQlqNcOB2sJdwATtZKl2pDKKHfpf/rYj24lkinxf69blJbnsvtqqNU+L3SL50vzZhXOnw==", + "dev": true, + "dependencies": { + "isarray": "2.0.1" + } + }, + "node_modules/has-cors": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-cors/-/has-cors-1.1.0.tgz", + "integrity": "sha1-XkdHk/fqmEPRu5nCPu9J/xJv/zk=", + "dev": true + }, + "node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/hosted-git-info": { + "version": "2.8.9", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", + "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", + "dev": true + }, + "node_modules/http-errors": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.3.tgz", + "integrity": "sha512-ZTTX0MWrsQ2ZAhA1cejAwDLycFsd7I7nVtnkT3Ol0aqodaKW+0CTZDQ1uBv5whptCnc8e8HeRRJxRs0kmm/Qfw==", + "dev": true, + "dependencies": { + "depd": "~1.1.2", + "inherits": "2.0.4", + "setprototypeof": "1.1.1", + "statuses": ">= 1.5.0 < 2", + "toidentifier": "1.0.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/http-errors/node_modules/statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/http-proxy": { + "version": "1.18.1", + "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz", + "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==", + "dev": true, + "dependencies": { + "eventemitter3": "^4.0.0", + "follow-redirects": "^1.0.0", + "requires-port": "^1.0.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dev": true, + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/immutable": { + "version": "3.8.2", + "resolved": "https://registry.npmjs.org/immutable/-/immutable-3.8.2.tgz", + "integrity": "sha1-wkOZUUVbs5kT2vKBN28VMOEErfM=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/indexof": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/indexof/-/indexof-0.0.1.tgz", + "integrity": "sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10=", + "dev": true + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "dev": true, + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "node_modules/is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", + "dev": true + }, + "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==", + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-core-module": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.2.0.tgz", + "integrity": "sha512-XRAfAdyyY5F5cOXn7hYQDqh2Xmii+DEfIcQGxK/uNwMHhIkPWO0g8msXcbzLe+MpGoR951MlqM/2iIlU4vKDdQ==", + "dev": true, + "dependencies": { + "has": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-glob": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", + "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-module": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz", + "integrity": "sha1-Mlj7afeMFNW4FdZkM2tM/7ZEFZE=", + "dev": true + }, + "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==", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-number-like": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/is-number-like/-/is-number-like-1.0.8.tgz", + "integrity": "sha512-6rZi3ezCyFcn5L71ywzz2bS5b2Igl1En3eTlZlvKjpz1n3IZLAYMbKYAIQgFmEu0GENg92ziU/faEOA/aixjbA==", + "dev": true, + "dependencies": { + "lodash.isfinite": "^3.3.2" + } + }, + "node_modules/is-wsl": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", + "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/isarray": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.1.tgz", + "integrity": "sha1-o32U7ZzaLVmGXJ92/llu4fM4dB4=", + "dev": true + }, + "node_modules/json-parse-better-errors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", + "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", + "dev": true + }, + "node_modules/jsonfile": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-3.0.1.tgz", + "integrity": "sha1-pezG9l9T9mLEQVx2daAzHQmS7GY=", + "dev": true, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/limiter": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/limiter/-/limiter-1.1.5.tgz", + "integrity": "sha512-FWWMIEOxz3GwUI4Ts/IvgVy6LPvoMPgjMdQ185nN6psJyBJ4yOpzqm695/h5umdLJg2vW3GR5iG11MAkR2AzJA==", + "dev": true + }, + "node_modules/localtunnel": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/localtunnel/-/localtunnel-2.0.1.tgz", + "integrity": "sha512-LiaI5wZdz0xFkIQpXbNI62ZnNn8IMsVhwxHmhA+h4vj8R9JG/07bQHWwQlyy7b95/5fVOCHJfIHv+a5XnkvaJA==", + "dev": true, + "dependencies": { + "axios": "0.21.1", + "debug": "4.3.1", + "openurl": "1.1.1", + "yargs": "16.2.0" + }, + "bin": { + "lt": "bin/lt.js" + }, + "engines": { + "node": ">=8.3.0" + } + }, + "node_modules/localtunnel/node_modules/debug": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", + "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/localtunnel/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/localtunnel/node_modules/yargs": { + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "dev": true, + "dependencies": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" + }, + "engines": { + "node": ">=10" + } + }, + "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.isfinite": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/lodash.isfinite/-/lodash.isfinite-3.3.2.tgz", + "integrity": "sha1-+4m2WpqAKBgz8LdHizpRBPiY67M=", + "dev": true + }, + "node_modules/madui": { + "resolved": "madlib_modules/MadUI", + "link": true + }, + "node_modules/merge": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/merge/-/merge-1.2.1.tgz", + "integrity": "sha512-VjFo4P5Whtj4vsLzsYBu5ayHhoHJ0UqNm7ibvShmbmoz7tGi0vXaoJbGdB+GmDMLUdg8DpQXEIeVDAe8MaABvQ==", + "dev": true + }, + "node_modules/micromatch": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz", + "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==", + "dev": true, + "dependencies": { + "braces": "^3.0.1", + "picomatch": "^2.2.3" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/mime": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.4.1.tgz", + "integrity": "sha512-KI1+qOZu5DcW6wayYHSzR/tXKCDC5Om4s1z2QJjDULzLcmf3DvzS7oluY4HCTrc+9FiKmWUgeNLg7W3uIQvxtQ==", + "dev": true, + "bin": { + "mime": "cli.js" + } + }, + "node_modules/mime-db": { + "version": "1.47.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.47.0.tgz", + "integrity": "sha512-QBmA/G2y+IfeS4oktet3qRZ+P5kPhCKRXxXnQEudYqUaEioAU1/Lq2us3D/t1Jfo4hE9REQPrbB7K5sOczJVIw==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.30", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.30.tgz", + "integrity": "sha512-crmjA4bLtR8m9qLpHvgxSChT+XoSlZi8J4n/aIdn3z92e/U47Z0V/yl+Wh9W046GgFVAmoNR/fmdbZYcSSIUeg==", + "dev": true, + "dependencies": { + "mime-db": "1.47.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minimist": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", + "dev": true + }, + "node_modules/mitt": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/mitt/-/mitt-1.2.0.tgz", + "integrity": "sha512-r6lj77KlwqLhIUku9UWYes7KJtsczvolZkzp8hbaDPPaE24OmWl5s539Mytlj22siEQKosZ26qCBgda2PKwoJw==", + "dev": true + }, + "node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, + "node_modules/negotiator": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", + "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/normalize-package-data": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", + "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", + "dev": true, + "dependencies": { + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" + } + }, + "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==", + "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": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", + "dev": true, + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dev": true, + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/openurl": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/openurl/-/openurl-1.1.1.tgz", + "integrity": "sha1-OHW0sO96UsFW8NtB1GCduw+Us4c=", + "dev": true + }, + "node_modules/opn": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/opn/-/opn-5.3.0.tgz", + "integrity": "sha512-bYJHo/LOmoTd+pfiYhfZDnf9zekVJrY+cnS2a5F2x+w5ppvTqObojTP7WiFG+kVZs9Inw+qQ/lw7TroWwhdd2g==", + "dev": true, + "dependencies": { + "is-wsl": "^1.1.0" + }, + "engines": { + "node": ">=4" + } + }, + "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/parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", + "dev": true, + "dependencies": { + "error-ex": "^1.3.1", + "json-parse-better-errors": "^1.0.1" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/parseqs": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/parseqs/-/parseqs-0.0.6.tgz", + "integrity": "sha512-jeAGzMDbfSHHA091hr0r31eYfTig+29g3GKKE/PPbEQ65X0lmMwlEoqmhzu0iztID5uJpZsFlUPDP8ThPL7M8w==", + "dev": true + }, + "node_modules/parseuri": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/parseuri/-/parseuri-0.0.6.tgz", + "integrity": "sha512-AUjen8sAkGgao7UyCX6Ahv0gIK2fABKmYjvP4xmy5JaKvcbTRueIqIPHLAfq30xJddqSE033IOMUSOMCcK3Sow==", + "dev": true + }, + "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/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": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-parse": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", + "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==", + "dev": true + }, + "node_modules/picomatch": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.3.tgz", + "integrity": "sha512-KpELjfwcCDUb9PeigTs2mBJzXUPzAuP2oPcA989He8Rte0+YUAjw1JVedDhuTKPkHjSYzMN3npC9luThGYEKdg==", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/portscanner": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/portscanner/-/portscanner-2.1.1.tgz", + "integrity": "sha1-6rtAnk3iSVD1oqUW01rnaTQ/u5Y=", + "dev": true, + "dependencies": { + "async": "1.5.2", + "is-number-like": "^1.0.3" + }, + "engines": { + "node": ">=0.4", + "npm": ">=1.0.0" + } + }, + "node_modules/qs": { + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.2.3.tgz", + "integrity": "sha1-HPyyXBCpsrSDBT/zn138kjOQjP4=", + "dev": true, + "engines": { + "node": ">=0.6" + } + }, + "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/raw-body": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.1.tgz", + "integrity": "sha512-9WmIKF6mkvA0SLmA2Knm9+qj89e+j1zqgyn8aXGd7+nAduPoqgI9lO57SAZNn/Byzo5P7JhXTyg9PzaJbH73bA==", + "dev": true, + "dependencies": { + "bytes": "3.1.0", + "http-errors": "1.7.3", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/read-pkg": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-4.0.1.tgz", + "integrity": "sha1-ljYlN48+HE1IyFhytabsfV0JMjc=", + "dev": true, + "dependencies": { + "normalize-package-data": "^2.3.2", + "parse-json": "^4.0.0", + "pify": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/readdirp": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.5.0.tgz", + "integrity": "sha512-cMhu7c/8rdhkHXWsY+osBhfSy0JikwpHK/5+imo+LpeasTF8ouErHrlYkwT0++njiyuDvc7OFY5T3ukvZ8qmFQ==", + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/require-main-filename": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", + "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", + "dev": true + }, + "node_modules/requires-port": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", + "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=", + "dev": true + }, + "node_modules/resolve": { + "version": "1.20.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", + "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", + "dev": true, + "dependencies": { + "is-core-module": "^2.2.0", + "path-parse": "^1.0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/resp-modifier": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/resp-modifier/-/resp-modifier-6.0.2.tgz", + "integrity": "sha1-sSTeXE+6/LpUH0j/pzlw9KpFa08=", + "dev": true, + "dependencies": { + "debug": "^2.2.0", + "minimatch": "^3.0.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/resp-modifier/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/rollup": { + "version": "2.71.0", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.71.0.tgz", + "integrity": "sha512-kZWB4FA9N/iZU/O9tVp08pPdxLM0i2iUDvcS77XT92DI81s3wYQcU/cA2FCXWj+HgJj8RUC2M0dXECwoOfDBYA==", + "dev": true, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=10.0.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/rx": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/rx/-/rx-4.1.0.tgz", + "integrity": "sha1-pfE/957zt0D+MKqAP7CfmIBdR4I=", + "dev": true + }, + "node_modules/rxjs": { + "version": "5.5.12", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-5.5.12.tgz", + "integrity": "sha512-xx2itnL5sBbqeeiVgNPVuQQ1nC8Jp2WfNJhXWHmElW9YmrpS9UVnNzhP3EH3HFqexO5Tlp8GhYY+WEcqcVMvGw==", + "dev": true, + "dependencies": { + "symbol-observable": "1.0.1" + }, + "engines": { + "npm": ">=2.0.0" + } + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "dev": true + }, + "node_modules/sass": { + "version": "1.32.11", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.32.11.tgz", + "integrity": "sha512-O9tRcob/fegUVSIV1ihLLZcftIOh0AF1VpKgusUfLqnb2jQ0GLDwI5ivv1FYWivGv8eZ/AwntTyTzjcHu0c/qw==", + "dependencies": { + "chokidar": ">=3.0.0 <4.0.0" + }, + "bin": { + "sass": "sass.js" + }, + "engines": { + "node": ">=8.9.0" + } + }, + "node_modules/semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true, + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/send": { + "version": "0.16.2", + "resolved": "https://registry.npmjs.org/send/-/send-0.16.2.tgz", + "integrity": "sha512-E64YFPUssFHEFBvpbbjr44NCLtI1AohxQ8ZSiJjQLskAdKuriYEP6VyGEsRDH8ScozGpkaX1BGvhanqCwkcEZw==", + "dev": true, + "dependencies": { + "debug": "2.6.9", + "depd": "~1.1.2", + "destroy": "~1.0.4", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "~1.6.2", + "mime": "1.4.1", + "ms": "2.0.0", + "on-finished": "~2.3.0", + "range-parser": "~1.2.0", + "statuses": "~1.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/send/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/send/node_modules/http-errors": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", + "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=", + "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/send/node_modules/inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", + "dev": true + }, + "node_modules/send/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/send/node_modules/statuses": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz", + "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/serve-index": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz", + "integrity": "sha1-03aNabHn2C5c4FD/9bRTvqEqkjk=", + "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/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/serve-index/node_modules/http-errors": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", + "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=", + "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": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", + "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/serve-index/node_modules/statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/serve-static": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.13.2.tgz", + "integrity": "sha512-p/tdJrO4U387R9oMjb1oj7qSMaMfmOyd4j9hOFoxZe2baQszgHcSWjuya/CiT5kgZZKRudHNOA0pYXOl8rQ5nw==", + "dev": true, + "dependencies": { + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.2", + "send": "0.16.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/server-destroy": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/server-destroy/-/server-destroy-1.0.1.tgz", + "integrity": "sha1-8Tv5KOQrnD55OD5hzDmYtdFObN0=", + "dev": true + }, + "node_modules/set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", + "dev": true + }, + "node_modules/setprototypeof": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", + "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==", + "dev": true + }, + "node_modules/snabbdom": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/snabbdom/-/snabbdom-3.5.0.tgz", + "integrity": "sha512-Ff5BKG18KrrPuskHJlA9aujPHqEabItaDl96l7ZZndF4zt5AYSczz7ZjjgQAX5IBd5cd25lw9NfgX21yVUJ+9g==", + "engines": { + "node": ">=8.3.0" + } + }, + "node_modules/socket.io": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-2.4.0.tgz", + "integrity": "sha512-9UPJ1UTvKayuQfVv2IQ3k7tCQC/fboDyIK62i99dAQIyHKaBsNdTpwHLgKJ6guRWxRtC9H+138UwpaGuQO9uWQ==", + "dev": true, + "dependencies": { + "debug": "~4.1.0", + "engine.io": "~3.5.0", + "has-binary2": "~1.0.2", + "socket.io-adapter": "~1.1.0", + "socket.io-client": "2.4.0", + "socket.io-parser": "~3.4.0" + } + }, + "node_modules/socket.io-adapter": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-1.1.2.tgz", + "integrity": "sha512-WzZRUj1kUjrTIrUKpZLEzFZ1OLj5FwLlAFQs9kuZJzJi5DKdU7FsWc36SNmA8iDOtwBQyT8FkrriRM8vXLYz8g==", + "dev": true + }, + "node_modules/socket.io-client": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-2.4.0.tgz", + "integrity": "sha512-M6xhnKQHuuZd4Ba9vltCLT9oa+YvTsP8j9NcEiLElfIg8KeYPyhWOes6x4t+LTAC8enQbE/995AdTem2uNyKKQ==", + "dev": true, + "dependencies": { + "backo2": "1.0.2", + "component-bind": "1.0.0", + "component-emitter": "~1.3.0", + "debug": "~3.1.0", + "engine.io-client": "~3.5.0", + "has-binary2": "~1.0.2", + "indexof": "0.0.1", + "parseqs": "0.0.6", + "parseuri": "0.0.6", + "socket.io-parser": "~3.3.0", + "to-array": "0.1.4" + } + }, + "node_modules/socket.io-parser": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-3.3.2.tgz", + "integrity": "sha512-FJvDBuOALxdCI9qwRrO/Rfp9yfndRtc1jSgVgV8FDraihmSP/MLGD5PEuJrNfjALvcQ+vMDM/33AWOYP/JSjDg==", + "dev": true, + "dependencies": { + "component-emitter": "~1.3.0", + "debug": "~3.1.0", + "isarray": "2.0.1" + } + }, + "node_modules/socket.io/node_modules/component-emitter": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz", + "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=", + "dev": true + }, + "node_modules/socket.io/node_modules/debug": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", + "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "deprecated": "Debug versions >=3.2.0 <3.2.7 || >=4 <4.3.1 have a low-severity ReDos regression when used in a Node.js environment. It is recommended you upgrade to 3.2.7 or 4.3.1. (https://github.com/visionmedia/debug/issues/797)", + "dev": true, + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/socket.io/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/socket.io/node_modules/socket.io-parser": { + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-3.4.1.tgz", + "integrity": "sha512-11hMgzL+WCLWf1uFtHSNvliI++tcRUWdoeYuwIl+Axvwy9z2gQM+7nJyN3STj1tLj5JyIUH8/gpDGxzAlDdi0A==", + "dev": true, + "dependencies": { + "component-emitter": "1.2.1", + "debug": "~4.1.0", + "isarray": "2.0.1" + } + }, + "node_modules/spawn-command": { + "version": "0.0.2-1", + "resolved": "https://registry.npmjs.org/spawn-command/-/spawn-command-0.0.2-1.tgz", + "integrity": "sha1-YvXpRmmBwbeW3Fkpk34RycaSG9A=", + "dev": true + }, + "node_modules/spdx-correct": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz", + "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==", + "dev": true, + "dependencies": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/spdx-exceptions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", + "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", + "dev": true + }, + "node_modules/spdx-expression-parse": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", + "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", + "dev": true, + "dependencies": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/spdx-license-ids": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.7.tgz", + "integrity": "sha512-U+MTEOO0AiDzxwFvoa4JVnMV6mZlJKk2sBLt90s7G0Gd0Mlknc7kxEn3nuDPNZRta7O2uy8oLcZLVT+4sqNZHQ==", + "dev": true + }, + "node_modules/statuses": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.3.1.tgz", + "integrity": "sha1-+vUbnrdKrvOzrPStX2Gr8ky3uT4=", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/stream-throttle": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/stream-throttle/-/stream-throttle-0.1.3.tgz", + "integrity": "sha1-rdV8jXzHOoFjDTHNVdOWHPr7qcM=", + "dev": true, + "dependencies": { + "commander": "^2.2.0", + "limiter": "^1.0.5" + }, + "bin": { + "throttleproxy": "bin/throttleproxy.js" + }, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/string-width": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz", + "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width/node_modules/ansi-regex": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width/node_modules/strip-ansi": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dev": true, + "dependencies": { + "ansi-regex": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/symbol-observable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-1.0.1.tgz", + "integrity": "sha1-g0D8RwLDEi310iKI+IKD9RPT/dQ=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/tfunk": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/tfunk/-/tfunk-4.0.0.tgz", + "integrity": "sha512-eJQ0dGfDIzWNiFNYFVjJ+Ezl/GmwHaFTBTjrtqNPW0S7cuVDBrZrmzUz6VkMeCR4DZFqhd4YtLwsw3i2wYHswQ==", + "dev": true, + "dependencies": { + "chalk": "^1.1.3", + "dlv": "^1.1.3" + } + }, + "node_modules/to-array": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/to-array/-/to-array-0.1.4.tgz", + "integrity": "sha1-F+bBH3PdTz10zaek/zI46a2b+JA=", + "dev": true + }, + "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==", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/toidentifier": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", + "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==", + "dev": true, + "engines": { + "node": ">=0.6" + } + }, + "node_modules/tree-kill": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz", + "integrity": "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==", + "dev": true, + "bin": { + "tree-kill": "cli.js" + } + }, + "node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + }, + "node_modules/ua-parser-js": { + "version": "0.7.28", + "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.28.tgz", + "integrity": "sha512-6Gurc1n//gjp9eQNXjD9O3M/sMwVtN5S8Lv9bvOYBfKfDNiIIhqiyi01vMBO45u4zkDE420w/e0se7Vs+sIg+g==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/ua-parser-js" + }, + { + "type": "paypal", + "url": "https://paypal.me/faisalman" + } + ], + "engines": { + "node": "*" + } + }, + "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/unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=", + "dev": true, + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/validate-npm-package-license": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", + "dev": true, + "dependencies": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, + "node_modules/watch": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/watch/-/watch-1.0.2.tgz", + "integrity": "sha1-NApxe952Vyb6CqB9ch4BR6VR3ww=", + "dev": true, + "dependencies": { + "exec-sh": "^0.2.0", + "minimist": "^1.2.0" + }, + "bin": { + "watch": "cli.js" + }, + "engines": { + "node": ">=0.1.95" + } + }, + "node_modules/which-module": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", + "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", + "dev": true + }, + "node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi/node_modules/ansi-regex": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi/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/wrap-ansi/node_modules/strip-ansi": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "dev": true + }, + "node_modules/ws": { + "version": "7.4.5", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.5.tgz", + "integrity": "sha512-xzyu3hFvomRfXKH8vOFMU3OguG6oOvhXMo3xsGy3xWExqaM2dxBbVxuD99O7m3ZUFMvvscsZDqxfgMaRr/Nr1g==", + "dev": true, + "engines": { + "node": ">=8.3.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/xmlhttprequest-ssl": { + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.5.5.tgz", + "integrity": "sha1-wodrBhaKrcQOV9l+gRkayPQ5iz4=", + "dev": true, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/yargs": { + "version": "15.4.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", + "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", + "dev": true, + "dependencies": { + "cliui": "^6.0.0", + "decamelize": "^1.2.0", + "find-up": "^4.1.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^4.2.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^18.1.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/yargs-parser": { + "version": "20.2.7", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.7.tgz", + "integrity": "sha512-FiNkvbeHzB/syOjIUxFDCnhSfzAL8R5vs40MgLFBorXACCOAEaWu0gRZl14vG8MR9AOJIZbmkjhusqBYZ3HTHw==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/yargs/node_modules/ansi-regex": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/yargs/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/yargs/node_modules/cliui": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", + "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", + "dev": true, + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^6.2.0" + } + }, + "node_modules/yargs/node_modules/strip-ansi": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/yargs/node_modules/wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/yargs/node_modules/y18n": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", + "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", + "dev": true + }, + "node_modules/yargs/node_modules/yargs-parser": { + "version": "18.1.3", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", + "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", + "dev": true, + "dependencies": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/yeast": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/yeast/-/yeast-0.1.2.tgz", + "integrity": "sha1-AI4G2AlDIMNy28L47XagymyKxBk=", + "dev": true + } + }, + "dependencies": { + "@rollup/plugin-node-resolve": { + "version": "11.2.1", + "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-11.2.1.tgz", + "integrity": "sha512-yc2n43jcqVyGE2sqV5/YCmocy9ArjVAP/BeXyTtADTBBX6V0e5UMqwO8CdQ0kzjb6zu5P1qMzsScCMRvE9OlVg==", + "dev": true, + "requires": { + "@rollup/pluginutils": "^3.1.0", + "@types/resolve": "1.17.1", + "builtin-modules": "^3.1.0", + "deepmerge": "^4.2.2", + "is-module": "^1.0.0", + "resolve": "^1.19.0" + } + }, + "@rollup/pluginutils": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-3.1.0.tgz", + "integrity": "sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg==", + "dev": true, + "requires": { + "@types/estree": "0.0.39", + "estree-walker": "^1.0.1", + "picomatch": "^2.2.2" + } + }, + "@types/estree": { + "version": "0.0.39", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.39.tgz", + "integrity": "sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==", + "dev": true + }, + "@types/node": { + "version": "17.0.30", + "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.30.tgz", + "integrity": "sha512-oNBIZjIqyHYP8VCNAV9uEytXVeXG2oR0w9lgAXro20eugRQfY002qr3CUl6BAe+Yf/z3CRjPdz27Pu6WWtuSRw==", + "dev": true + }, + "@types/resolve": { + "version": "1.17.1", + "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-1.17.1.tgz", + "integrity": "sha512-yy7HuzQhj0dhGpD8RLXSZWEkLsV9ibvxvi6EiJ3bkqLAO1RGo0WbkWQiwpRlSFymTJRz0d3k5LM3kkx8ArDbLw==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "accepts": { + "version": "1.3.7", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", + "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==", + "dev": true, + "requires": { + "mime-types": "~2.1.24", + "negotiator": "0.6.2" + } + }, + "after": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/after/-/after-0.8.2.tgz", + "integrity": "sha1-/ts5T58OAqqXaOcCvaI7UF+ufh8=", + "dev": true + }, + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true + }, + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + }, + "anymatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", + "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", + "requires": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + } + }, + "arraybuffer.slice": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/arraybuffer.slice/-/arraybuffer.slice-0.0.7.tgz", + "integrity": "sha512-wGUIVQXuehL5TCqQun8OW81jGzAWycqzFF8lFp+GOM5BXLYj3bKNsYC4daB7n6XjCqxQA/qgTJ+8ANR3acjrog==", + "dev": true + }, + "async": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", + "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=", + "dev": true + }, + "async-each-series": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/async-each-series/-/async-each-series-0.1.1.tgz", + "integrity": "sha1-dhfBkXQB/Yykooqtzj266Yr+tDI=", + "dev": true + }, + "axios": { + "version": "0.21.1", + "resolved": "https://registry.npmjs.org/axios/-/axios-0.21.1.tgz", + "integrity": "sha512-dKQiRHxGD9PPRIUNIWvZhPTPpl1rf/OxTYKsqKUDjBwYylTvV7SjSHJb9ratfyzM6wCdLCOYLzs73qpg5c4iGA==", + "dev": true, + "requires": { + "follow-redirects": "^1.10.0" + } + }, + "backo2": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/backo2/-/backo2-1.0.2.tgz", + "integrity": "sha1-MasayLEpNjRj41s+u2n038+6eUc=", + "dev": true + }, + "balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true + }, + "base64-arraybuffer": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-0.1.4.tgz", + "integrity": "sha1-mBjHngWbE1X5fgQooBfIOOkLqBI=", + "dev": true + }, + "base64id": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/base64id/-/base64id-2.0.0.tgz", + "integrity": "sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog==", + "dev": true + }, + "batch": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", + "integrity": "sha1-3DQxT05nkxgJP8dgJyUl+UvyXBY=", + "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==" + }, + "blob": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/blob/-/blob-0.0.5.tgz", + "integrity": "sha512-gaqbzQPqOoamawKg0LGVd7SzLgXS+JH61oWprSLH+P+abTczqJbhTR8CmJ2u9/bUYNmHTGJx/UEmn6doAvvuig==", + "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==", + "requires": { + "fill-range": "^7.0.1" + } + }, + "browser-sync": { + "version": "2.26.14", + "resolved": "https://registry.npmjs.org/browser-sync/-/browser-sync-2.26.14.tgz", + "integrity": "sha512-3TtpsheGolJT6UFtM2CZWEcGJmI4ZEvoCKiKE2bvcDnPxRkhQT4nIGVtfiyPcoHKXGM0LwMOZmYJNWfiNfVXWA==", + "dev": true, + "requires": { + "browser-sync-client": "^2.26.14", + "browser-sync-ui": "^2.26.14", + "bs-recipes": "1.3.4", + "bs-snippet-injector": "^2.0.1", + "chokidar": "^3.5.1", + "connect": "3.6.6", + "connect-history-api-fallback": "^1", + "dev-ip": "^1.0.1", + "easy-extender": "^2.3.4", + "eazy-logger": "3.1.0", + "etag": "^1.8.1", + "fresh": "^0.5.2", + "fs-extra": "3.0.1", + "http-proxy": "^1.18.1", + "immutable": "^3", + "localtunnel": "^2.0.1", + "micromatch": "^4.0.2", + "opn": "5.3.0", + "portscanner": "2.1.1", + "qs": "6.2.3", + "raw-body": "^2.3.2", + "resp-modifier": "6.0.2", + "rx": "4.1.0", + "send": "0.16.2", + "serve-index": "1.9.1", + "serve-static": "1.13.2", + "server-destroy": "1.0.1", + "socket.io": "2.4.0", + "ua-parser-js": "^0.7.18", + "yargs": "^15.4.1" + } + }, + "browser-sync-client": { + "version": "2.26.14", + "resolved": "https://registry.npmjs.org/browser-sync-client/-/browser-sync-client-2.26.14.tgz", + "integrity": "sha512-be0m1MchmKv/26r/yyyolxXcBi052aYrmaQep5nm8YNMjFcEyzv0ZoOKn/c3WEXNlEB/KeXWaw70fAOJ+/F1zQ==", + "dev": true, + "requires": { + "etag": "1.8.1", + "fresh": "0.5.2", + "mitt": "^1.1.3", + "rxjs": "^5.5.6" + } + }, + "browser-sync-ui": { + "version": "2.26.14", + "resolved": "https://registry.npmjs.org/browser-sync-ui/-/browser-sync-ui-2.26.14.tgz", + "integrity": "sha512-6oT1sboM4KVNnWCCJDMGbRIeTBw97toMFQ+srImvwQ6J5t9KMgizaIX8HcKLiemsUMSJkgGM9RVKIpq2UblgOA==", + "dev": true, + "requires": { + "async-each-series": "0.1.1", + "connect-history-api-fallback": "^1", + "immutable": "^3", + "server-destroy": "1.0.1", + "socket.io-client": "^2.4.0", + "stream-throttle": "^0.1.3" + } + }, + "bs-recipes": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/bs-recipes/-/bs-recipes-1.3.4.tgz", + "integrity": "sha1-DS1NSKcYyMBEdp/cT4lZLci2lYU=", + "dev": true + }, + "bs-snippet-injector": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/bs-snippet-injector/-/bs-snippet-injector-2.0.1.tgz", + "integrity": "sha1-YbU5PxH1JVntEgaTEANDtu2wTdU=", + "dev": true + }, + "builtin-modules": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.2.0.tgz", + "integrity": "sha512-lGzLKcioL90C7wMczpkY0n/oART3MbBa8R9OFGE1rJxoVI86u4WAGfEk8Wjv10eKSyTHVGkSo3bvBylCEtk7LA==", + "dev": true + }, + "bytes": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", + "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==", + "dev": true + }, + "camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true + }, + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "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" + } + }, + "chokidar": { + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.1.tgz", + "integrity": "sha512-9+s+Od+W0VJJzawDma/gvBNQqkTiqYTWLuZoyAsivsI4AaWTCzHG06/TMjsf1cYe9Cb97UCEhjz7HvnPk2p/tw==", + "requires": { + "anymatch": "~3.1.1", + "braces": "~3.0.2", + "fsevents": "~2.3.1", + "glob-parent": "~5.1.0", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.5.0" + } + }, + "cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "dev": true, + "requires": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "dev": true + }, + "strip-ansi": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "dev": true, + "requires": { + "ansi-regex": "^5.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": "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 + }, + "component-bind": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/component-bind/-/component-bind-1.0.0.tgz", + "integrity": "sha1-AMYIq33Nk4l8AAllGx06jh5zu9E=", + "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 + }, + "component-inherit": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/component-inherit/-/component-inherit-0.0.3.tgz", + "integrity": "sha1-ZF/ErfWLcrZJ1crmUTVhnbJv8UM=", + "dev": true + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "dev": true + }, + "concurrently": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/concurrently/-/concurrently-5.3.0.tgz", + "integrity": "sha512-8MhqOB6PWlBfA2vJ8a0bSFKATOdWlHiQlk11IfmQBPaHVP8oP2gsh2MObE6UR3hqDHqvaIvLTyceNW6obVuFHQ==", + "dev": true, + "requires": { + "chalk": "^2.4.2", + "date-fns": "^2.0.1", + "lodash": "^4.17.15", + "read-pkg": "^4.0.1", + "rxjs": "^6.5.2", + "spawn-command": "^0.0.2-1", + "supports-color": "^6.1.0", + "tree-kill": "^1.2.2", + "yargs": "^13.3.0" + }, + "dependencies": { + "ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "dev": true + }, + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "dependencies": { + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "cliui": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", + "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", + "dev": true, + "requires": { + "string-width": "^3.1.0", + "strip-ansi": "^5.2.0", + "wrap-ansi": "^5.1.0" + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, + "emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", + "dev": true + }, + "find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "dev": true, + "requires": { + "locate-path": "^3.0.0" + } + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true + }, + "locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "dev": true, + "requires": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + } + }, + "p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "dev": true, + "requires": { + "p-limit": "^2.0.0" + } + }, + "path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", + "dev": true + }, + "rxjs": { + "version": "6.6.7", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", + "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", + "dev": true, + "requires": { + "tslib": "^1.9.0" + } + }, + "string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "dev": true, + "requires": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + } + }, + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "requires": { + "ansi-regex": "^4.1.0" + } + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + }, + "wrap-ansi": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", + "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.0", + "string-width": "^3.0.0", + "strip-ansi": "^5.0.0" + } + }, + "y18n": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", + "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", + "dev": true + }, + "yargs": { + "version": "13.3.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz", + "integrity": "sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==", + "dev": true, + "requires": { + "cliui": "^5.0.0", + "find-up": "^3.0.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^3.0.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^13.1.2" + } + }, + "yargs-parser": { + "version": "13.1.2", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz", + "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==", + "dev": true, + "requires": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + } + } + } + }, + "connect": { + "version": "3.6.6", + "resolved": "https://registry.npmjs.org/connect/-/connect-3.6.6.tgz", + "integrity": "sha1-Ce/2xVr3I24TcTWnJXSFi2eG9SQ=", + "dev": true, + "requires": { + "debug": "2.6.9", + "finalhandler": "1.1.0", + "parseurl": "~1.3.2", + "utils-merge": "1.0.1" + }, + "dependencies": { + "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" + } + } + } + }, + "connect-history-api-fallback": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-1.6.0.tgz", + "integrity": "sha512-e54B99q/OUoH64zYYRf3HBP5z24G38h5D3qXu23JGRoigpX5Ss4r9ZnDk3g0Z8uQC2x2lPaJ+UlWBc1ZWBWdLg==", + "dev": true + }, + "cookie": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.1.tgz", + "integrity": "sha512-ZwrFkGJxUR3EIoXtO+yVE69Eb7KlixbaeAWfBQB9vVsNn/o+Yw69gBWSSDK825hQNdN+wF8zELf3dFNl/kxkUA==", + "dev": true + }, + "copy-and-watch": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/copy-and-watch/-/copy-and-watch-0.1.5.tgz", + "integrity": "sha512-DHWIPXhboSoAeWWMnG3GTetgzunjX9MLVuLb6yfLxEYzVu56C3LHZ5GNelA1wNChLWKM4Xmspg8np2yRs15Zsg==", + "dev": true, + "requires": { + "chokidar": "3.4.1", + "colors": "1.4.0", + "glob": "7.1.6", + "glob-parent": "5.1.1" + }, + "dependencies": { + "chokidar": { + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.4.1.tgz", + "integrity": "sha512-TQTJyr2stihpC4Sya9hs2Xh+O2wf+igjL36Y75xx2WdHuiICcn/XJza46Jwt0eT5hVpQOzo3FpY3cj3RVYLX0g==", + "dev": true, + "requires": { + "anymatch": "~3.1.1", + "braces": "~3.0.2", + "fsevents": "~2.1.2", + "glob-parent": "~5.1.0", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.4.0" + } + }, + "fsevents": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.1.3.tgz", + "integrity": "sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ==", + "dev": true, + "optional": true + }, + "glob-parent": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.1.tgz", + "integrity": "sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ==", + "dev": true, + "requires": { + "is-glob": "^4.0.1" + } + }, + "readdirp": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.4.0.tgz", + "integrity": "sha512-0xe001vZBnJEK+uKcj8qOhyAKPzIT+gStxWr3LCB0DwcXR5NZJ3IaC+yGnHCYzB/S7ov3m3EEbZI2zeNvX+hGQ==", + "dev": true, + "requires": { + "picomatch": "^2.2.1" + } + } + } + }, + "date-fns": { + "version": "2.21.1", + "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-2.21.1.tgz", + "integrity": "sha512-m1WR0xGiC6j6jNFAyW4Nvh4WxAi4JF4w9jRJwSI8nBmNcyZXPcP9VUQG+6gHQXAmqaGEKDKhOqAtENDC941UkA==", + "dev": true + }, + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", + "dev": true + }, + "deepmerge": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz", + "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==", + "dev": true + }, + "depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=", + "dev": true + }, + "destroy": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", + "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=", + "dev": true + }, + "dev-ip": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/dev-ip/-/dev-ip-1.0.1.tgz", + "integrity": "sha1-p2o+0YVb56ASu4rBbLgPPADcKPA=", + "dev": true + }, + "dlv": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz", + "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==", + "dev": true + }, + "easy-extender": { + "version": "2.3.4", + "resolved": "https://registry.npmjs.org/easy-extender/-/easy-extender-2.3.4.tgz", + "integrity": "sha512-8cAwm6md1YTiPpOvDULYJL4ZS6WfM5/cTeVVh4JsvyYZAoqlRVUpHL9Gr5Fy7HA6xcSZicUia3DeAgO3Us8E+Q==", + "dev": true, + "requires": { + "lodash": "^4.17.10" + } + }, + "eazy-logger": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/eazy-logger/-/eazy-logger-3.1.0.tgz", + "integrity": "sha512-/snsn2JqBtUSSstEl4R0RKjkisGHAhvYj89i7r3ytNUKW12y178KDZwXLXIgwDqLW6E/VRMT9qfld7wvFae8bQ==", + "dev": true, + "requires": { + "tfunk": "^4.0.0" + } + }, + "ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=", + "dev": true + }, + "emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=", + "dev": true + }, + "engine.io": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-3.5.0.tgz", + "integrity": "sha512-21HlvPUKaitDGE4GXNtQ7PLP0Sz4aWLddMPw2VTyFz1FVZqu/kZsJUO8WNpKuE/OCL7nkfRaOui2ZCJloGznGA==", + "dev": true, + "requires": { + "accepts": "~1.3.4", + "base64id": "2.0.0", + "cookie": "~0.4.1", + "debug": "~4.1.0", + "engine.io-parser": "~2.2.0", + "ws": "~7.4.2" + }, + "dependencies": { + "debug": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", + "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + }, + "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 + } + } + }, + "engine.io-client": { + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-3.5.1.tgz", + "integrity": "sha512-oVu9kBkGbcggulyVF0kz6BV3ganqUeqXvD79WOFKa+11oK692w1NyFkuEj4xrkFRpZhn92QOqTk4RQq5LiBXbQ==", + "dev": true, + "requires": { + "component-emitter": "~1.3.0", + "component-inherit": "0.0.3", + "debug": "~3.1.0", + "engine.io-parser": "~2.2.0", + "has-cors": "1.1.0", + "indexof": "0.0.1", + "parseqs": "0.0.6", + "parseuri": "0.0.6", + "ws": "~7.4.2", + "xmlhttprequest-ssl": "~1.5.4", + "yeast": "0.1.2" + } + }, + "engine.io-parser": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-2.2.1.tgz", + "integrity": "sha512-x+dN/fBH8Ro8TFwJ+rkB2AmuVw9Yu2mockR/p3W8f8YtExwFgDvBDi0GWyb4ZLkpahtDGZgtr3zLovanJghPqg==", + "dev": true, + "requires": { + "after": "0.8.2", + "arraybuffer.slice": "~0.0.7", + "base64-arraybuffer": "0.1.4", + "blob": "0.0.5", + "has-binary2": "~1.0.2" + } + }, + "error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "dev": true, + "requires": { + "is-arrayish": "^0.2.1" + } + }, + "escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "dev": true + }, + "escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=", + "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": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true + }, + "estree-walker": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-1.0.1.tgz", + "integrity": "sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg==", + "dev": true + }, + "etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=", + "dev": true + }, + "eventemitter3": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", + "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", + "dev": true + }, + "exec-sh": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/exec-sh/-/exec-sh-0.2.2.tgz", + "integrity": "sha512-FIUCJz1RbuS0FKTdaAafAByGS0CPvU3R0MeHxgtl+djzCc//F8HakL8GzmVNZanasTbTAY/3DRFA0KpVqj/eAw==", + "dev": true, + "requires": { + "merge": "^1.2.0" + } + }, + "fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "finalhandler": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.0.tgz", + "integrity": "sha1-zgtoVbRYU+eRsvzGgARtiCU91/U=", + "dev": true, + "requires": { + "debug": "2.6.9", + "encodeurl": "~1.0.1", + "escape-html": "~1.0.3", + "on-finished": "~2.3.0", + "parseurl": "~1.3.2", + "statuses": "~1.3.1", + "unpipe": "~1.0.0" + }, + "dependencies": { + "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" + } + } + } + }, + "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" + } + }, + "follow-redirects": { + "version": "1.13.3", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.13.3.tgz", + "integrity": "sha512-DUgl6+HDzB0iEptNQEXLx/KhTmDb8tZUHSeLqpnjpknR70H0nC2t9N73BK6fN4hOvJ84pKlIQVQ4k5FFlBedKA==", + "dev": true + }, + "fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=", + "dev": true + }, + "fs-extra": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-3.0.1.tgz", + "integrity": "sha1-N5TzeMWLNC6n27sjCVEJxLO2IpE=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "jsonfile": "^3.0.0", + "universalify": "^0.1.0" + } + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "dev": true + }, + "fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "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-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true + }, + "glob": { + "version": "7.1.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", + "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "requires": { + "is-glob": "^4.0.1" + } + }, + "graceful-fs": { + "version": "4.2.6", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.6.tgz", + "integrity": "sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ==", + "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": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "has-binary2": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-binary2/-/has-binary2-1.0.3.tgz", + "integrity": "sha512-G1LWKhDSvhGeAQ8mPVQlqNcOB2sJdwATtZKl2pDKKHfpf/rYj24lkinxf69blJbnsvtqqNU+L3SL50vzZhXOnw==", + "dev": true, + "requires": { + "isarray": "2.0.1" + } + }, + "has-cors": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-cors/-/has-cors-1.1.0.tgz", + "integrity": "sha1-XkdHk/fqmEPRu5nCPu9J/xJv/zk=", + "dev": true + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + }, + "hosted-git-info": { + "version": "2.8.9", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", + "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", + "dev": true + }, + "http-errors": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.3.tgz", + "integrity": "sha512-ZTTX0MWrsQ2ZAhA1cejAwDLycFsd7I7nVtnkT3Ol0aqodaKW+0CTZDQ1uBv5whptCnc8e8HeRRJxRs0kmm/Qfw==", + "dev": true, + "requires": { + "depd": "~1.1.2", + "inherits": "2.0.4", + "setprototypeof": "1.1.1", + "statuses": ">= 1.5.0 < 2", + "toidentifier": "1.0.0" + }, + "dependencies": { + "statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=", + "dev": true + } + } + }, + "http-proxy": { + "version": "1.18.1", + "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz", + "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==", + "dev": true, + "requires": { + "eventemitter3": "^4.0.0", + "follow-redirects": "^1.0.0", + "requires-port": "^1.0.0" + } + }, + "iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dev": true, + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + }, + "immutable": { + "version": "3.8.2", + "resolved": "https://registry.npmjs.org/immutable/-/immutable-3.8.2.tgz", + "integrity": "sha1-wkOZUUVbs5kT2vKBN28VMOEErfM=", + "dev": true + }, + "indexof": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/indexof/-/indexof-0.0.1.tgz", + "integrity": "sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10=", + "dev": true + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "dev": true, + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", + "dev": true + }, + "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==", + "requires": { + "binary-extensions": "^2.0.0" + } + }, + "is-core-module": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.2.0.tgz", + "integrity": "sha512-XRAfAdyyY5F5cOXn7hYQDqh2Xmii+DEfIcQGxK/uNwMHhIkPWO0g8msXcbzLe+MpGoR951MlqM/2iIlU4vKDdQ==", + "dev": true, + "requires": { + "has": "^1.0.3" + } + }, + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=" + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true + }, + "is-glob": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", + "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", + "requires": { + "is-extglob": "^2.1.1" + } + }, + "is-module": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz", + "integrity": "sha1-Mlj7afeMFNW4FdZkM2tM/7ZEFZE=", + "dev": true + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==" + }, + "is-number-like": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/is-number-like/-/is-number-like-1.0.8.tgz", + "integrity": "sha512-6rZi3ezCyFcn5L71ywzz2bS5b2Igl1En3eTlZlvKjpz1n3IZLAYMbKYAIQgFmEu0GENg92ziU/faEOA/aixjbA==", + "dev": true, + "requires": { + "lodash.isfinite": "^3.3.2" + } + }, + "is-wsl": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", + "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=", + "dev": true + }, + "isarray": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.1.tgz", + "integrity": "sha1-o32U7ZzaLVmGXJ92/llu4fM4dB4=", + "dev": true + }, + "json-parse-better-errors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", + "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", + "dev": true + }, + "jsonfile": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-3.0.1.tgz", + "integrity": "sha1-pezG9l9T9mLEQVx2daAzHQmS7GY=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.6" + } + }, + "limiter": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/limiter/-/limiter-1.1.5.tgz", + "integrity": "sha512-FWWMIEOxz3GwUI4Ts/IvgVy6LPvoMPgjMdQ185nN6psJyBJ4yOpzqm695/h5umdLJg2vW3GR5iG11MAkR2AzJA==", + "dev": true + }, + "localtunnel": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/localtunnel/-/localtunnel-2.0.1.tgz", + "integrity": "sha512-LiaI5wZdz0xFkIQpXbNI62ZnNn8IMsVhwxHmhA+h4vj8R9JG/07bQHWwQlyy7b95/5fVOCHJfIHv+a5XnkvaJA==", + "dev": true, + "requires": { + "axios": "0.21.1", + "debug": "4.3.1", + "openurl": "1.1.1", + "yargs": "16.2.0" + }, + "dependencies": { + "debug": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", + "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", + "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 + }, + "yargs": { + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "dev": true, + "requires": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" + } + } + } + }, + "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.isfinite": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/lodash.isfinite/-/lodash.isfinite-3.3.2.tgz", + "integrity": "sha1-+4m2WpqAKBgz8LdHizpRBPiY67M=", + "dev": true + }, + "madui": { + "version": "file:madlib_modules/MadUI", + "requires": { + "@rollup/plugin-node-resolve": "^11.2.0", + "rollup": "^2.39.1", + "snabbdom": "^3.0.1" + } + }, + "merge": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/merge/-/merge-1.2.1.tgz", + "integrity": "sha512-VjFo4P5Whtj4vsLzsYBu5ayHhoHJ0UqNm7ibvShmbmoz7tGi0vXaoJbGdB+GmDMLUdg8DpQXEIeVDAe8MaABvQ==", + "dev": true + }, + "micromatch": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz", + "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==", + "dev": true, + "requires": { + "braces": "^3.0.1", + "picomatch": "^2.2.3" + } + }, + "mime": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.4.1.tgz", + "integrity": "sha512-KI1+qOZu5DcW6wayYHSzR/tXKCDC5Om4s1z2QJjDULzLcmf3DvzS7oluY4HCTrc+9FiKmWUgeNLg7W3uIQvxtQ==", + "dev": true + }, + "mime-db": { + "version": "1.47.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.47.0.tgz", + "integrity": "sha512-QBmA/G2y+IfeS4oktet3qRZ+P5kPhCKRXxXnQEudYqUaEioAU1/Lq2us3D/t1Jfo4hE9REQPrbB7K5sOczJVIw==", + "dev": true + }, + "mime-types": { + "version": "2.1.30", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.30.tgz", + "integrity": "sha512-crmjA4bLtR8m9qLpHvgxSChT+XoSlZi8J4n/aIdn3z92e/U47Z0V/yl+Wh9W046GgFVAmoNR/fmdbZYcSSIUeg==", + "dev": true, + "requires": { + "mime-db": "1.47.0" + } + }, + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minimist": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", + "dev": true + }, + "mitt": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/mitt/-/mitt-1.2.0.tgz", + "integrity": "sha512-r6lj77KlwqLhIUku9UWYes7KJtsczvolZkzp8hbaDPPaE24OmWl5s539Mytlj22siEQKosZ26qCBgda2PKwoJw==", + "dev": true + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, + "negotiator": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", + "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==", + "dev": true + }, + "normalize-package-data": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", + "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", + "dev": true, + "requires": { + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" + } + }, + "normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==" + }, + "on-finished": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", + "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", + "dev": true, + "requires": { + "ee-first": "1.1.1" + } + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dev": true, + "requires": { + "wrappy": "1" + } + }, + "openurl": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/openurl/-/openurl-1.1.1.tgz", + "integrity": "sha1-OHW0sO96UsFW8NtB1GCduw+Us4c=", + "dev": true + }, + "opn": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/opn/-/opn-5.3.0.tgz", + "integrity": "sha512-bYJHo/LOmoTd+pfiYhfZDnf9zekVJrY+cnS2a5F2x+w5ppvTqObojTP7WiFG+kVZs9Inw+qQ/lw7TroWwhdd2g==", + "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 + }, + "parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", + "dev": true, + "requires": { + "error-ex": "^1.3.1", + "json-parse-better-errors": "^1.0.1" + } + }, + "parseqs": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/parseqs/-/parseqs-0.0.6.tgz", + "integrity": "sha512-jeAGzMDbfSHHA091hr0r31eYfTig+29g3GKKE/PPbEQ65X0lmMwlEoqmhzu0iztID5uJpZsFlUPDP8ThPL7M8w==", + "dev": true + }, + "parseuri": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/parseuri/-/parseuri-0.0.6.tgz", + "integrity": "sha512-AUjen8sAkGgao7UyCX6Ahv0gIK2fABKmYjvP4xmy5JaKvcbTRueIqIPHLAfq30xJddqSE033IOMUSOMCcK3Sow==", + "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 + }, + "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": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "dev": true + }, + "path-parse": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", + "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==", + "dev": true + }, + "picomatch": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.3.tgz", + "integrity": "sha512-KpELjfwcCDUb9PeigTs2mBJzXUPzAuP2oPcA989He8Rte0+YUAjw1JVedDhuTKPkHjSYzMN3npC9luThGYEKdg==" + }, + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "dev": true + }, + "portscanner": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/portscanner/-/portscanner-2.1.1.tgz", + "integrity": "sha1-6rtAnk3iSVD1oqUW01rnaTQ/u5Y=", + "dev": true, + "requires": { + "async": "1.5.2", + "is-number-like": "^1.0.3" + } + }, + "qs": { + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.2.3.tgz", + "integrity": "sha1-HPyyXBCpsrSDBT/zn138kjOQjP4=", + "dev": true + }, + "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 + }, + "raw-body": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.1.tgz", + "integrity": "sha512-9WmIKF6mkvA0SLmA2Knm9+qj89e+j1zqgyn8aXGd7+nAduPoqgI9lO57SAZNn/Byzo5P7JhXTyg9PzaJbH73bA==", + "dev": true, + "requires": { + "bytes": "3.1.0", + "http-errors": "1.7.3", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + } + }, + "read-pkg": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-4.0.1.tgz", + "integrity": "sha1-ljYlN48+HE1IyFhytabsfV0JMjc=", + "dev": true, + "requires": { + "normalize-package-data": "^2.3.2", + "parse-json": "^4.0.0", + "pify": "^3.0.0" + } + }, + "readdirp": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.5.0.tgz", + "integrity": "sha512-cMhu7c/8rdhkHXWsY+osBhfSy0JikwpHK/5+imo+LpeasTF8ouErHrlYkwT0++njiyuDvc7OFY5T3ukvZ8qmFQ==", + "requires": { + "picomatch": "^2.2.1" + } + }, + "require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", + "dev": true + }, + "require-main-filename": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", + "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", + "dev": true + }, + "requires-port": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", + "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=", + "dev": true + }, + "resolve": { + "version": "1.20.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", + "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", + "dev": true, + "requires": { + "is-core-module": "^2.2.0", + "path-parse": "^1.0.6" + } + }, + "resp-modifier": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/resp-modifier/-/resp-modifier-6.0.2.tgz", + "integrity": "sha1-sSTeXE+6/LpUH0j/pzlw9KpFa08=", + "dev": true, + "requires": { + "debug": "^2.2.0", + "minimatch": "^3.0.2" + }, + "dependencies": { + "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" + } + } + } + }, + "rollup": { + "version": "2.71.0", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.71.0.tgz", + "integrity": "sha512-kZWB4FA9N/iZU/O9tVp08pPdxLM0i2iUDvcS77XT92DI81s3wYQcU/cA2FCXWj+HgJj8RUC2M0dXECwoOfDBYA==", + "dev": true, + "requires": { + "fsevents": "~2.3.2" + } + }, + "rx": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/rx/-/rx-4.1.0.tgz", + "integrity": "sha1-pfE/957zt0D+MKqAP7CfmIBdR4I=", + "dev": true + }, + "rxjs": { + "version": "5.5.12", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-5.5.12.tgz", + "integrity": "sha512-xx2itnL5sBbqeeiVgNPVuQQ1nC8Jp2WfNJhXWHmElW9YmrpS9UVnNzhP3EH3HFqexO5Tlp8GhYY+WEcqcVMvGw==", + "dev": true, + "requires": { + "symbol-observable": "1.0.1" + } + }, + "safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "dev": true + }, + "sass": { + "version": "1.32.11", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.32.11.tgz", + "integrity": "sha512-O9tRcob/fegUVSIV1ihLLZcftIOh0AF1VpKgusUfLqnb2jQ0GLDwI5ivv1FYWivGv8eZ/AwntTyTzjcHu0c/qw==", + "requires": { + "chokidar": ">=3.0.0 <4.0.0" + } + }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true + }, + "send": { + "version": "0.16.2", + "resolved": "https://registry.npmjs.org/send/-/send-0.16.2.tgz", + "integrity": "sha512-E64YFPUssFHEFBvpbbjr44NCLtI1AohxQ8ZSiJjQLskAdKuriYEP6VyGEsRDH8ScozGpkaX1BGvhanqCwkcEZw==", + "dev": true, + "requires": { + "debug": "2.6.9", + "depd": "~1.1.2", + "destroy": "~1.0.4", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "~1.6.2", + "mime": "1.4.1", + "ms": "2.0.0", + "on-finished": "~2.3.0", + "range-parser": "~1.2.0", + "statuses": "~1.4.0" + }, + "dependencies": { + "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" + } + }, + "http-errors": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", + "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=", + "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": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", + "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 + }, + "statuses": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz", + "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew==", + "dev": true + } + } + }, + "serve-index": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz", + "integrity": "sha1-03aNabHn2C5c4FD/9bRTvqEqkjk=", + "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": { + "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" + } + }, + "http-errors": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", + "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=", + "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": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", + "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 + }, + "statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=", + "dev": true + } + } + }, + "serve-static": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.13.2.tgz", + "integrity": "sha512-p/tdJrO4U387R9oMjb1oj7qSMaMfmOyd4j9hOFoxZe2baQszgHcSWjuya/CiT5kgZZKRudHNOA0pYXOl8rQ5nw==", + "dev": true, + "requires": { + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.2", + "send": "0.16.2" + } + }, + "server-destroy": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/server-destroy/-/server-destroy-1.0.1.tgz", + "integrity": "sha1-8Tv5KOQrnD55OD5hzDmYtdFObN0=", + "dev": true + }, + "set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", + "dev": true + }, + "setprototypeof": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", + "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==", + "dev": true + }, + "snabbdom": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/snabbdom/-/snabbdom-3.5.0.tgz", + "integrity": "sha512-Ff5BKG18KrrPuskHJlA9aujPHqEabItaDl96l7ZZndF4zt5AYSczz7ZjjgQAX5IBd5cd25lw9NfgX21yVUJ+9g==" + }, + "socket.io": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-2.4.0.tgz", + "integrity": "sha512-9UPJ1UTvKayuQfVv2IQ3k7tCQC/fboDyIK62i99dAQIyHKaBsNdTpwHLgKJ6guRWxRtC9H+138UwpaGuQO9uWQ==", + "dev": true, + "requires": { + "debug": "~4.1.0", + "engine.io": "~3.5.0", + "has-binary2": "~1.0.2", + "socket.io-adapter": "~1.1.0", + "socket.io-client": "2.4.0", + "socket.io-parser": "~3.4.0" + }, + "dependencies": { + "component-emitter": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz", + "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=", + "dev": true + }, + "debug": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", + "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + }, + "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 + }, + "socket.io-parser": { + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-3.4.1.tgz", + "integrity": "sha512-11hMgzL+WCLWf1uFtHSNvliI++tcRUWdoeYuwIl+Axvwy9z2gQM+7nJyN3STj1tLj5JyIUH8/gpDGxzAlDdi0A==", + "dev": true, + "requires": { + "component-emitter": "1.2.1", + "debug": "~4.1.0", + "isarray": "2.0.1" + } + } + } + }, + "socket.io-adapter": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-1.1.2.tgz", + "integrity": "sha512-WzZRUj1kUjrTIrUKpZLEzFZ1OLj5FwLlAFQs9kuZJzJi5DKdU7FsWc36SNmA8iDOtwBQyT8FkrriRM8vXLYz8g==", + "dev": true + }, + "socket.io-client": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-2.4.0.tgz", + "integrity": "sha512-M6xhnKQHuuZd4Ba9vltCLT9oa+YvTsP8j9NcEiLElfIg8KeYPyhWOes6x4t+LTAC8enQbE/995AdTem2uNyKKQ==", + "dev": true, + "requires": { + "backo2": "1.0.2", + "component-bind": "1.0.0", + "component-emitter": "~1.3.0", + "debug": "~3.1.0", + "engine.io-client": "~3.5.0", + "has-binary2": "~1.0.2", + "indexof": "0.0.1", + "parseqs": "0.0.6", + "parseuri": "0.0.6", + "socket.io-parser": "~3.3.0", + "to-array": "0.1.4" + } + }, + "socket.io-parser": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-3.3.2.tgz", + "integrity": "sha512-FJvDBuOALxdCI9qwRrO/Rfp9yfndRtc1jSgVgV8FDraihmSP/MLGD5PEuJrNfjALvcQ+vMDM/33AWOYP/JSjDg==", + "dev": true, + "requires": { + "component-emitter": "~1.3.0", + "debug": "~3.1.0", + "isarray": "2.0.1" + } + }, + "spawn-command": { + "version": "0.0.2-1", + "resolved": "https://registry.npmjs.org/spawn-command/-/spawn-command-0.0.2-1.tgz", + "integrity": "sha1-YvXpRmmBwbeW3Fkpk34RycaSG9A=", + "dev": true + }, + "spdx-correct": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz", + "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==", + "dev": true, + "requires": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "spdx-exceptions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", + "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", + "dev": true + }, + "spdx-expression-parse": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", + "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", + "dev": true, + "requires": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "spdx-license-ids": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.7.tgz", + "integrity": "sha512-U+MTEOO0AiDzxwFvoa4JVnMV6mZlJKk2sBLt90s7G0Gd0Mlknc7kxEn3nuDPNZRta7O2uy8oLcZLVT+4sqNZHQ==", + "dev": true + }, + "statuses": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.3.1.tgz", + "integrity": "sha1-+vUbnrdKrvOzrPStX2Gr8ky3uT4=", + "dev": true + }, + "stream-throttle": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/stream-throttle/-/stream-throttle-0.1.3.tgz", + "integrity": "sha1-rdV8jXzHOoFjDTHNVdOWHPr7qcM=", + "dev": true, + "requires": { + "commander": "^2.2.0", + "limiter": "^1.0.5" + } + }, + "string-width": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz", + "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==", + "dev": true, + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "dev": true + }, + "strip-ansi": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "dev": true, + "requires": { + "ansi-regex": "^5.0.0" + } + } + } + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + }, + "symbol-observable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-1.0.1.tgz", + "integrity": "sha1-g0D8RwLDEi310iKI+IKD9RPT/dQ=", + "dev": true + }, + "tfunk": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/tfunk/-/tfunk-4.0.0.tgz", + "integrity": "sha512-eJQ0dGfDIzWNiFNYFVjJ+Ezl/GmwHaFTBTjrtqNPW0S7cuVDBrZrmzUz6VkMeCR4DZFqhd4YtLwsw3i2wYHswQ==", + "dev": true, + "requires": { + "chalk": "^1.1.3", + "dlv": "^1.1.3" + } + }, + "to-array": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/to-array/-/to-array-0.1.4.tgz", + "integrity": "sha1-F+bBH3PdTz10zaek/zI46a2b+JA=", + "dev": true + }, + "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==", + "requires": { + "is-number": "^7.0.0" + } + }, + "toidentifier": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", + "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==", + "dev": true + }, + "tree-kill": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz", + "integrity": "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==", + "dev": true + }, + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + }, + "ua-parser-js": { + "version": "0.7.28", + "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.28.tgz", + "integrity": "sha512-6Gurc1n//gjp9eQNXjD9O3M/sMwVtN5S8Lv9bvOYBfKfDNiIIhqiyi01vMBO45u4zkDE420w/e0se7Vs+sIg+g==", + "dev": true + }, + "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 + }, + "unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=", + "dev": true + }, + "utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=", + "dev": true + }, + "validate-npm-package-license": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", + "dev": true, + "requires": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, + "watch": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/watch/-/watch-1.0.2.tgz", + "integrity": "sha1-NApxe952Vyb6CqB9ch4BR6VR3ww=", + "dev": true, + "requires": { + "exec-sh": "^0.2.0", + "minimist": "^1.2.0" + } + }, + "which-module": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", + "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", + "dev": true + }, + "wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "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" + } + }, + "strip-ansi": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "dev": true, + "requires": { + "ansi-regex": "^5.0.0" + } + } + } + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "dev": true + }, + "ws": { + "version": "7.4.5", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.5.tgz", + "integrity": "sha512-xzyu3hFvomRfXKH8vOFMU3OguG6oOvhXMo3xsGy3xWExqaM2dxBbVxuD99O7m3ZUFMvvscsZDqxfgMaRr/Nr1g==", + "dev": true, + "requires": {} + }, + "xmlhttprequest-ssl": { + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.5.5.tgz", + "integrity": "sha1-wodrBhaKrcQOV9l+gRkayPQ5iz4=", + "dev": true + }, + "y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true + }, + "yargs": { + "version": "15.4.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", + "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", + "dev": true, + "requires": { + "cliui": "^6.0.0", + "decamelize": "^1.2.0", + "find-up": "^4.1.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^4.2.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^18.1.2" + }, + "dependencies": { + "ansi-regex": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "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" + } + }, + "cliui": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", + "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", + "dev": true, + "requires": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^6.2.0" + } + }, + "strip-ansi": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "dev": true, + "requires": { + "ansi-regex": "^5.0.0" + } + }, + "wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "dev": true, + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + } + }, + "y18n": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", + "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", + "dev": true + }, + "yargs-parser": { + "version": "18.1.3", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", + "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", + "dev": true, + "requires": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + } + } + } + }, + "yargs-parser": { + "version": "20.2.7", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.7.tgz", + "integrity": "sha512-FiNkvbeHzB/syOjIUxFDCnhSfzAL8R5vs40MgLFBorXACCOAEaWu0gRZl14vG8MR9AOJIZbmkjhusqBYZ3HTHw==", + "dev": true + }, + "yeast": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/yeast/-/yeast-0.1.2.tgz", + "integrity": "sha1-AI4G2AlDIMNy28L47XagymyKxBk=", + "dev": true + } + } +} diff --git a/.github/workflows/madlib_modules/MadMarkdownRenderer/package.json b/.github/workflows/madlib_modules/MadMarkdownRenderer/package.json new file mode 100644 index 0000000..e8bfa07 --- /dev/null +++ b/.github/workflows/madlib_modules/MadMarkdownRenderer/package.json @@ -0,0 +1,33 @@ +{ + "name": "madmarkdown-renderer", + "version": "0.0.1", + "description": "", + "main": "index.js", + "dependencies": { + "sass": "^1.32.6" + }, + "devDependencies": { + "browser-sync": "^2.26.14", + "concurrently": "^5.3.0", + "copy-and-watch": "^0.1.5", + "watch": "^1.0.2" + }, + "scripts": { + "info": "madlib --version", + "build:bundle": "madlib compile -i src/Example.mad --target browser --bundle -o build/bundle.js", + "build:sass": "sass src/styles/main.scss build/styles/main.css", + "build:html": "copy-and-watch src/**/*.{html,png} build/", + "dev": "concurrently \"browser-sync start --server build --files build/**\" \"sass --watch src/styles/main.scss build/styles/main.css\" \"copy-and-watch --watch src/**/*.{html,png} build/\" \"copy-and-watch --watch src/assets/* build/assets/\" \"watch 'npm run build:bundle' src\"", + "test": "echo \"Error: no test specified\" && exit 1" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/madlib-lang/madui-examples.git" + }, + "author": "", + "license": "ISC", + "bugs": { + "url": "https://github.com/madlib-lang/madui-examples/issues" + }, + "homepage": "https://github.com/madlib-lang/madui-examples#readme" +} diff --git a/.github/workflows/madlib_modules/MadMarkdownRenderer/src/Config.mad b/.github/workflows/madlib_modules/MadMarkdownRenderer/src/Config.mad new file mode 100644 index 0000000..4ecfa0f --- /dev/null +++ b/.github/workflows/madlib_modules/MadMarkdownRenderer/src/Config.mad @@ -0,0 +1,22 @@ +import type { Element } from "MadUI" + +import { a, code, href, text } from "MadUI" + + + +export alias Config a = { + codeView :: String -> String -> Element a, + linkView :: String -> String -> Element a, +} + +defaultConfig :: Config a +export defaultConfig = { + linkView: (name, url) => {name}, + codeView: (_, content) => {content}, +} + +setLinkView :: (String -> String -> Element a) -> Config a -> Config a +export setLinkView = (linkView, config) => ({ ...config, linkView }) + +setCodeView :: (String -> String -> Element a) -> Config a -> Config a +export setCodeView = (codeView, config) => ({ ...config, codeView }) diff --git a/.github/workflows/madlib_modules/MadMarkdownRenderer/src/Example.mad b/.github/workflows/madlib_modules/MadMarkdownRenderer/src/Example.mad new file mode 100644 index 0000000..9160d25 --- /dev/null +++ b/.github/workflows/madlib_modules/MadMarkdownRenderer/src/Example.mad @@ -0,0 +1,30 @@ +import { render } from "MadUI" +import { renderMarkdown } from "./Main" + +markdown = ` +# Title +### subtitle + +This is a **paragraph** +and the *next* line + +> blockquote! +**hehe** + +\`\`\` +Some code! +\`\`\` + + - list item + - **list** \`item\` + - list *item* + - [link](https://www.google.com) + + +![madlib logo](./madlib-logo.png) + +` + +main = () => { + render((_) => renderMarkdown(markdown), {}, "app") +} diff --git a/.github/workflows/madlib_modules/MadMarkdownRenderer/src/Main.mad b/.github/workflows/madlib_modules/MadMarkdownRenderer/src/Main.mad new file mode 100644 index 0000000..8f66636 --- /dev/null +++ b/.github/workflows/madlib_modules/MadMarkdownRenderer/src/Main.mad @@ -0,0 +1,174 @@ +import type { Block, Content, ContentPart, Markdown } from "MadMarkdownParser" +import type { Element } from "MadUI" + +import type { Config } from "@/Config" + +import { Left, Right } from "Either" +import { + Blockquote, + Bold, + Code, + H1, + H2, + H3, + H4, + H5, + H6, + Image, + InlineCode, + Italic, + LineReturn, + Link, + Paragraph, + Text, + UnorderedList, + parseMarkdown, +} from "MadMarkdownParser" +import { + altAttribute, + blockquote, + br, + className, + div, + h1, + h2, + h3, + h4, + h5, + h6, + i, + img, + li, + p, + span, + src, + strong, + text, + ul, +} from "MadUI" + +import { defaultConfig, setCodeView, setLinkView } from "@/Config" + + + +doRender :: Config a -> Markdown -> Element a +doRender = (config, markdown) => +
    + {...map(renderBlock(config), markdown)} +
    + +renderBlock :: Config a -> Block -> Element a +renderBlock = (config) => where { + H1(content) => +

    + {...renderContent(config, content)} +

    + + H2(content) => +

    + {...renderContent(config, content)} +

    + + H3(content) => +

    + {...renderContent(config, content)} +

    + + H4(content) => +

    + {...renderContent(config, content)} +

    + + H5(content) => +
    + {...renderContent(config, content)} +
    + + H6(content) => +
    + {...renderContent(config, content)} +
    + + Paragraph(content) => +

    + {...renderContent(config, content)} +

    + + Blockquote(content) => +
    + {...renderContent(config, content)} +
    + + Code(lang, content) => + config.codeView(lang, content) + + UnorderedList(items) => +
      + {...map((item) =>
    • {...renderContent(config, item)}
    • , items)} +
    +} + +renderContentPart :: Config a -> ContentPart -> Element a +renderContentPart = (config) => where { + Text(t) => + + {t} + + + Bold(t) => + + {t} + + + Italic(t) => + + {t} + + + InlineCode(t) => + + {t} + + + Link(t, l) => + config.linkView(t, l) + + Image(alt_, s) => + + + LineReturn => +
    +} + +renderContent :: Config a -> Content -> List (Element a) +renderContent = (config) => map(renderContentPart(config)) + + +renderMarkdownWithConfig :: Config a -> String -> Element a +export renderMarkdownWithConfig = (config) => pipe( + parseMarkdown, + where { + Right(ast) => + doRender(config, ast) + + Left(_) => +

    + Error processing the given markdown +

    + }, +) + +/** + * Returns an Element from a given markdown String + * + * @since 0.0.1 + * @example + * renderMarkdown(`# Hello world`) + */ +renderMarkdown :: String -> Element a +export renderMarkdown = renderMarkdownWithConfig(defaultConfig) + +export defaultConfig +export setCodeView +export setLinkView +export type Config diff --git a/.github/workflows/madlib_modules/MadMarkdownRenderer/src/index.html b/.github/workflows/madlib_modules/MadMarkdownRenderer/src/index.html new file mode 100644 index 0000000..9b16492 --- /dev/null +++ b/.github/workflows/madlib_modules/MadMarkdownRenderer/src/index.html @@ -0,0 +1,12 @@ + + + + Madlib Markdown Renderer + + + + +
    + + + \ No newline at end of file diff --git a/.github/workflows/madlib_modules/MadMarkdownRenderer/src/madlib-logo.png b/.github/workflows/madlib_modules/MadMarkdownRenderer/src/madlib-logo.png new file mode 100644 index 0000000000000000000000000000000000000000..1e7535ad24db7ca7bf5c0190c58702a3e4323120 GIT binary patch literal 12052 zcmeHttF zJ@b41ig&H|`7mG3T64~QU+3KW+IycJqoF4MjEIT|3k&O+qJpdz78Z8$e?LMT%*gYV zqFgL29;BkIw2p7y-+Z*!R%>eH;c~-6E}3)#v%MOws=T>3ZW*(^2#z-CaN>J!+;rw- zny}x5C5i9z2yG{U2bONfgE)lA5oeO!{^I0>!Rt0f8WsO8yRonsNEr;ULajs1v9VII z!||{b@Chlf7%2a5@c-k2ToqP|VPRzz+@=+?!vHtOTk>F=y1F`bb#?7aW&Ciw9siL86d#*4k@7n3Q^mUz5hdx+-Ch4GDBWdhZ{g!e(eg$4UUo zhihHk-2`Z5zV&__^Dd|&P3~gQ!@a~93FTJSt`B) z0%0erRb8@*-brftI_I^r;d*q#jkO;8O*jh%KsmEbdbkkGdw0-o8wQ0we-hgEzCMOH zN(SL2ox=|_BA~#15=to@Bf{XH8GL)Sv68ST3dOA6lLiB1%ip39btVYS&ULtk&d%1> zmj#K#&+nmF3a>SDeQC;k-&b%0$TNy66u~xr1yvz-tDZNYooYQ2fa^=Xwjx0Axnmlb zL5+U2O|9@uP#65BV_|0R?B>#C=fYAcefRp&2=3@Kdy>J|KiO$#C?v z6ET2lPu%Q*{mQNBy)o25g8zK>z*IGLK-Ut`{0LdOyOPGBr+7GOg79*2anYRoU=|LD zEe4G7nsproB`z_mm(QS3PBZVi?(o*N?2+>$yrzhz%1TqIM!cI?>il#6ajNCdEzU?m zRc*vM$z%?A&e5iuX3XVO+^j}#Xlv@60)2S{)yIDC-^#NO`ozvdLHE?G*@|R~4Ij34 zh#s}v&uv}U$A0(3SfI9YZ(_HhRN#iM*$TM4^AT)w;RLGD+gJBb;AbjIrwu*(76FJc zII&xba;u{i8n_nV*VSFDD}`_#Ulp^9vxe3mz7&-Da^||S=#b7ByGCpg>A2|5((x;h9_;g#GkU}9ol(?FajVkMExzf`7FRe(ml;TfU zMgs<*t)+#CK&}nQ1W`MuLMg5E;S3_a(#yhHYY}q&@7zgO_pQ)4Ru)#$5>blU@83O+ zIX{r+WCKUXl47S40;<}&8FIZGDQ-s=VO3VFI~h)6GW^wK9!y3@acsi*YGd2(4T~D7 zyEMd6nVFfSefF3Y-x#0v$hw=i*=A%5_P3)JvvuH|ox*pqlO(FRicZ+QI2=H-Cu5b1 zVc2Q?cyXWCyi8h*d1Oi}lCW`~uzacNSPE#ojFc3id{P@kLCNUzYU&`fpEp&BQtbl|Kah+l@!nlDd>a4|P2a3w*{Sm^Tn1qyd~&8jlGBnAtw$6KePI zL6dC?g!D#-cG}l*bi`>4g4M{hUuq?$ZIs29z4pCEA$a2~_`@G@>EI=-%9HKOk^t;j zocFzceH{G}f*oyDDO7-zskzN#?QJ3H>g-g&)Exwtkd!nG7XI%~i?gfcZ^d)sv3p?~ z5LH7yuUA~J42TH5Odd4nC=)mo&{`TC}xiYIxZBGdi!o)cT0-W&_J zJHQyzI6;&+q`g+ZYVOL=H6TFw(EEC%=k0-aM=eTHQnK|Ix!m#H%_R(Qm+sH1cms%E zUpkbKD<-bi#2aIl7$zKeTX##R3${U>`*YSM&pbLY(wCqi#(;ds%0#34t-hzftmq&vCwok~^{P-CrVA%JQba~@6rpG@Z z;E6j^$}uiiYNiU~MtZ z{jI1LRdKAUwgw)w1g616$)9|cTbMyEe-aGd(Jk2B5{7<^Go)g~ae7CfcgQA^>L-vo zBN6$?i7=&E^sQQX+6>9FO(iSS1`OB>er^DCbaZ%_RF-(&92`tkj_>Z;m2Zi}fK{7Z z6)~$`n?EI(_dQ!YDY#l}@iHMpN)=AZX|_%v^1wZN`6)b|4mpFC7SExcXc0MP z3qJykyy4U`eVLXOHDJtZdkawZhP~v(wx~P7e`=H)x*jtvXDqg5ZCd{U_e~{>^ZAMO-I$`Xur)CdB+0v2-D_9kn6s9 zDN>DAtq*f_XQweOZPjVywA0yW$J{?Cs7cDLe!nk?Ug{5q-5Ix^EoJ`+-~M+(OH9C) zmMY9$ZkLN;XZi>6qVE1a=(wQ+k9!Mddt&+Gx7{hB-pjbHJZcRYUTkKMk9XSr>t3tn`?#CO_}F%@kv)>$YhArw zMGD&yfG<_-Fh{peEbxkhwa$_nI$Hg;m15q$ImkumBVS$Kze)buh#FhY7q=4~f`252 zj)zrHmrL=@=+6-}25IG|==OvA```$&!I#xj(_a>fT;`28FVJW5}PRB>tqqh&c7u zg5H$dGs_n~+0!95N$Ev51*Q3(bd&@#ii(=#af8Lq$SK&r^RA)VUQZdKW&FcV@M=Y= z2J*moOJod&X;uz7=l(Ta$XcPO-j5Vq!@m*XU`2@5$42PRdJoljCza%v3dsJ&g`nf6 zEjPJ#pFq~cO&W?6cgv0-LC-6Elh~{dfsqj2Ge55r_eq;qfRQ>aY1V`1 zJFYr|)sWG-U<`yfBj>#&oNEpZD8MMuDstv7Bsy{u+Bwekye?slpv@u2tUFls2LJ40 z`CQYq?NJ=1k_{;M`eaZbzcIqP?`kf3`k-qeP)j%C4R?(}I+E8@1iv2F>4dOad@^S5 z83yChn+NAA_kc=^k})E)=Q$ZeL3xDL>u&gd1q}`+Jwe@$^tX~5U?&UMn}a?JC0br_ zS7FQqG*1Rk7AY-F2ffW-%GIxYE*GeNoql#&n{;w{xE7r6cBkf>RJFQWHQ%x8J!9LT z`7)a>TScCVl#X80S&Xw@2B-gpG6sC#&Pomf#{SgnJL-uiP0ZMloN96vPqa_S-mcyk zvm4WD9j9I#L)N8&Z<<8Bu6edJ$(Nu|C%n_2{aOn^+14JWJ-8XG4Qsb#<%eM%BskCEb6@ z_uF~XmA}mg{*aWMv$YGdwe%Ft4}Q2Gzjy0hDzTvmFD1U}ez-^8{Czaem6Vwz>~6r1 zkNDw7mAvv9!zdnih5e8*4Y;J^%WC#_A~=0!L~LF;G$*n`(r8xpI^ekuWqWtG`tS^S z5_`D722W?$PKNw$4CX}!hAOvLK4VyW{%5tLk{~)6I6zssFgxJ*;NbJR@FAQ#DJiL! ztzk(_a5?PFqN*XU@N6vb$rGpH{^SXPU!AcCKmVcE7=1)cc?c$jP-}f#h7$&o253PDq^MN$8y*7WTBrDdh;F9%cqfE=N_-AF_>5Ic= zXJ#)tEb7`XGjw!&!bFi>f9T3^2is5(fVaMmuCDYx;hDG5fPhgW?VKdcXd5_c`Ni|` zUVo0v++#BDL)}hTWi6MUmq|!qAXEduu~_RvB=i_@-iv8b0~I1P#ExyMZcV=-(FO0-y3TcYEPf+$+A zJ)PM}ul{DU!S`72N$w?%E`g&zpGJH(^_wM7YhQSZRryv2y7|)S_|yW!88KuUV{B9I z_s6#EE~-QSVEl^R`tDbuBb1y54G_epwJAuHx3nul4V#bb{`JXLG5f`h#NAc@#u3IT zm`d^)m0a~&X>nQmqwEVPA#?DL5cdGU7VgaX!l4Xyh3h)3U%0692*s zHJ=sha?L4Yc#h-9i?<9oSobm@@UJq)ieRp^5T%Y*;D;DJjF*}zIET0n6uiD_Y;c*C zfeXR_R*bwzb-k*Wd41+Av!DVve-+hn5@_Qb^8ns*7>w=zg+Ha)e>u6^5M*1Ea7AA~ zX3jqfYt%70A^d^ggY7(5w|c!|S+8NH7igkgj=)oi8TVc(%oVjDs>ET^)vY}IgQ?}6 z{!+Y|ijgO1ercZm{n# z%3Dez3wLH7kD|2Verh)Q%!2F=mHOy@3HOP1-*Ib4hxP+uK=3_uUrA0=TtWgwY&9a+ z*d-?@k$!)5d|c$bdwi@ZdWDgm>4b<`LM$2074!h^%xW3sx8(nPHNZfnvr*S+Wv$bc z@xDnaYP^N9XvI>O{Hte{wURQB=jdrDdj-!^|J!o!CPFcyFW>yX`r48zhW<_CMJv_P zqG2&5@>;`jRC4i6uSoEm|I%xEHo6&*RBvQ$;%BKSB(h*U!ATF@^PDn^jlCspd$hn@ zI#`X<>uQO{;IS)^qE7HO>B`8t4=`ZiFanEr_C!le(`}a!C2T(_Qp1-+f{b$Bcj!wy z%e&huQpM7EG;HzD_vs8p%v?~Rsp;FsIC>>CZg=Ji<_5an(%H~q^h+(ZP58D%SEtsV^zpiIo;!N zlSL$u9X_Gkpl}Da$5T#l*Vxv2H&b#GI?(XeW~ohGliUWxLlIZzfU!tH;9wDnMyt?; zSv>iKSZ{4)GbG$8Q?K;qqsT{DF5u>|q04uUXjv0wP5Ok3$4WyL+B(O%EctkqcXmVp z)64;xasOFoV5-`oEw?7asesZTvpo+{w2)LyQ}m!^ubngMJm;C*%{mxFWYb+#`~VSIaQ!+Pr8+Zpc-2hczpQ=T zLm^i*j$3o?S0z=>f}@>O54dm|=i0M%L|8Y~RHEVypGR_5?nkJ>i7r%AMXg4|25V8i z;!IU*>ChyLzkB{*8`T*D7;&XA_b>ZL-(u)|YQETVb{C+`HGGcT8%U3W*pEfIl z&QNNxZ!!dZ77G|!k12f0!3}UrZv9Ya&IwmMo5Tg;t zcJ#C_pPtSyr?C<-5CiJ-f}CKLr_yPRWsnBUjCL^%7@OYZ$>HN=1FQaN{2GMQIc4GG zE=CNkoF9aF!}FqNi1O!gzwrh+9)3BLb21Dy6VzGfu%;0rt2k2HI)$>r(|0D4s!C<4Fk zwK~13LCcL}-6Dk1D$!APep*dAZM*CgrG;cg^W^V^T0QS4nzY56Lu(}ge%}57_4Kmj}#s6B>4B z+i-n#wSe}H>MufxcE2@Dr2wk^clCk7Xp*-i7`y|Q&Qx{>-$CxD(vb?A7Z-YWTPRf3 zg?Sl6x%z@xton)g!~LBYbvCA#ZmKs5ZFq{-XMZ!v4HSdHx5#rkj2Topv{y{w~-H;b}+*ywGhtOYln8tr39}{ zY(r&vfqeE=Pqrj6x0}QzR<}&ph@+nK`w^0v+7XiPrmffbJ~wC4F5c`(9S&P^oeOS< z9u6Ll6%N}SHh(N--YYD2{)hzL5GXT!cE8B>l%^fomyL0k!OZA?{uVtQb@5_WP}k(U z3wWC6AqM=NiPK8DYdy>JqcA7b}mMBU&KfDP%sn*+)I#S|3*b4tpV& zlylldZ051>q7G2ey3YLkfWA>)1eo#aLAxWuI{RPD&g+$A&7pGd*Htx@Nuir=`bog? z_}Rql5><5WKWJl`aLpvrlqF`(0R6o&L{{z*jRW-#4t0xkL6k!ikK>=%k@ds7qJR0B zDlZXox-}V&q6YsgtMZEoXewJWTRG$yh87FX+~RD*%f;5!-K9fzA_V|uUm0A+iQE@0&}Mw#jk`D4eZ^VXTu zN&Bs$5-XKB!E{i~6@#xBfLKjJYZPZVr7N6};@QXKO50?9g?6bK;^`^_`=YD+6XTVqW+;6 zS{{UlF4tRAcB9b(Z?I1pmDQKG7jrC0|I{4%vvO73WXTS)X*|pwVP#q+aVU~OrZ0UP z!Rsx15-1_7tGhYTE<-bl2R z`{|!?B^%l~_K#aR0Yyd7Tg7-^nXB=`aShwpSBsxp0-L$cdtWeCZ1ZbPOvGge;{J(S zvv5mr_$69C!135khz7VA+U%m`WVodxHl^(XyC{LX9kFgCt3mQBAa?JX%80;u*?G4AOKx0{d`r)`rhfkA6!evxJ8G!w2qw1IxKf z^Nm6vIIg0Y%6Aj~xh7g|m+DG^(F-g5?g!%()i{4=5w zGQi-)qnQq6P?fEMm8qA9ygv!f;b0 z5tQLefnMXjNHJ-c*!3`MyVVYt*c$o1^e2En+=>c+Kjnf@W(K$v`n;xI=5KC^(^6Su zSs16xS=V{wY*kJ6{A|g+5q@`TGsA(amPy3)UKVT4C%Y81ch$M|IYpo<8*P~TeGHf|kPtV#gMB7OUtXxI5(W#|pXjA;N;NFRv`;NJq(od(p{4F)PS zYf!OTHrgG}BmhbaqN9;>R@NU`Lm}H*Hx)yYWkTs+guszq;vkS5^=4#^lO-!Ya=Oj5 zF1HK>pr{5Rj@UPk_s2xTg?dvTD~pN1Dqfm+=*q+w%Pw&|-+pa5&ZAr_?Us^=EGV1P zT_sEtyx9@s5QFd^!vMMQf&skUx~sk8=4Ph2*J~ACMs$VD$I*cO58E zJ*Nm$)(DxvLc!dGvrN*R@})@!OgB{W!1z(%RJNtDWwiG`r7nG%r!q*BsY#%6I(~ll z3X{7ymRc10h$O4T(Bfg%X}8T7k&i@FK089&FO9E3~;lHezU6qy5RElY6A^t z9PoNHYLf%|uHn9==r{~u-m%qtzQZG^EJ-n92{R*%np9DZ%;lJmSycV>(mndzdZ>{o z>`h;G>Ta80Fk2)tn(o`T@i*jNUx?i}@?pVB*?+QGv~(!_Puf-?WPyFicL@%D7I4$J zmX%F8t+i*$ZqJSr=e)RSM+DE>#4C~wENP*#!cHX{RC~0=Prw(d`ztI!+?lvBplZ5~ z4qAIf@!}TzG_77{B!SI;(Knr}CElNRev=iE({A|u+q~x}thyFe=CI#h&^(*Lz6@En zjB%ZhClmG;r`tQM;JCJXIu5h*_jq>l?di#CP#ic}LEys&B-M?0y3L3@^WjIAleT7O zZfD07+|O{+$+oisVX3(Trhyk5%aj&Qi8E1SzfYnycgA3=hd?_`>J;3ug0)nO?BeNd zb=k%-Kq6G6i=;}qds4~Y!+6%kknhQA0s+IKM&AIHUpeGqnp3JlQE0!eJVGjRh(l*luD}1<7~jhzsU4Kwtip&PM!rtJ!I(tF8Dy|=6gGxs0TgG z)pJdKk2af)6&&DkG}+BvK~_sr;)U$4ddUTM_}n{HmqD4w946_PqWSjQZan7MX2wq_ z3hU0au7k9DadA0LZJ1`O%*Y2Fn@%c-*t)6#)HKwSOQGKx>uJ-w>J_6#0G3vfse+~f zA(6`#HHIdUQ;a$K#l7q%do~NH`qJV<5Mh29KbeJt;yK6C8rYacfY?H_Gdj}Q5-ueQ z?+CmKnvYC6IZ_+Bx7_$p|0TE4XNwTNUSb;NAX&#n&}7L0)f0M0wQ41-?IkBL}TnF{#_9B4hy%OxKuv z-O)pB?f<6hFae)}-M?$W&nOCy9x%vef~X(p5HCE$+%*jU{j~d^)cF49@_3ukHr<3L zvwVhQjDN4e4LA}Wa(`Q?dR}kLQ-|gfU=2|T@aIwaOK;W{Xz@TOd@OQD58x6(0G#riNz$pk%9DkZvu?A!B}Wl-Z;n5sHmv&^76fQ$`{SlF(DNgOB{o`W~{!+ z;&Pfgx=n^P#!pUZlH~OW%~k5ky(M2e=;m&-+I@{%U`30_vN;OPS4vyIz3jy%!MfmR zaM2PeoK&4r5%3(U{#(M?DnB0!&BC_E8_+z6-E5@%WM^cIs zRP)8(YsR;eyc%Yid^bPQGY9;z&R#|Cw5BsW&feUiaTmaXO?ztWDf?Z0S%cf_<*Br* z*8nmnZTH$A-dujk{KCP)2*r`x&(wb5rtpJd=gYd%?E`43yGAbLHS_uX?g81-dt7B`XPjok^O7ARa&=F6RY4)(h;ySP(!}(2btlrP=E^(~yo0Mv&Gv`^o@cLX#H>-NQDsGRY z_<;33_381JFM{CA`Z)=f{LNu|}|Zaj;k({ommK%LO^=#%$rkLrfyZ9O?J& R!fYp&qMVv+?FaMl{{eAw0R#X5 literal 0 HcmV?d00001 diff --git a/.github/workflows/madlib_modules/MadMarkdownRenderer/src/styles/main.scss b/.github/workflows/madlib_modules/MadMarkdownRenderer/src/styles/main.scss new file mode 100644 index 0000000..e69de29 diff --git a/.github/workflows/madlib_modules/MadMarkdownRenderer/version.lock b/.github/workflows/madlib_modules/MadMarkdownRenderer/version.lock new file mode 100644 index 0000000..5830173 --- /dev/null +++ b/.github/workflows/madlib_modules/MadMarkdownRenderer/version.lock @@ -0,0 +1,16 @@ +{ + "api": { + "apiAliases": {}, + "apiInstances": [], + "apiInterfaces": {}, + "apiNames": { + "defaultConfig": "{ linkView :: Element a -> String -> Element a }", + "renderMarkdown": "String -> Element a", + "renderMarkdownWithConfig": "{ linkView :: String -> String -> Element a } -> String -> Element a", + "setLinkView": "(String -> String -> Element a) -> { linkView :: String -> String -> Element a } -> { linkView :: String -> String -> Element a }" + }, + "apiTypes": {} + }, + "buildHash": "ba1931597a01802b2111fd94a27c5113", + "versionHash": "47cd76e43f74bbc2e1baaf194d07e1fa" +} diff --git a/.github/workflows/madlib_modules/MadUI/.github/workflows/release.yml b/.github/workflows/madlib_modules/MadUI/.github/workflows/release.yml new file mode 100644 index 0000000..94e2222 --- /dev/null +++ b/.github/workflows/madlib_modules/MadUI/.github/workflows/release.yml @@ -0,0 +1,67 @@ +name: 'Publish new version' + +on: + workflow_dispatch: + inputs: + version: + description: 'Version to publish ( ex: v0.0.1 )' + required: true + +env: + node-version: 14.x + + +jobs: + check-version: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + - run: | + MADLIB_PKG_VERSION="v$(cat madlib.json | grep version | cut -d":" -f2 | cut -d"\"" -f2)" + TAG_NAME=${{ github.event.inputs.version }} + if [ "$TAG_NAME" = "$MADLIB_PKG_VERSION" ]; then + echo "Versions match" + else + echo "Versions in madlib.json is not ${TAG_NAME}" + exit 1 + fi + + release: + needs: check-version + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + + - name: Use Node.js ${{ env.node-version }} + uses: actions/setup-node@v2 + with: + node-version: ${{ env.node-version }} + + - name: "Changelog: generate changelog" + id: changelog + uses: TriPSs/conventional-changelog-action@v3.4.1 + with: + presets: "conventionalcommits" + github-token: ${{ secrets.GITHUB_TOKEN }} + skip-on-empty: false + output-file: false + tag-prefix: 'v' + skip-commit: true + skip-version-file: true + + - name: "Delete created tag from changelog" + run: | + git push --delete origin v${{ steps.changelog.outputs.version }} + git tag -d v${{ steps.changelog.outputs.version }} + + - name: "Create Release" + id: create_release + uses: actions/create-release@v1.1.4 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + with: + tag_name: ${{ github.event.inputs.version }} + release_name: Release ${{ github.event.inputs.version }} + body: ${{ steps.changelog.outputs.clean_changelog }} + draft: false + prerelease: false diff --git a/.github/workflows/madlib_modules/MadUI/.gitignore b/.github/workflows/madlib_modules/MadUI/.gitignore new file mode 100644 index 0000000..f8ca7a7 --- /dev/null +++ b/.github/workflows/madlib_modules/MadUI/.gitignore @@ -0,0 +1,7 @@ +build +node_modules +/index.html +/src/Example.mad +/src/Todo.mad +/src/ShareState.mad +.DS_Store diff --git a/.github/workflows/madlib_modules/MadUI/.madlibignore b/.github/workflows/madlib_modules/MadUI/.madlibignore new file mode 100644 index 0000000..313f48d --- /dev/null +++ b/.github/workflows/madlib_modules/MadUI/.madlibignore @@ -0,0 +1,6 @@ +/index.html +/src/Example.mad +/src/Todo.mad +/src/ShareState.mad +.DS_Store + diff --git a/.github/workflows/madlib_modules/MadUI/README.md b/.github/workflows/madlib_modules/MadUI/README.md new file mode 100644 index 0000000..a63e93e --- /dev/null +++ b/.github/workflows/madlib_modules/MadUI/README.md @@ -0,0 +1,65 @@ +# MadUI +MadUI is a client library to build web applications. + +## How to install it +- Add the repository's zip to your madlib.json +- Run `madlib install` to locally install it + +## How to use it + +### View +There's no real concept of components in MadUI. Instead you have one main render function that +you can compose and is a function of the State. The state can be any user-defined madlib type +such as `String`, `Number`, a tuple, or any data type, alias or record you need to model the +state of your app. To render your view you simply call `render` that has the following signature: +```madlib +render :: View state -> state -> String -> () +``` +So understand, it takes a view function ( State -> Element ) that you define, an initial state, and +the id of the element it should render into in your html document. + +### Elements +This package exports render functions that follow the html tags such as: +- div +- span +- p +- h1...6 +And more. +These functions all have the same signature: + +```madlib +List Attribute -> List Element -> Element +``` + +### Attributes +An attribute is mainly created through exported functions such as: +- `id :: String -> Attribute` +- `className :: String -> Attribute` +- `onClick :: (Action a) -> Attribute` + +### Event handlers +In the case of event handlers, an action is defined like this: +```madlib +export alias Action state = state -> Event -> List (Wish (state -> state) (state -> state)) +``` + +An action is a function of the State. A lot happens here but the gist is that you receive as parameters +the current state at the time the event was emitted as well as the event object. You must then return a `List` +of `Wish` that must contain a function `(state -> state)`. This function ( for bad or good handlers ) will be +run, whenever your computation finishes. So you could do an http call and when that http call returns you would map +the result to that function so that it runs with the latest state ( or current ) by the time the async computation +is finished. A quick example: + +```madlib +handleClick :: Action MyState +handleClick = (state, event) => pipe( + getUserId, // retrieves the user id from the state + buildUserProfileUrl, // generates a URL to fetch a user profile + Http.get, // fetch the data + chain((profile) => ((state) => ({ ...state, profile: profile })), + List.singleton // remember, it must return a list, because you may well want to generate other side effects based on that event +)(state) +``` + +### Examples +You can find full examples in this repository: [https://github.com/madlib-lang/madui-examples](https://github.com/madlib-lang/madui-examples) diff --git a/.github/workflows/madlib_modules/MadUI/madlib.json b/.github/workflows/madlib_modules/MadUI/madlib.json new file mode 100644 index 0000000..272f01d --- /dev/null +++ b/.github/workflows/madlib_modules/MadUI/madlib.json @@ -0,0 +1,9 @@ +{ + "name": "MadUI", + "version": "3.0.0", + "madlibVersion": "0.12.0", + "main": "src/Main.mad", + "importAliases": { + ".": "src" + } +} diff --git a/.github/workflows/madlib_modules/MadUI/package-lock.json b/.github/workflows/madlib_modules/MadUI/package-lock.json new file mode 100644 index 0000000..89e338c --- /dev/null +++ b/.github/workflows/madlib_modules/MadUI/package-lock.json @@ -0,0 +1,145 @@ +{ + "name": "madui", + "version": "0.0.1", + "lockfileVersion": 1, + "requires": true, + "dependencies": { + "@rollup/plugin-node-resolve": { + "version": "11.2.0", + "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-11.2.0.tgz", + "integrity": "sha512-qHjNIKYt5pCcn+5RUBQxK8krhRvf1HnyVgUCcFFcweDS7fhkOLZeYh0mhHK6Ery8/bb9tvN/ubPzmfF0qjDCTA==", + "dev": true, + "requires": { + "@rollup/pluginutils": "^3.1.0", + "@types/resolve": "1.17.1", + "builtin-modules": "^3.1.0", + "deepmerge": "^4.2.2", + "is-module": "^1.0.0", + "resolve": "^1.19.0" + } + }, + "@rollup/pluginutils": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-3.1.0.tgz", + "integrity": "sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg==", + "dev": true, + "requires": { + "@types/estree": "0.0.39", + "estree-walker": "^1.0.1", + "picomatch": "^2.2.2" + } + }, + "@types/estree": { + "version": "0.0.39", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.39.tgz", + "integrity": "sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==", + "dev": true + }, + "@types/node": { + "version": "14.14.31", + "resolved": "https://registry.npmjs.org/@types/node/-/node-14.14.31.tgz", + "integrity": "sha512-vFHy/ezP5qI0rFgJ7aQnjDXwAMrG0KqqIH7tQG5PPv3BWBayOPIQNBjVc/P6hhdZfMx51REc6tfDNXHUio893g==", + "dev": true + }, + "@types/resolve": { + "version": "1.17.1", + "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-1.17.1.tgz", + "integrity": "sha512-yy7HuzQhj0dhGpD8RLXSZWEkLsV9ibvxvi6EiJ3bkqLAO1RGo0WbkWQiwpRlSFymTJRz0d3k5LM3kkx8ArDbLw==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "builtin-modules": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.2.0.tgz", + "integrity": "sha512-lGzLKcioL90C7wMczpkY0n/oART3MbBa8R9OFGE1rJxoVI86u4WAGfEk8Wjv10eKSyTHVGkSo3bvBylCEtk7LA==", + "dev": true + }, + "deepmerge": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz", + "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==", + "dev": true + }, + "estree-walker": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-1.0.1.tgz", + "integrity": "sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg==", + "dev": true + }, + "fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "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 + }, + "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" + } + }, + "is-core-module": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.2.0.tgz", + "integrity": "sha512-XRAfAdyyY5F5cOXn7hYQDqh2Xmii+DEfIcQGxK/uNwMHhIkPWO0g8msXcbzLe+MpGoR951MlqM/2iIlU4vKDdQ==", + "dev": true, + "requires": { + "has": "^1.0.3" + } + }, + "is-module": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz", + "integrity": "sha1-Mlj7afeMFNW4FdZkM2tM/7ZEFZE=", + "dev": true + }, + "path-parse": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", + "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==", + "dev": true + }, + "picomatch": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.2.tgz", + "integrity": "sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg==", + "dev": true + }, + "resolve": { + "version": "1.20.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", + "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", + "dev": true, + "requires": { + "is-core-module": "^2.2.0", + "path-parse": "^1.0.6" + } + }, + "rollup": { + "version": "2.39.1", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.39.1.tgz", + "integrity": "sha512-9rfr0Z6j+vE+eayfNVFr1KZ+k+jiUl2+0e4quZafy1x6SFCjzFspfRSO2ZZQeWeX9noeDTUDgg6eCENiEPFvQg==", + "dev": true, + "requires": { + "fsevents": "~2.3.1" + } + }, + "snabbdom": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/snabbdom/-/snabbdom-3.0.1.tgz", + "integrity": "sha512-H4gKokDT1HPe3dlGyTihNw0NtEH9FxZy55MXp3ODM4O30NBRe+11veox1wf/CP9NfGcbStDM3BmO1DFC9/5wRw==" + } + } +} diff --git a/.github/workflows/madlib_modules/MadUI/package.json b/.github/workflows/madlib_modules/MadUI/package.json new file mode 100644 index 0000000..248c236 --- /dev/null +++ b/.github/workflows/madlib_modules/MadUI/package.json @@ -0,0 +1,18 @@ +{ + "name": "madui", + "version": "0.0.1", + "description": "You just created a new madlib project, if it's your first project you should read the following. ### Notes on Madlib Madlib is a general purpose programming language that compiles to Javascript. It means that you need to have [Nodejs](https://nodejs.org/) installed and configured in order to make it work. Madlib can target nodejs or browser, by default it will compile for nodejs. ### How to run it First, you need to compile the program: ```shell madlib compile -i src/Main.mad ``` Then, you can run it like this: ```shell node build/Main.mjs ```", + "main": "index.js", + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1" + }, + "author": "", + "license": "ISC", + "dependencies": { + "snabbdom": "^3.0.1" + }, + "devDependencies": { + "@rollup/plugin-node-resolve": "^11.2.0", + "rollup": "^2.39.1" + } +} diff --git a/.github/workflows/madlib_modules/MadUI/src/Action.mad b/.github/workflows/madlib_modules/MadUI/src/Action.mad new file mode 100644 index 0000000..c785b24 --- /dev/null +++ b/.github/workflows/madlib_modules/MadUI/src/Action.mad @@ -0,0 +1,67 @@ +import type { Wish } from "Wish" + +import type { Event } from "@/Event" + +import {} from "Wish" + + + +export alias Action a = a -> Event -> List (Wish (a -> a) (a -> a)) + +export type GlobalAction a = GlobalAction(String, Action a) + +syncAction :: (a -> Event -> a) -> Action a +export syncAction = (stateUpdate) => ((_, event) => [of((state) => stateUpdate(state, event))]) + +throttleAction :: Integer -> Action a -> Action a +export throttleAction = (amount, action) => { + #- let timestamp = new Date().getTime() -# + return (state, event) => #-{ + const currentTime = new Date().getTime() + if (timestamp + amount > currentTime) { + return null; + } + + timestamp = currentTime + return action(state)(event) + }-# +} + +onAfterPrint :: Action a -> GlobalAction a +export onAfterPrint = GlobalAction("afterprint") + +onBeforePrint :: Action a -> GlobalAction a +export onBeforePrint = GlobalAction("beforeprint") + +onBeforeUnload :: Action a -> GlobalAction a +export onBeforeUnload = GlobalAction("beforeunload") + +onDocumentLoad :: Action a -> GlobalAction a +export onDocumentLoad = GlobalAction("load") + +onPageHide :: Action a -> GlobalAction a +export onPageHide = GlobalAction("pagehide") + +onPageShow :: Action a -> GlobalAction a +export onPageShow = GlobalAction("pageshow") + +onOffline :: Action a -> GlobalAction a +export onOffline = GlobalAction("offline") + +onOnline :: Action a -> GlobalAction a +export onOnline = GlobalAction("online") + +onResize :: Action a -> GlobalAction a +export onResize = GlobalAction("resize") + +onBodyScroll :: Action a -> GlobalAction a +export onBodyScroll = GlobalAction("scroll") + +onStorage :: Action a -> GlobalAction a +export onStorage = GlobalAction("storage") + +onUnload :: Action a -> GlobalAction a +export onUnload = GlobalAction("unload") + +onUrlChanged :: Action a -> GlobalAction a +export onUrlChanged = GlobalAction("popstate") diff --git a/.github/workflows/madlib_modules/MadUI/src/Attribute.mad b/.github/workflows/madlib_modules/MadUI/src/Attribute.mad new file mode 100644 index 0000000..749cc75 --- /dev/null +++ b/.github/workflows/madlib_modules/MadUI/src/Attribute.mad @@ -0,0 +1,685 @@ +import type { Method } from "Http" + +import type { Action } from "@/Action" + +import { CONNECT, DELETE, GET, HEAD, OPTIONS, PATCH, POST, PUT, TRACE } from "Http" + + + +// TODO: Check what to do with body attributes like +// onoffline, ononline, onpagehide, onpopstate + +// https://www.w3schools.com/tags/ref_attributes.asp +// https://www.w3schools.com/tags/ref_standardattributes.asp + +export type Attribute a + = StringAttribute(#[String, String]) + | AttributeAccept(String) + | AttributeAcceptCharset(String) + | AttributeAccessKey(String) + | AttributeAction(String) + | AttributeAlt(String) + | AttributeAsync(Boolean) + | AttributeAutoComplete(String) + | AttributeAutoFocus(Boolean) + | AttributeAutoPlay(Boolean) + | AttributeChecked(Boolean) + | AttributeCite(String) + | AttributeClass(String) + | AttributeCols(Integer) + | AttributeColSpan(Integer) + | AttributeContentEditable(Boolean) + | AttributeControls(Boolean) + | AttributeCoords(String) + | AttributeData(String) + | AttributeDateTime(String) + | AttributeDefault(Boolean) + | AttributeDefer(Boolean) + | AttributeDir(String) + | AttributeDirName(String) + | AttributeDisabled(Boolean) + | AttributeDownload(Boolean) + | AttributeDraggable(Boolean) + | AttributeEncType(String) + | AttributeFor(String) + | AttributeForm(String) + | AttributeFormAction(String) + | AttributeHeaders(String) + | AttributeHeight(Integer) + | AttributeHidden(Boolean) + | AttributeHigh(Integer) + | AttributeHref(String) + | AttributeHrefLang(String) + | AttributeId(String) + | AttributeInnerHTML(String) + | AttributeInnerText(String) + | AttributeIsMap(Boolean) + | AttributeKey(String) + | AttributeKind(String) + | AttributeLang(String) + | AttributeLabel(String) + | AttributeList(String) + | AttributeLoop(Boolean) + | AttributeLow(Integer) + | AttributeMax(Integer) + | AttributeMaxLength(Integer) + | AttributeMedia(String) + | AttributeMethod(String) + | AttributeMin(Integer) + | AttributeMultiple(Boolean) + | AttributeMuted(Boolean) + | AttributeName(String) + | AttributeNoValidate(Boolean) + | AttributeOnAbort(Action a) + | AttributeOnBlur(Action a) + | AttributeOnCanPlay(Action a) + | AttributeOnCanPlayThrough(Action a) + | AttributeOnChange(Action a) + | AttributeOnClick(Action a) + | AttributeOnContextMenu(Action a) + | AttributeOnCopy(Action a) + | AttributeOnCueChange(Action a) + | AttributeOnCut(Action a) + | AttributeOnDblClick(Action a) + | AttributeOnDrag(Action a) + | AttributeOnDragEnd(Action a) + | AttributeOnDragEnter(Action a) + | AttributeOnDragLeave(Action a) + | AttributeOnDragOver(Action a) + | AttributeOnDragStart(Action a) + | AttributeOnDrop(Action a) + | AttributeOnDurationChange(Action a) + | AttributeOnEmptied(Action a) + | AttributeOnEnded(Action a) + | AttributeOnError(Action a) + | AttributeOnFocus(Action a) + | AttributeOnInput(Action a) + | AttributeOnInvalid(Action a) + | AttributeOnKeyPress(Action a) + | AttributeOnKeyDown(Action a) + | AttributeOnKeyUp(Action a) + | AttributeOnLoad(Action a) + | AttributeOnLoadedData(Action a) + | AttributeOnLoadedMetaData(Action a) + | AttributeOnLoadStart(Action a) + | AttributeOnMouseDown(Action a) + | AttributeOnMouseEnter(Action a) + | AttributeOnMouseLeave(Action a) + | AttributeOnMouseMove(Action a) + | AttributeOnMouseUp(Action a) + | AttributeOnMouseWheel(Action a) + | AttributeOnMouseOver(Action a) + | AttributeOnMouseOut(Action a) + | AttributeOnPaste(Action a) + | AttributeOnPause(Action a) + | AttributeOnPlay(Action a) + | AttributeOnPlaying(Action a) + | AttributeOnProgress(Action a) + | AttributeOnRateChange(Action a) + | AttributeOnReset(Action a) + | AttributeOnScroll(Action a) + | AttributeOnSearch(Action a) + | AttributeOnSeeked(Action a) + | AttributeOnSeeking(Action a) + | AttributeOnSelect(Action a) + | AttributeOnStalled(Action a) + | AttributeOnSubmit(Action a) + | AttributeOnSuspend(Action a) + | AttributeOnTimeUpdate(Action a) + | AttributeOnToggle(Action a) + | AttributeOnTransitionCancel(Action a) + | AttributeOnTransitionEnd(Action a) + | AttributeOnTransitionRun(Action a) + | AttributeOnTransitionStart(Action a) + | AttributeOnVolumeChange(Action a) + | AttributeOnWaiting(Action a) + | AttributeOnWheel(Action a) + | AttributeOpen(Boolean) + | AttributeOptimum(Integer) + | AttributePattern(String) + | AttributePlaceholder(String) + | AttributePoster(String) + | AttributePreload(String) + | AttributeReadOnly(Boolean) + | AttributeRel(String) + | AttributeRequired(Boolean) + | AttributeReversed(Boolean) + | AttributeRows(Integer) + | AttributeRowSpan(Integer) + | AttributeSandBox(Boolean) + | AttributeScope(String) + | AttributeSelected(Boolean) + | AttributeShape(String) + | AttributeSize(Integer) + | AttributeSizes(String) + | AttributeSpan(Integer) + | AttributeSpellCheck(String) + | AttributeSrc(String) + | AttributeSrcDoc(String) + | AttributeSrcLang(String) + | AttributeSrcSet(String) + | AttributeStart(Integer) + | AttributeStep(Integer) + | AttributeStyle(Dictionary String String) + | AttributeTabIndex(Integer) + | AttributeTarget(String) + | AttributeTitle(String) + | AttributeTo(String) + | AttributeTranslate(String) + | AttributeType(String) + | AttributeUseMap(String) + | AttributeValue(String) + | AttributeWidth(Integer) + | AttributeWrap(String) + + +stringAttribute :: #[String, String] -> Attribute a +export stringAttribute = StringAttribute + + +accept :: String -> Attribute a +export accept = AttributeAccept + +acceptCharset :: String -> Attribute a +export acceptCharset = AttributeAcceptCharset + +accessKey :: String -> Attribute a +export accessKey = AttributeAccessKey + +action :: String -> Attribute a +export action = AttributeAction + +altAttribute :: String -> Attribute a +export altAttribute = AttributeAlt + +async :: Boolean -> Attribute a +export async = AttributeAsync + +autocomplete :: Boolean -> Attribute a +export autocomplete = (on) => on ? AttributeAutoComplete("on") : AttributeAutoComplete("off") + +autofocus :: Boolean -> Attribute a +export autofocus = AttributeAutoFocus + +autoplay :: Boolean -> Attribute a +export autoplay = AttributeAutoPlay + +checked :: Boolean -> Attribute a +export checked = AttributeChecked + +citeAttr :: String -> Attribute a +export citeAttr = AttributeCite + +className :: String -> Attribute a +export className = AttributeClass + +cols :: Integer -> Attribute a +export cols = AttributeCols + +colspan :: Integer -> Attribute a +export colspan = AttributeColSpan + +contenteditable :: Boolean -> Attribute a +export contenteditable = AttributeContentEditable + +controls :: Boolean -> Attribute a +export controls = AttributeControls + +coords :: String -> Attribute a +export coords = AttributeCoords + +dataAttr :: String -> Attribute a +export dataAttr = AttributeData + +datetime :: String -> Attribute a +export datetime = AttributeDateTime + +default :: Boolean -> Attribute a +export default = AttributeDefault + +defer :: Boolean -> Attribute a +export defer = AttributeDefer + +dir :: String -> Attribute a +export dir = AttributeDir + +dirname :: String -> Attribute a +export dirname = AttributeDirName + +disabled :: Boolean -> Attribute a +export disabled = AttributeDisabled + +download :: Boolean -> Attribute a +export download = AttributeDownload + +draggable :: Boolean -> Attribute a +export draggable = (canDrag) => canDrag + ? StringAttribute(#["draggable", "true"]) + : StringAttribute(#["draggable", "false"]) + +enctype :: String -> Attribute a +export enctype = AttributeEncType + +for :: String -> Attribute a +export for = AttributeFor + +formAttr :: String -> Attribute a +export formAttr = AttributeForm + +formaction :: String -> Attribute a +export formaction = AttributeFormAction + +headers :: String -> Attribute a +export headers = AttributeHeaders + +height :: Integer -> Attribute a +export height = AttributeHeight + +hidden :: Boolean -> Attribute a +export hidden = AttributeHidden + +high :: Integer -> Attribute a +export high = AttributeHigh + +href :: String -> Attribute a +export href = AttributeHref + +hreflang :: String -> Attribute a +export hreflang = AttributeHrefLang + +id :: String -> Attribute a +export id = AttributeId + +innerHTML :: String -> Attribute a +export innerHTML = AttributeInnerHTML + +innerText :: String -> Attribute a +export innerText = AttributeInnerText + +inputType :: String -> Attribute a +export inputType = AttributeType + +ismap :: Boolean -> Attribute a +export ismap = AttributeIsMap + +key :: String -> Attribute a +export key = AttributeKey + +kind :: String -> Attribute a +export kind = AttributeKind + +labelAttr :: String -> Attribute a +export labelAttr = AttributeLabel + +// TODO: That String should be a LanguageCode instead +// ref: https://www.w3schools.com/tags/ref_language_codes.asp +lang :: String -> Attribute a +export lang = AttributeLang + +list :: String -> Attribute a +export list = AttributeList + +loop :: Boolean -> Attribute a +export loop = AttributeLoop + +low :: Integer -> Attribute a +export low = AttributeLow + +max :: Integer -> Attribute a +export max = AttributeMax + +maxlength :: Integer -> Attribute a +export maxlength = AttributeMaxLength + +media :: String -> Attribute a +export media = AttributeMedia + +method :: Method -> Attribute a +export method = where { + GET => + AttributeMethod("get") + + POST => + AttributeMethod("post") + + PUT => + AttributeMethod("put") + + DELETE => + AttributeMethod("delete") + + PATCH => + AttributeMethod("patch") + + HEAD => + AttributeMethod("head") + + OPTIONS => + AttributeMethod("options") + + CONNECT => + AttributeMethod("connect") + + TRACE => + AttributeMethod("trace") +} + +min :: Integer -> Attribute a +export min = AttributeMin + +multiple :: Boolean -> Attribute a +export multiple = AttributeMultiple + +muted :: Boolean -> Attribute a +export muted = AttributeMuted + +name :: String -> Attribute a +export name = AttributeName + +novalidate :: Boolean -> Attribute a +export novalidate = AttributeNoValidate + +onAbort :: Action a -> Attribute a +export onAbort = AttributeOnAbort + +onBlur :: Action a -> Attribute a +export onBlur = AttributeOnBlur + +onCanPlay :: Action a -> Attribute a +export onCanPlay = AttributeOnCanPlay + +onCanPlayThrough :: Action a -> Attribute a +export onCanPlayThrough = AttributeOnCanPlayThrough + +onChange :: Action a -> Attribute a +export onChange = AttributeOnChange + +onClick :: Action a -> Attribute a +export onClick = AttributeOnClick + +onContextMenu :: Action a -> Attribute a +export onContextMenu = AttributeOnContextMenu + +onCopy :: Action a -> Attribute a +export onCopy = AttributeOnCopy + +onCueChange :: Action a -> Attribute a +export onCueChange = AttributeOnCueChange + +onCut :: Action a -> Attribute a +export onCut = AttributeOnCut + +onDblClick :: Action a -> Attribute a +export onDblClick = AttributeOnDblClick + +onDrag :: Action a -> Attribute a +export onDrag = AttributeOnDrag + +onDragEnd :: Action a -> Attribute a +export onDragEnd = AttributeOnDragEnd + +onDragEnter :: Action a -> Attribute a +export onDragEnter = AttributeOnDragEnter + +onDragLeave :: Action a -> Attribute a +export onDragLeave = AttributeOnDragLeave + +onDragOver :: Action a -> Attribute a +export onDragOver = AttributeOnDragOver + +onDragStart :: Action a -> Attribute a +export onDragStart = AttributeOnDragStart + +onDrop :: Action a -> Attribute a +export onDrop = AttributeOnDrop + +onDurationChange :: Action a -> Attribute a +export onDurationChange = AttributeOnDurationChange + +onEmptied :: Action a -> Attribute a +export onEmptied = AttributeOnEmptied + +onEnded :: Action a -> Attribute a +export onEnded = AttributeOnEnded + +onError :: Action a -> Attribute a +export onError = AttributeOnError + +onFocus :: Action a -> Attribute a +export onFocus = AttributeOnFocus + +onInput :: Action a -> Attribute a +export onInput = AttributeOnInput + +onInvalid :: Action a -> Attribute a +export onInvalid = AttributeOnInvalid + +onKeyPress :: Action a -> Attribute a +export onKeyPress = AttributeOnKeyPress + +onKeyDown :: Action a -> Attribute a +export onKeyDown = AttributeOnKeyDown + +onKeyUp :: Action a -> Attribute a +export onKeyUp = AttributeOnKeyUp + +onLoad :: Action a -> Attribute a +export onLoad = AttributeOnLoad + +onLoadedData :: Action a -> Attribute a +export onLoadedData = AttributeOnLoadedData + +onLoadedMetaData :: Action a -> Attribute a +export onLoadedMetaData = AttributeOnLoadedMetaData + +onLoadStart :: Action a -> Attribute a +export onLoadStart = AttributeOnLoadStart + +onMouseDown :: Action a -> Attribute a +export onMouseDown = AttributeOnMouseDown + +onMouseEnter :: Action a -> Attribute a +export onMouseEnter = AttributeOnMouseEnter + +onMouseLeave :: Action a -> Attribute a +export onMouseLeave = AttributeOnMouseLeave + +onMouseMove :: Action a -> Attribute a +export onMouseMove = AttributeOnMouseMove + +onMouseOut :: Action a -> Attribute a +export onMouseOut = AttributeOnMouseOut + +onMouseOver :: Action a -> Attribute a +export onMouseOver = AttributeOnMouseOver + +onMouseUp :: Action a -> Attribute a +export onMouseUp = AttributeOnMouseUp + +onMouseWheel :: Action a -> Attribute a +export onMouseWheel = AttributeOnMouseWheel + +onPaste :: Action a -> Attribute a +export onPaste = AttributeOnPaste + +onPause :: Action a -> Attribute a +export onPause = AttributeOnPause + +onPlay :: Action a -> Attribute a +export onPlay = AttributeOnPlay + +onPlaying :: Action a -> Attribute a +export onPlaying = AttributeOnPlaying + +onProgress :: Action a -> Attribute a +export onProgress = AttributeOnProgress + +onRateChange :: Action a -> Attribute a +export onRateChange = AttributeOnRateChange + +onReset :: Action a -> Attribute a +export onReset = AttributeOnReset + +onScroll :: Action a -> Attribute a +export onScroll = AttributeOnScroll + +onSearch :: Action a -> Attribute a +export onSearch = AttributeOnSearch + +onSeeked :: Action a -> Attribute a +export onSeeked = AttributeOnSeeked + +onSeeking :: Action a -> Attribute a +export onSeeking = AttributeOnSeeking + +onSelect :: Action a -> Attribute a +export onSelect = AttributeOnSelect + +onStalled :: Action a -> Attribute a +export onStalled = AttributeOnStalled + +onSubmit :: Action a -> Attribute a +export onSubmit = AttributeOnSubmit + +onSuspend :: Action a -> Attribute a +export onSuspend = AttributeOnSuspend + +onTimeUpdate :: Action a -> Attribute a +export onTimeUpdate = AttributeOnTimeUpdate + +onToggle :: Action a -> Attribute a +export onToggle = AttributeOnToggle + +onTransitionCancel :: Action a -> Attribute a +export onTransitionCancel = AttributeOnTransitionCancel + +onTransitionEnd :: Action a -> Attribute a +export onTransitionEnd = AttributeOnTransitionEnd + +onTransitionRun :: Action a -> Attribute a +export onTransitionRun = AttributeOnTransitionRun + +onTransitionStart :: Action a -> Attribute a +export onTransitionStart = AttributeOnTransitionStart + +onVolumeChange :: Action a -> Attribute a +export onVolumeChange = AttributeOnVolumeChange + +onWaiting :: Action a -> Attribute a +export onWaiting = AttributeOnWaiting + +onWheel :: Action a -> Attribute a +export onWheel = AttributeOnWheel + +open :: Boolean -> Attribute a +export open = AttributeOpen + +optimum :: Integer -> Attribute a +export optimum = AttributeOptimum + +pattern :: String -> Attribute a +export pattern = AttributePattern + +placeholder :: String -> Attribute a +export placeholder = AttributePlaceholder + +poster :: String -> Attribute a +export poster = AttributePoster + +// TODO: make a type for this: preload="auto|metadata|none" +preload :: String -> Attribute a +export preload = AttributePreload + +readonly :: Boolean -> Attribute a +export readonly = AttributeReadOnly + +rel :: String -> Attribute a +export rel = AttributeRel + +required :: Boolean -> Attribute a +export required = AttributeRequired + +reversed :: Boolean -> Attribute a +export reversed = AttributeReversed + +rows :: Integer -> Attribute a +export rows = AttributeRows + +rowspan :: Integer -> Attribute a +export rowspan = AttributeRowSpan + +sandbox :: Boolean -> Attribute a +export sandbox = AttributeSandBox + +// TODO: make a type for this: scope="col|row|colgroup|rowgroup" +scope :: String -> Attribute a +export scope = AttributeScope + +selected :: Boolean -> Attribute a +export selected = AttributeSelected + +// TODO: make a type for this: shape="default|rect|circle|poly" +shape :: String -> Attribute a +export shape = AttributeShape + +size :: Integer -> Attribute a +export size = AttributeSize + +// TODO: see if we should make this a List Size or something +sizes :: String -> Attribute a +export sizes = AttributeSizes + +spanAttr :: Integer -> Attribute a +export spanAttr = AttributeSpan + +spellcheck :: Boolean -> Attribute a +export spellcheck = (truthy) => truthy ? AttributeSpellCheck("true") : AttributeSpellCheck("false") + +src :: String -> Attribute a +export src = AttributeSrc + +srcdoc :: String -> Attribute a +export srcdoc = AttributeSrcDoc + +srclang :: String -> Attribute a +export srclang = AttributeSrcLang + +srcset :: String -> Attribute a +export srcset = AttributeSrcSet + +start :: Integer -> Attribute a +export start = AttributeStart + +step :: Integer -> Attribute a +export step = AttributeStep + +style :: Dictionary String String -> Attribute a +export style = AttributeStyle + +tabindex :: Integer -> Attribute a +export tabindex = AttributeTabIndex + +target :: String -> Attribute a +export target = AttributeTarget + +titleAttr :: String -> Attribute a +export titleAttr = AttributeTitle + +to :: String -> Attribute a +export to = AttributeTo + +translate :: Boolean -> Attribute a +export translate = (yes) => yes ? AttributeTranslate("yes") : AttributeTranslate("no") + +usemap :: String -> Attribute a +export usemap = AttributeUseMap + +value :: String -> Attribute a +export value = AttributeValue + +width :: Integer -> Attribute a +export width = AttributeWidth + +// wrap="soft|hard" +wrap :: String -> Attribute a +export wrap = AttributeWrap diff --git a/.github/workflows/madlib_modules/MadUI/src/Config.mad b/.github/workflows/madlib_modules/MadUI/src/Config.mad new file mode 100644 index 0000000..feb3dcf --- /dev/null +++ b/.github/workflows/madlib_modules/MadUI/src/Config.mad @@ -0,0 +1,27 @@ +import type { GlobalAction } from "@/Action" +import type { Subscription } from "@/Subscription" + +import { append } from "List" + + + +export type RoutingKind = HashRouting | BasicRouting + +export alias Config a = { + globalEventHandlers :: List (GlobalAction a), + routingKind :: RoutingKind, + subscriptions :: List (Subscription a), +} + +DEFAULT_CONFIG :: Config a +export DEFAULT_CONFIG = { subscriptions: [], globalEventHandlers: [], routingKind: BasicRouting } + +addGlobalEventHandler :: GlobalAction a -> Config a -> Config a +export addGlobalEventHandler = (action, config) => ( + { ...config, globalEventHandlers: append(action, config.globalEventHandlers) } +) + +addSubscription :: Subscription a -> Config a -> Config a +export addSubscription = (action, config) => ( + { ...config, subscriptions: append(action, config.subscriptions) } +) diff --git a/.github/workflows/madlib_modules/MadUI/src/Core.mad b/.github/workflows/madlib_modules/MadUI/src/Core.mad new file mode 100644 index 0000000..d65f67a --- /dev/null +++ b/.github/workflows/madlib_modules/MadUI/src/Core.mad @@ -0,0 +1,118 @@ +import type { Config } from "@/Config" +import type { Element } from "@/Element" + +import { get } from "Dictionary" +import {} from "Number" + +import { DEFAULT_CONFIG } from "@/Config" +import { runAction, wrapEventHandler } from "@/CoreUtils" +import { EventConstructors } from "@/Event" + + + +#- +import { + attributesModule as madui_attributesModule, + init as madui_init, + propsModule as madui_propsModule, + eventListenersModule as madui_eventListenersModule, + styleModule as madui_styleModule +} from "snabbdom" +-# + + + +getUrl :: a -> String +export getUrl = () => #- document.location.href || "" -# + + +getPathName :: a -> String +export getPathName = () => #- document.location.pathname || "" -# + + + +#- +const startGlobalEventHandlers = (env, globalActions) => { + const keysForWindowEvents = []; + while (globalActions !== null) { + keysForWindowEvents.push(({ + eventName: globalActions.v.__args[0], + eventHandler: globalActions.v.__args[1], + })) + globalActions = globalActions.n + } + + keysForWindowEvents.forEach(ga => { + const handler = wrapEventHandler(env, EventConstructors[ga.eventName], ga.eventHandler) + window.addEventListener(ga.eventName, handler) + + if (ga.eventName === "popstate") { + handler({}) + } + }) +} +-# + + +#- +const hashFixModule = () => { + let triggered = false + history.scrollRestoration = "manual" + return { + post: () => { + if (!triggered) { + const element = document.getElementById(window.location.hash.substr(1)) + if (element) { + const top = element.offsetTop + window.scrollTo(0, top) + } + } + triggered = true + }, + } +} +-# + +_renderWithConfig :: w -> Config a -> (a -> Element a) -> a -> String -> {} +export _renderWithConfig = (_runAction, config, view, initialState, containerId) => { + #- + window.env = { + routingKind: config.routingKind.__constructor, + patch: null, + currentElement: null, + currentState: null, + rootView: null, + } + -# + initialElement = view(initialState) + #- + const patch = madui_init([madui_attributesModule, madui_propsModule, madui_eventListenersModule, madui_styleModule, hashFixModule()]) + patch(document.getElementById(containerId), initialElement) + + window.env.patch = patch + window.env.currentElement = initialElement + window.env.rootView = view + window.env.currentState = initialState + + startGlobalEventHandlers(window.env, config.globalEventHandlers) + // needed to make the router work + window.addEventListener("popstate", () => { _runAction(window.env)(x => x) }) + + let subs = config.subscriptions + while (subs !== null) { + subs.v(_runAction(window.env)) + subs = subs.n + } + -# + + return {} +} + +renderWithConfig :: Config a -> (a -> Element a) -> a -> String -> {} +export renderWithConfig = _renderWithConfig(runAction) + +/** + * render - boostraps the app and takes a component, and an initial state as parameters + */ +render :: (a -> Element a) -> a -> String -> {} +export render = renderWithConfig(DEFAULT_CONFIG) diff --git a/.github/workflows/madlib_modules/MadUI/src/CoreUtils.mad b/.github/workflows/madlib_modules/MadUI/src/CoreUtils.mad new file mode 100644 index 0000000..8bc7809 --- /dev/null +++ b/.github/workflows/madlib_modules/MadUI/src/CoreUtils.mad @@ -0,0 +1,28 @@ +import { fulfill } from "Wish" + + + +export runAction = #- env => updater => { + env.currentState = updater(env.currentState) + window.env = env + const newElement = env.rootView(env.currentState) + env.patch(env.currentElement, newElement) + env.currentElement = newElement +} -# + + +_wrapEventHandler = (_fulfill, _runAction) => #- (env, ctor, handler) => { + return event => { + event.eventType = event.type + + // Calling an event handler gives us a list of wishes + let wishes = handler(env.currentState)(ctor(event)) + + while (wishes !== null) { + _fulfill(_runAction(env))(_runAction(env))(wishes.v) + wishes = wishes.n + } + } +} -# + +export wrapEventHandler = _wrapEventHandler(fulfill, runAction) diff --git a/.github/workflows/madlib_modules/MadUI/src/Element.mad b/.github/workflows/madlib_modules/MadUI/src/Element.mad new file mode 100644 index 0000000..ab13630 --- /dev/null +++ b/.github/workflows/madlib_modules/MadUI/src/Element.mad @@ -0,0 +1,356 @@ +#- +import { h as madui_h } from "snabbdom" +-# + +import type { Attribute } from "@/Attribute" + +import { fromList } from "Dictionary" +import { reduce } from "List" + +import { wrapEventHandler } from "@/CoreUtils" +import { EventConstructors } from "@/Event" + + + +export type Element a = Element + +alias RouteInfo = { + searchParams :: Dictionary String String, + urlParams :: Dictionary String String, +} + + +#- +const __getAttributeTuple = attr => + [attr.__constructor.substr(9).toLowerCase(), attr.__args[0]] + + +const PROP_NAMES = [ + "value", + "innerhtml", + "innertext", +] + +-# + +_objectifyAttrs = (_reduce, _wrapEventHandler, _EventConstructors) => #- { + return (env, attrs) => _reduce(obj => attr => { + const [attrName, attrValue] = __getAttributeTuple(attr) + + if (attr.__constructor == "AttributeStyle") { + const items = attr.__args[0].__args[0] + const styleObj = _reduce(obj => ([key, value]) => ({ + ...obj, + [key]: value, + }))({})(items) + return { ...obj, style: styleObj } + } else if (attr.__constructor == "StringAttribute") { + return { ...obj, attrs: { ...obj.attrs, [attr.__args[0][0]]: attr.__args[0][1] }} + } else if (attrName === "key") { + return { ...obj, key: attrValue } + } else if (PROP_NAMES.includes(attrName)) { + let realAttr = attrName; + if (attrName === "innerhtml") { + realAttr = "innerHTML" + } + if (attrName === "innertext") { + realAttr = "innerText" + } + + return { ...obj, props: { ...obj.props, [realAttr]: attrValue }} + } else if (attrName.substr(0, 2) === "on") { + const eventName = attrName.substr(2) + const ctor = _EventConstructors[eventName] + return { ...obj, on: { ...obj.on, [eventName]: _wrapEventHandler(env, ctor, attrValue) }} + } else { + return { ...obj, attrs: { ...obj.attrs, [attrName]: attrValue }} + } + })({})(attrs) +} -# + + +_tag :: b -> String -> List (Attribute a) -> List (Element a) -> Element a +export _tag = (objectifyAttrs, tagName, attrs, children) => #- { + return madui_h(tagName, objectifyAttrs(window.env, attrs), __listToJSArray__(children)) +} -# + +tag :: String -> List (Attribute a) -> List (Element a) -> Element a +export tag = (tagName, attrs, children) => _tag( + _objectifyAttrs(reduce, wrapEventHandler, EventConstructors), + tagName, + attrs, + children, +) + + + +export a = tag("a") +export abbr = tag("abbr") +export address = tag("address") +export area = tag("area") +export article = tag("article") +export aside = tag("aside") +export audio = tag("audio") +export b = tag("b") +export bdi = tag("bdi") +export bdo = tag("bdo") +export blockquote = tag("blockquote") +export br = tag("br") +export button = tag("button") +export canvas = tag("canvas") +export caption = tag("caption") +export cite = tag("cite") +export code = tag("code") +export col = tag("col") +export colgroup = tag("colgroup") +export content = tag("content") +export data = tag("data") +export datalist = tag("datalist") +export dd = tag("dd") +export del = tag("del") +export details = tag("details") +export dfn = tag("dfn") +export dialog = tag("dialog") +export div = tag("div") +export dl = tag("dl") +export dt = tag("dt") +export em = tag("em") +export embed = tag("embed") +export fieldset = tag("fieldset") +export figcaption = tag("figcaption") +export figure = tag("figure") +export footer = tag("footer") +export form = tag("form") +export h1 = tag("h1") +export h2 = tag("h2") +export h3 = tag("h3") +export h4 = tag("h4") +export h5 = tag("h5") +export h6 = tag("h6") +export header = tag("header") +export hgroup = tag("hgroup") +export hr = tag("hr") +export i = tag("i") +export iframe = tag("iframe") +export img = tag("img") +export input = tag("input") +export ins = tag("ins") +export kbd = tag("kbd") +export label = tag("label") +export legend = tag("legend") +export li = tag("li") +export main = tag("main") +export mapElement = tag("map") +export mark = tag("mark") +export menu = tag("menu") +export menuitem = tag("menuitem") +export meta = tag("meta") +export meter = tag("meter") +export nav = tag("nav") +export noscript = tag("noscript") +export object = tag("object") +export ol = tag("ol") +export optgroup = tag("optgroup") +export option = tag("option") +export output = tag("output") +export p = tag("p") +export param = tag("param") +export picture = tag("picture") +export plaintext = tag("plaintext") +export pre = tag("pre") +export progress = tag("progress") +export q = tag("q") +export rp = tag("rp") +export rt = tag("rt") +export rtc = tag("rtc") +export ruby = tag("ruby") +export s = tag("s") +export samp = tag("samp") +export script = tag("script") +export section = tag("section") +export select = tag("select") +export shadow = tag("shadow") +export slot = tag("slot") +export small = tag("small") +export source = tag("source") +export span = tag("span") +export strong = tag("strong") +export sub = tag("sub") +export summary = tag("summary") +export sup = tag("sup") +export table = tag("table") +export tbody = tag("tbody") +export td = tag("td") +export template = tag("template") +export textarea = tag("textarea") +export tfoot = tag("tfoot") +export th = tag("th") +export thead = tag("thead") +export time = tag("time") +export title = tag("title") +export tr = tag("tr") +export track = tag("track") +export u = tag("u") +export ul = tag("ul") +export var = tag("var") +export video = tag("video") +export wbr = tag("wbr") + +text :: String -> Element b +export text = (t) => #- t -# + +empty :: List (Attribute b) -> List (Element b) -> Element b +export empty = (attrs, children) => #- null -# + + +#- +const triggerLink = (e, path) => { + e.preventDefault(); + const url = new URL(window.location) + const state = {} + let changed = true; + + if (window.env.routingKind === "BasicRouting") { + url.href = url.origin + path + changed = path !== window.location.pathname + } else if (window.env.routingKind === "HashRouting") { + url.hash = path + changed = path !== window.location.hash + } + + if (changed) { + history.pushState(state, "", url) + var popStateEvent = new PopStateEvent('popstate', { state }); + dispatchEvent(popStateEvent); + window.scrollTo(0, 0); + } +} +-# + +_link :: w -> List (Attribute b) -> List (Element b) -> Element b +export _link = (objectifyAttrs, attrs, children) => #- { + const objAttrs = objectifyAttrs(window.env, attrs); + if (objAttrs.attrs.to) { + if (!objAttrs.attrs) { + objAttrs.attrs = {} + } + if (window.env.routingKind === "HashRouting") { + objAttrs.attrs.href = `\#${objAttrs.attrs.to}` + } else { + objAttrs.attrs.href = `${objAttrs.attrs.to}` + } + delete objAttrs.attrs.to + } + + if (!objAttrs.on) { + objAttrs.on = {}; + } + + if (objAttrs.on.click) { + const current = objAttrs.on.click + objAttrs.on.click = (e) => { + triggerLink(e, objAttrs.attrs.href); + current(e) + } + } else { + objAttrs.on.click = (e) => { + triggerLink(e, objAttrs.attrs.href); + } + } + + return madui_h("a", { ...objAttrs }, __listToJSArray__(children)); +} -# + +link :: List (Attribute b) -> List (Element b) -> Element b +export link = _link(_objectifyAttrs(reduce, wrapEventHandler, EventConstructors)) + + +_matchRoute :: (List #[String, String] -> Dictionary String String) -> a -> b +_matchRoute = (fromStringList) => #- { + return (route) => { + let path = window.location.pathname + let search = window.location.search.substr(1) + + if (window.env.routingKind === "HashRouting") { + const hash = window.location.hash.substr(1) + if (!hash) { + path = "/" + search = "" + } else { + const [_path, _search] = hash.split("?") || "/" + path = _path + search = _search || "" + } + } + + const splitRoute = route.split("/") + const splitPath = path.split("/") + let urlParams = [] + let searchParams = [] + let good = true + + for (let i = 0; i < splitRoute.length && good; i++) { + const routePart = splitRoute[i] + const pathPart = splitPath[i] + + if (routePart === "*") { + break; + } else if (routePart.charAt(0) === ":") { + if (typeof pathPart !== "undefined" && (splitPath[i + 1] !== undefined && splitRoute[i + 1] !== undefined || splitPath[i + 1] === undefined && splitRoute[i + 1] === undefined)) { + urlParams.push([routePart.substr(1), pathPart]) + } else { + good = false + } + } else { + good = pathPart === routePart && (splitPath[i + 1] !== undefined && splitRoute[i + 1] !== undefined || splitPath[i + 1] === undefined && splitRoute[i + 1] === undefined) + } + } + + if (good) { + const vars = search.split("&") + vars.forEach((v) => { + const [name, value] = v.split("=") + searchParams.push([name, value ? value : ""]) + }) + } + + return good + ? { + urlParams: fromStringList(__jsArrayToList__(urlParams)), + searchParams: fromStringList(__jsArrayToList__(searchParams)), + } + : null + } +} -# + + +forRoute :: String -> (RouteInfo -> Element a) -> Element a +export forRoute = (route, enhancedView) => { + matchRoute = _matchRoute(fromList) + #- + const routeInfo = matchRoute(route) + const _match = routeInfo !== null + -# + + match = #- _match -# + return match ? enhancedView(#- routeInfo -#) : +} + + +switchRoute :: List #[String, RouteInfo -> Element b] -> Element b +export switchRoute = (matchers) => where(matchers) { + [#[route, enhancedView], ...nextMatchers] => + do { + matchRoute = _matchRoute(fromList) + #- + const routeInfo = matchRoute(route) + const _match = routeInfo !== null + -# + + match = #- _match -# + return match ? enhancedView(#- routeInfo -#) : switchRoute(nextMatchers) + } + + [] => + +} diff --git a/.github/workflows/madlib_modules/MadUI/src/Event.mad b/.github/workflows/madlib_modules/MadUI/src/Event.mad new file mode 100644 index 0000000..cb7a9f1 --- /dev/null +++ b/.github/workflows/madlib_modules/MadUI/src/Event.mad @@ -0,0 +1,200 @@ +import type { Key } from "@/Key" + +import { getKeyFromCode } from "@/Key" + + + +// https://www.w3schools.com/tags/ref_eventattributes.asp + + +alias BaseEvent = { + bubbles :: Boolean, + defaultPrevented :: Boolean, + eventType :: String, + preventDefault :: {} -> {}, + stopImmediatePropagation :: {} -> {}, + stopPropagation :: {} -> {}, + timeStamp :: Integer, +} + + +export type Event + = AbstractEvent(BaseEvent) + | MouseEvent({ ...BaseEvent, clientX :: Integer, clientY :: Integer }) + | InputEvent({ + ...BaseEvent, + data :: String, + // Make an InputType type for it + inputType :: String, + target :: { innerText :: String, value :: String }, + }) + | KeyboardEvent({ + ...BaseEvent, + altKey :: Boolean, + ctrlKey :: Boolean, + key :: Key, + shiftKey :: Boolean, + }) + | PopStateEvent({ ...BaseEvent, path :: String, url :: String }) + + +// https://www.w3schools.com/jsref/obj_keyboardevent.asp +export buildKeyboardEvent = (e) => { + k = getKeyFromCode(e.keyCode) + + return KeyboardEvent({ + bubbles: e.bubbles, + defaultPrevented: e.defaultPrevented, + preventDefault: e.preventDefault, + stopImmediatePropagation: e.stopImmediatePropagation, + stopPropagation: e.stopPropagation, + timeStamp: e.timeStamp, + eventType: e.eventType, + key: k, + altKey: e.altKey, + ctrlKey: e.ctrlKey, + shiftKey: e.shiftKey, + }) +} + + +export buildInputEvent = (e) => InputEvent({ + bubbles: e.bubbles, + defaultPrevented: e.defaultPrevented, + preventDefault: e.preventDefault, + stopImmediatePropagation: e.stopImmediatePropagation, + stopPropagation: e.stopPropagation, + timeStamp: e.timeStamp, + eventType: e.eventType, + target: e.target, + data: e.data, + inputType: e.inputType, +}) + + +addDataTransfer :: a -> b -> a +addDataTransfer = (event, e) => #-{ + return { ...event, dataTransfer: e.dataTransfer } +}-# + + +export buildMouseEvent = (e) => MouseEvent( + addDataTransfer({ + bubbles: e.bubbles, + defaultPrevented: e.defaultPrevented, + preventDefault: e.preventDefault, + stopImmediatePropagation: e.stopImmediatePropagation, + stopPropagation: e.stopPropagation, + timeStamp: e.timeStamp, + eventType: e.eventType, + clientX: e.clientX, + clientY: e.clientY, + })(e), +) + + +export buildAbstractEvent = (e) => AbstractEvent({ + bubbles: e.bubbles, + defaultPrevented: e.defaultPrevented, + preventDefault: e.preventDefault, + stopImmediatePropagation: e.stopImmediatePropagation, + stopPropagation: e.stopPropagation, + timeStamp: e.timeStamp, + eventType: e.eventType, +}) + + +export buildPopStateEvent = (e) => PopStateEvent({ + url: #- document.location.href -#, + path: #- + window.env.routingKind === "BasicRouting" + ? document.location.pathname + : document.location.hash.substr(1) || "/" + -#, + bubbles: e.bubbles, + defaultPrevented: e.defaultPrevented, + preventDefault: e.preventDefault, + stopImmediatePropagation: e.stopImmediatePropagation, + stopPropagation: e.stopPropagation, + timeStamp: e.timeStamp, + eventType: e.eventType, +}) + + +export EventConstructors = { + abort: buildAbstractEvent, + afterprint: buildAbstractEvent, + beforeprint: buildAbstractEvent, + beforeunload: buildAbstractEvent, + blur: buildAbstractEvent, + canplay: buildAbstractEvent, + canplaythrough: buildAbstractEvent, + change: buildAbstractEvent, + click: buildMouseEvent, + contextmenu: buildAbstractEvent, + copy: buildAbstractEvent, + cuechange: buildAbstractEvent, + cut: buildAbstractEvent, + dblclick: buildMouseEvent, + drag: buildMouseEvent, + dragend: buildMouseEvent, + dragenter: buildMouseEvent, + dragleave: buildMouseEvent, + dragover: buildMouseEvent, + dragstart: buildMouseEvent, + drop: buildMouseEvent, + durationchange: buildAbstractEvent, + emptied: buildAbstractEvent, + ended: buildAbstractEvent, + error: buildAbstractEvent, + focus: buildAbstractEvent, + input: buildInputEvent, + invalid: buildAbstractEvent, + keydown: buildKeyboardEvent, + keypress: buildKeyboardEvent, + keyup: buildKeyboardEvent, + load: buildAbstractEvent, + loadeddata: buildAbstractEvent, + loadedmetadata: buildAbstractEvent, + loadstart: buildAbstractEvent, + mousedown: buildMouseEvent, + mouseenter: buildMouseEvent, + mouseleave: buildMouseEvent, + mousemove: buildMouseEvent, + mouseout: buildMouseEvent, + mouseover: buildMouseEvent, + mouseup: buildMouseEvent, + mousewheel: buildMouseEvent, + offline: buildAbstractEvent, + online: buildAbstractEvent, + pagehide: buildAbstractEvent, + pageshow: buildAbstractEvent, + paste: buildAbstractEvent, + pause: buildAbstractEvent, + play: buildAbstractEvent, + playing: buildAbstractEvent, + popstate: buildPopStateEvent, + progress: buildAbstractEvent, + ratechange: buildAbstractEvent, + reset: buildAbstractEvent, + resize: buildAbstractEvent, + scroll: buildAbstractEvent, + search: buildAbstractEvent, + seeked: buildAbstractEvent, + seeking: buildAbstractEvent, + select: buildAbstractEvent, + stalled: buildAbstractEvent, + storage: buildAbstractEvent, + submit: buildAbstractEvent, + suspend: buildAbstractEvent, + timeupdate: buildAbstractEvent, + toggle: buildAbstractEvent, + transitioncancel: buildAbstractEvent, + transitionend: buildAbstractEvent, + transitionrun: buildAbstractEvent, + transitionstart: buildAbstractEvent, + unload: buildAbstractEvent, + volumechange: buildAbstractEvent, + waiting: buildAbstractEvent, + wheel: buildAbstractEvent, +} diff --git a/.github/workflows/madlib_modules/MadUI/src/Key.mad b/.github/workflows/madlib_modules/MadUI/src/Key.mad new file mode 100644 index 0000000..37b0da3 --- /dev/null +++ b/.github/workflows/madlib_modules/MadUI/src/Key.mad @@ -0,0 +1,366 @@ +import { fromList, get } from "Dictionary" +import { fromMaybe } from "Maybe" +import {} from "Number" + + + +export type Key + = KEY_ANY + | KEY_BREAK + | KEY_BACKSPACE + | KEY_TAB + | KEY_CLEAR + | KEY_ENTER + | KEY_SHIFT + | KEY_CTRL + | KEY_ALT + | KEY_PAUSE + | KEY_CAPS_LOCK + | KEY_HANGUL + | KEY_HANJA + | KEY_ESCAPE + | KEY_CONVERSION + | KEY_NON_CONVERSION + | KEY_SPACE + | KEY_PAGE_UP + | KEY_PAGE_DOWN + | KEY_END + | KEY_HOME + | KEY_LEFT_ARROW + | KEY_UP_ARROW + | KEY_RIGHT_ARROW + | KEY_DOWN_ARROW + | KEY_SELECT + | KEY_PRINT + | KEY_EXECUTE + | KEY_PRINT_SCREEN + | KEY_INSERT + | KEY_DELETE + | KEY_HELP + | KEY_0 + | KEY_1 + | KEY_2 + | KEY_3 + | KEY_4 + | KEY_5 + | KEY_6 + | KEY_7 + | KEY_8 + | KEY_9 + | KEY_COLON + | KEY_LEFT_CHEVRON + | KEY_EQUAL + | KEY_ESZETT + | KEY_AT + | KEY_A + | KEY_B + | KEY_C + | KEY_D + | KEY_E + | KEY_F + | KEY_G + | KEY_H + | KEY_I + | KEY_J + | KEY_K + | KEY_L + | KEY_M + | KEY_N + | KEY_O + | KEY_P + | KEY_Q + | KEY_R + | KEY_S + | KEY_T + | KEY_U + | KEY_V + | KEY_W + | KEY_X + | KEY_Y + | KEY_Z + | KEY_CMD_LEFT + | KEY_CMD_RIGHT + | KEY_SLEEP + | KEY_NUMPAD_0 + | KEY_NUMPAD_1 + | KEY_NUMPAD_2 + | KEY_NUMPAD_3 + | KEY_NUMPAD_4 + | KEY_NUMPAD_5 + | KEY_NUMPAD_6 + | KEY_NUMPAD_7 + | KEY_NUMPAD_8 + | KEY_NUMPAD_9 + | KEY_MULTIPLY + | KEY_ADD + | KEY_NUMPAD_PERIOD + | KEY_SUBSTRACT + | KEY_DECIMAL_POINT + | KEY_DIVIDE + | KEY_F1 + | KEY_F2 + | KEY_F3 + | KEY_F4 + | KEY_F5 + | KEY_F6 + | KEY_F7 + | KEY_F8 + | KEY_F9 + | KEY_F10 + | KEY_F11 + | KEY_F12 + | KEY_F13 + | KEY_F14 + | KEY_F15 + | KEY_F16 + | KEY_F17 + | KEY_F18 + | KEY_F19 + | KEY_F20 + | KEY_F21 + | KEY_F22 + | KEY_F23 + | KEY_F24 + | KEY_F25 + | KEY_F26 + | KEY_F27 + | KEY_F28 + | KEY_F29 + | KEY_F30 + | KEY_F31 + | KEY_F32 + | KEY_NUM_LOCK + | KEY_SCROLL_LOCK + | KEY_AIRPLANE_MODE + | KEY_CIRCONFLEX + | KEY_EXCLAMATION_MARK + | KEY_ARABIC_SEMI_COLON + | KEY_NUMBER_SIGN + | KEY_DOLLAR + | KEY_U_GRAVE_ACCENT + | KEY_PAGE_BACKWARD + | KEY_PAGE_FORWARD + | KEY_REFRESH + | KEY_RIGHT_PAREN + | KEY_ASTERISK + | KEY_TILDE + | KEY_MUTE + | KEY_NEXT + | KEY_PREVIOUS + | KEY_STOP + | KEY_PLAY_PAUSE + | KEY_EMAIL + | KEY_MUTE_UNMUTE + | KEY_DECREASE_VOLUME + | KEY_INCREASE_VOLUME + | KEY_SEMI_COLON + | KEY_COMMA + | KEY_DASH + | KEY_PERIOD + | KEY_FORWARD_SLASH + | KEY_GRAVE_ACCENT + | KEY_QUESTION_MARK + | KEY_BRACKET_LEFT + | KEY_BACK_SLASH + | KEY_BRACKET_RIGHT + | KEY_SINGLE_QUOTE + | KEY_BACK_TICK + | KEY_CMD + | KEY_ALTGR + | KEY_LEFT_BACK_SLASH + | KEY_GNOME_COMPOSE + | KEY_C_CEDILLA + | KEY_XF86_FORWARD + | KEY_XF86_BACKWARD + | KEY_ALPHA_NUMERIC + | KEY_HIRAGANA_KATAKANA + | KEY_HALF_WIDTH_FULL_WIDTH + | KEY_KANJI + | KEY_UNLOCK_TRACK_PAD + | KEY_TOGGLE_TOUCH_PAD + +KEY_CODE_MAPPINGS = fromList([ + #[3, KEY_BREAK], + #[8, KEY_BACKSPACE], + #[9, KEY_TAB], + #[12, KEY_CLEAR], + #[13, KEY_ENTER], + #[16, KEY_SHIFT], + #[17, KEY_CTRL], + #[18, KEY_ALT], + #[19, KEY_PAUSE], + #[20, KEY_CAPS_LOCK], + #[21, KEY_HANGUL], + #[25, KEY_HANJA], + #[27, KEY_ESCAPE], + #[28, KEY_CONVERSION], + #[29, KEY_NON_CONVERSION], + #[32, KEY_SPACE], + #[33, KEY_PAGE_UP], + #[34, KEY_PAGE_DOWN], + #[35, KEY_END], + #[36, KEY_HOME], + #[37, KEY_LEFT_ARROW], + #[38, KEY_UP_ARROW], + #[39, KEY_RIGHT_ARROW], + #[40, KEY_DOWN_ARROW], + #[41, KEY_SELECT], + #[42, KEY_PRINT], + #[43, KEY_EXECUTE], + #[44, KEY_PRINT_SCREEN], + #[45, KEY_INSERT], + #[46, KEY_DELETE], + #[47, KEY_HELP], + #[48, KEY_0], + #[49, KEY_1], + #[50, KEY_2], + #[51, KEY_3], + #[52, KEY_4], + #[53, KEY_5], + #[54, KEY_6], + #[55, KEY_7], + #[56, KEY_8], + #[57, KEY_9], + #[58, KEY_COLON], + #[59, KEY_EQUAL], + #[60, KEY_LEFT_CHEVRON], + #[61, KEY_EQUAL], + #[63, KEY_ESZETT], + #[64, KEY_AT], + #[65, KEY_A], + #[66, KEY_B], + #[67, KEY_C], + #[68, KEY_D], + #[69, KEY_E], + #[70, KEY_F], + #[71, KEY_G], + #[72, KEY_H], + #[73, KEY_I], + #[74, KEY_J], + #[75, KEY_K], + #[76, KEY_L], + #[77, KEY_M], + #[78, KEY_N], + #[79, KEY_O], + #[80, KEY_P], + #[81, KEY_Q], + #[82, KEY_R], + #[83, KEY_S], + #[84, KEY_T], + #[85, KEY_U], + #[86, KEY_V], + #[87, KEY_W], + #[88, KEY_X], + #[89, KEY_Y], + #[90, KEY_Z], + #[91, KEY_CMD_LEFT], + #[92, KEY_CMD_RIGHT], + #[93, KEY_CMD_RIGHT], + #[95, KEY_SLEEP], + #[96, KEY_NUMPAD_0], + #[97, KEY_NUMPAD_1], + #[98, KEY_NUMPAD_2], + #[99, KEY_NUMPAD_3], + #[100, KEY_NUMPAD_4], + #[101, KEY_NUMPAD_5], + #[102, KEY_NUMPAD_6], + #[103, KEY_NUMPAD_7], + #[104, KEY_NUMPAD_8], + #[105, KEY_NUMPAD_9], + #[106, KEY_MULTIPLY], + #[107, KEY_ADD], + #[108, KEY_NUMPAD_PERIOD], + #[109, KEY_SUBSTRACT], + #[110, KEY_DECIMAL_POINT], + #[111, KEY_DIVIDE], + #[112, KEY_F1], + #[113, KEY_F2], + #[114, KEY_F3], + #[115, KEY_F4], + #[116, KEY_F5], + #[117, KEY_F6], + #[118, KEY_F7], + #[119, KEY_F8], + #[120, KEY_F9], + #[121, KEY_F10], + #[122, KEY_F11], + #[123, KEY_F12], + #[124, KEY_F13], + #[125, KEY_F14], + #[126, KEY_F15], + #[127, KEY_F16], + #[128, KEY_F17], + #[129, KEY_F18], + #[130, KEY_F19], + #[131, KEY_F20], + #[132, KEY_F21], + #[133, KEY_F22], + #[134, KEY_F23], + #[135, KEY_F24], + #[136, KEY_F25], + #[137, KEY_F26], + #[138, KEY_F27], + #[139, KEY_F28], + #[140, KEY_F29], + #[141, KEY_F30], + #[142, KEY_F31], + #[143, KEY_F32], + #[144, KEY_NUM_LOCK], + #[145, KEY_SCROLL_LOCK], + #[151, KEY_AIRPLANE_MODE], + #[160, KEY_CIRCONFLEX], + #[161, KEY_EXCLAMATION_MARK], + #[162, KEY_ARABIC_SEMI_COLON], + #[163, KEY_NUMBER_SIGN], + #[164, KEY_DOLLAR], + #[165, KEY_U_GRAVE_ACCENT], + #[166, KEY_PAGE_BACKWARD], + #[167, KEY_PAGE_FORWARD], + #[168, KEY_REFRESH], + #[169, KEY_RIGHT_PAREN], + #[170, KEY_ASTERISK], + #[171, KEY_TILDE], + #[172, KEY_HOME], + #[173, KEY_MUTE], + #[174, KEY_DECREASE_VOLUME], + #[175, KEY_INCREASE_VOLUME], + #[176, KEY_NEXT], + #[177, KEY_PREVIOUS], + #[178, KEY_STOP], + #[179, KEY_PLAY_PAUSE], + #[180, KEY_EMAIL], + #[181, KEY_MUTE_UNMUTE], + #[182, KEY_DECREASE_VOLUME], + #[183, KEY_INCREASE_VOLUME], + #[186, KEY_SEMI_COLON], + #[187, KEY_EQUAL], + #[188, KEY_COMMA], + #[189, KEY_DASH], + #[190, KEY_PERIOD], + #[191, KEY_FORWARD_SLASH], + #[192, KEY_GRAVE_ACCENT], + #[193, KEY_QUESTION_MARK], + #[194, KEY_NUMPAD_PERIOD], + #[219, KEY_BRACKET_LEFT], + #[220, KEY_BACK_SLASH], + #[221, KEY_BRACKET_RIGHT], + #[222, KEY_SINGLE_QUOTE], + #[223, KEY_BACK_TICK], + #[224, KEY_CMD], + #[225, KEY_ALTGR], + #[226, KEY_LEFT_BACK_SLASH], + #[230, KEY_GNOME_COMPOSE], + #[231, KEY_C_CEDILLA], + #[233, KEY_XF86_FORWARD], + #[234, KEY_XF86_BACKWARD], + #[235, KEY_NON_CONVERSION], + #[240, KEY_ALPHA_NUMERIC], + #[242, KEY_HIRAGANA_KATAKANA], + #[243, KEY_HALF_WIDTH_FULL_WIDTH], + #[244, KEY_KANJI], + #[251, KEY_UNLOCK_TRACK_PAD], + #[255, KEY_TOGGLE_TOUCH_PAD], +]) + +getKeyFromCode :: Integer -> Key +export getKeyFromCode = (keyCode) => fromMaybe(KEY_ANY, get(keyCode, KEY_CODE_MAPPINGS)) diff --git a/.github/workflows/madlib_modules/MadUI/src/Main.mad b/.github/workflows/madlib_modules/MadUI/src/Main.mad new file mode 100644 index 0000000..2cc1306 --- /dev/null +++ b/.github/workflows/madlib_modules/MadUI/src/Main.mad @@ -0,0 +1,1009 @@ +import type { Action, GlobalAction } from "@/Action" +import type { Attribute } from "@/Attribute" +import type { Config, RoutingKind } from "@/Config" +import type { Element } from "@/Element" +import type { Event } from "@/Event" +import type { Key } from "@/Key" +import type { Subscription } from "@/Subscription" + +import {} from "Number" + +import { + onAfterPrint, + onBeforePrint, + onBeforeUnload, + onDocumentLoad, + onOffline, + onOnline, + onPageHide, + onPageShow, + onResize, + onUnload, + onUrlChanged, + syncAction, + throttleAction, +} from "@/Action" +import { + accept, + acceptCharset, + accessKey, + action, + altAttribute, + async, + autocomplete, + autofocus, + autoplay, + checked, + citeAttr, + className, + cols, + colspan, + contenteditable, + controls, + coords, + dataAttr, + datetime, + default, + defer, + dir, + dirname, + disabled, + download, + draggable, + enctype, + for, + formAttr, + formaction, + headers, + height, + hidden, + high, + href, + hreflang, + id, + innerHTML, + innerText, + inputType, + ismap, + key, + kind, + labelAttr, + lang, + list, + loop, + low, + max, + maxlength, + media, + method, + min, + multiple, + muted, + name, + novalidate, + onAbort, + onBlur, + onCanPlay, + onCanPlayThrough, + onChange, + onClick, + onContextMenu, + onCopy, + onCueChange, + onCut, + onDblClick, + onDrag, + onDragEnd, + onDragEnter, + onDragLeave, + onDragOver, + onDragStart, + onDrop, + onDurationChange, + onEmptied, + onEnded, + onError, + onFocus, + onInput, + onInvalid, + onKeyDown, + onKeyPress, + onKeyUp, + onLoad, + onLoadStart, + onLoadedData, + onLoadedMetaData, + onMouseDown, + onMouseEnter, + onMouseLeave, + onMouseMove, + onMouseOut, + onMouseOver, + onMouseUp, + onMouseWheel, + onPaste, + onPause, + onPlay, + onPlaying, + onProgress, + onRateChange, + onReset, + onScroll, + onSearch, + onSeeked, + onSeeking, + onSelect, + onStalled, + onSubmit, + onSuspend, + onTimeUpdate, + onToggle, + onTransitionCancel, + onTransitionEnd, + onTransitionRun, + onTransitionStart, + onVolumeChange, + onWaiting, + onWheel, + open, + optimum, + pattern, + placeholder, + poster, + preload, + readonly, + rel, + required, + reversed, + rows, + rowspan, + sandbox, + scope, + selected, + shape, + size, + sizes, + spanAttr, + spellcheck, + src, + srcdoc, + srclang, + srcset, + start, + step, + stringAttribute, + style, + tabindex, + target, + titleAttr, + to, + translate, + usemap, + value, + width, + wrap, +} from "@/Attribute" +import { + BasicRouting, + DEFAULT_CONFIG, + HashRouting, + addGlobalEventHandler, + addSubscription, +} from "@/Config" +import { getPathName, getUrl, render, renderWithConfig } from "@/Core" +import { + a, + abbr, + address, + area, + article, + aside, + audio, + b, + bdi, + bdo, + blockquote, + br, + button, + canvas, + caption, + cite, + code, + col, + colgroup, + content, + data, + datalist, + dd, + del, + details, + dfn, + dialog, + div, + dl, + dt, + em, + embed, + empty, + fieldset, + figcaption, + figure, + footer, + forRoute, + form, + h1, + h2, + h3, + h4, + h5, + h6, + header, + hgroup, + hr, + i, + iframe, + img, + input, + ins, + kbd, + label, + legend, + li, + link, + main, + mapElement, + mark, + menu, + menuitem, + meta, + meter, + nav, + noscript, + object, + ol, + optgroup, + option, + output, + p, + param, + picture, + plaintext, + pre, + progress, + q, + rp, + rt, + rtc, + ruby, + s, + samp, + script, + section, + select, + shadow, + slot, + small, + source, + span, + strong, + sub, + summary, + sup, + switchRoute, + table, + tag, + tbody, + td, + template, + text, + textarea, + tfoot, + th, + thead, + time, + title, + tr, + track, + u, + ul, + var, + video, + wbr, +} from "@/Element" +import { AbstractEvent, InputEvent, KeyboardEvent, MouseEvent, PopStateEvent } from "@/Event" +import { + KEY_0, + KEY_1, + KEY_2, + KEY_3, + KEY_4, + KEY_5, + KEY_6, + KEY_7, + KEY_8, + KEY_9, + KEY_A, + KEY_ADD, + KEY_AIRPLANE_MODE, + KEY_ALPHA_NUMERIC, + KEY_ALT, + KEY_ALTGR, + KEY_ANY, + KEY_ARABIC_SEMI_COLON, + KEY_ASTERISK, + KEY_AT, + KEY_B, + KEY_BACKSPACE, + KEY_BACK_SLASH, + KEY_BACK_TICK, + KEY_BRACKET_LEFT, + KEY_BRACKET_RIGHT, + KEY_BREAK, + KEY_C, + KEY_CAPS_LOCK, + KEY_CIRCONFLEX, + KEY_CLEAR, + KEY_CMD, + KEY_CMD_LEFT, + KEY_CMD_RIGHT, + KEY_COLON, + KEY_COMMA, + KEY_CONVERSION, + KEY_CTRL, + KEY_C_CEDILLA, + KEY_D, + KEY_DASH, + KEY_DECIMAL_POINT, + KEY_DECREASE_VOLUME, + KEY_DELETE, + KEY_DIVIDE, + KEY_DOLLAR, + KEY_DOWN_ARROW, + KEY_E, + KEY_EMAIL, + KEY_END, + KEY_ENTER, + KEY_EQUAL, + KEY_ESCAPE, + KEY_ESZETT, + KEY_EXCLAMATION_MARK, + KEY_EXECUTE, + KEY_F, + KEY_F1, + KEY_F10, + KEY_F11, + KEY_F12, + KEY_F13, + KEY_F14, + KEY_F15, + KEY_F16, + KEY_F17, + KEY_F18, + KEY_F19, + KEY_F2, + KEY_F20, + KEY_F21, + KEY_F22, + KEY_F23, + KEY_F24, + KEY_F25, + KEY_F26, + KEY_F27, + KEY_F28, + KEY_F29, + KEY_F3, + KEY_F30, + KEY_F31, + KEY_F32, + KEY_F4, + KEY_F5, + KEY_F6, + KEY_F7, + KEY_F8, + KEY_F9, + KEY_FORWARD_SLASH, + KEY_G, + KEY_GNOME_COMPOSE, + KEY_GRAVE_ACCENT, + KEY_H, + KEY_HALF_WIDTH_FULL_WIDTH, + KEY_HANGUL, + KEY_HANJA, + KEY_HELP, + KEY_HIRAGANA_KATAKANA, + KEY_HOME, + KEY_I, + KEY_INCREASE_VOLUME, + KEY_INSERT, + KEY_J, + KEY_K, + KEY_KANJI, + KEY_L, + KEY_LEFT_ARROW, + KEY_LEFT_BACK_SLASH, + KEY_LEFT_CHEVRON, + KEY_M, + KEY_MULTIPLY, + KEY_MUTE, + KEY_MUTE_UNMUTE, + KEY_N, + KEY_NEXT, + KEY_NON_CONVERSION, + KEY_NUMBER_SIGN, + KEY_NUMPAD_0, + KEY_NUMPAD_1, + KEY_NUMPAD_2, + KEY_NUMPAD_3, + KEY_NUMPAD_4, + KEY_NUMPAD_5, + KEY_NUMPAD_6, + KEY_NUMPAD_7, + KEY_NUMPAD_8, + KEY_NUMPAD_9, + KEY_NUMPAD_PERIOD, + KEY_NUM_LOCK, + KEY_O, + KEY_P, + KEY_PAGE_BACKWARD, + KEY_PAGE_DOWN, + KEY_PAGE_FORWARD, + KEY_PAGE_UP, + KEY_PAUSE, + KEY_PERIOD, + KEY_PLAY_PAUSE, + KEY_PREVIOUS, + KEY_PRINT, + KEY_PRINT_SCREEN, + KEY_Q, + KEY_QUESTION_MARK, + KEY_R, + KEY_REFRESH, + KEY_RIGHT_ARROW, + KEY_RIGHT_PAREN, + KEY_S, + KEY_SCROLL_LOCK, + KEY_SELECT, + KEY_SEMI_COLON, + KEY_SHIFT, + KEY_SINGLE_QUOTE, + KEY_SLEEP, + KEY_SPACE, + KEY_STOP, + KEY_SUBSTRACT, + KEY_T, + KEY_TAB, + KEY_TILDE, + KEY_TOGGLE_TOUCH_PAD, + KEY_U, + KEY_UNLOCK_TRACK_PAD, + KEY_UP_ARROW, + KEY_U_GRAVE_ACCENT, + KEY_V, + KEY_W, + KEY_X, + KEY_XF86_BACKWARD, + KEY_XF86_FORWARD, + KEY_Y, + KEY_Z, +} from "@/Key" +import { every } from "@/Subscription" + + + +// Types + +export type Element +export type Config +export type RoutingKind +export type Attribute +export type Action +export type GlobalAction +export type Subscription +export type Event + + + +// Elements + +export tag +export a +export abbr +export address +export area +export article +export aside +export audio +export b +export bdi +export bdo +export blockquote +export br +export button +export canvas +export caption +export cite +export code +export col +export colgroup +export content +export data +export datalist +export dd +export del +export details +export dfn +export dialog +export div +export dl +export dt +export em +export embed +export fieldset +export figcaption +export figure +export footer +export form +export h1 +export h2 +export h3 +export h4 +export h5 +export h6 +export header +export hgroup +export hr +export i +export iframe +export img +export input +export ins +export kbd +export label +export legend +export li +export main +export mapElement +export mark +export menu +export menuitem +export meta +export meter +export nav +export noscript +export object +export ol +export optgroup +export option +export output +export p +export param +export picture +export plaintext +export pre +export progress +export q +export rp +export rt +export rtc +export ruby +export s +export samp +export script +export section +export select +export shadow +export slot +export small +export source +export span +export strong +export sub +export summary +export sup +export table +export tbody +export td +export template +export textarea +export tfoot +export th +export thead +export time +export title +export tr +export track +export u +export ul +export var +export video +export wbr +export empty +export link +export text +export forRoute +export switchRoute + + +// Attributes + +export stringAttribute +export accept +export acceptCharset +export accessKey +export action +export altAttribute +export async +export autocomplete +export autofocus +export autoplay +export checked +export citeAttr +export className +export cols +export colspan +export contenteditable +export controls +export coords +export dataAttr +export datetime +export default +export defer +export dir +export dirname +export disabled +export download +export draggable +export enctype +export for +export formAttr +export formaction +export headers +export height +export hidden +export high +export href +export hreflang +export id +export innerHTML +export innerText +export inputType +export ismap +export key +export kind +export labelAttr +export lang +export list +export loop +export low +export max +export maxlength +export media +export method +export min +export multiple +export muted +export name +export novalidate +export onAbort +export onBlur +export onCanPlay +export onCanPlayThrough +export onChange +export onClick +export onContextMenu +export onCopy +export onCueChange +export onCut +export onDblClick +export onDrag +export onDragEnd +export onDragEnter +export onDragLeave +export onDragOver +export onDragStart +export onDrop +export onDurationChange +export onEmptied +export onEnded +export onError +export onFocus +export onInput +export onInvalid +export onKeyPress +export onKeyDown +export onKeyUp +export onLoad +export onLoadedData +export onLoadedMetaData +export onLoadStart +export onMouseDown +export onMouseEnter +export onMouseLeave +export onMouseMove +export onMouseOut +export onMouseOver +export onMouseUp +export onMouseWheel +export onPaste +export onPause +export onPlay +export onPlaying +export onProgress +export onRateChange +export onReset +export onScroll +export onSearch +export onSeeked +export onSeeking +export onSelect +export onStalled +export onSubmit +export onSuspend +export onTimeUpdate +export onToggle +export onTransitionCancel +export onTransitionEnd +export onTransitionRun +export onTransitionStart +export onVolumeChange +export onWaiting +export onWheel +export open +export optimum +export pattern +export placeholder +export poster +export preload +export readonly +export rel +export required +export reversed +export rows +export rowspan +export sandbox +export scope +export selected +export shape +export size +export sizes +export spanAttr +export spellcheck +export src +export srcdoc +export srclang +export srcset +export start +export step +export style +export tabindex +export target +export titleAttr +export to +export translate +export usemap +export value +export width +export wrap + +// Actions + +export syncAction +export throttleAction +export onAfterPrint +export onBeforePrint +export onBeforeUnload +export onDocumentLoad +export onPageHide +export onPageShow +export onOffline +export onOnline +export onResize +export onUnload +export onUrlChanged +export getPathName +export getUrl + +// Config + +export DEFAULT_CONFIG +export HashRouting +export BasicRouting +export addGlobalEventHandler +export addSubscription + +// Events + +export AbstractEvent +export MouseEvent +export InputEvent +export KeyboardEvent +export PopStateEvent + + +// Core + +export render +export renderWithConfig + + +// Subscription + +export every + +// Keys + +export type Key + +export KEY_ANY +export KEY_BREAK +export KEY_BACKSPACE +export KEY_TAB +export KEY_CLEAR +export KEY_ENTER +export KEY_SHIFT +export KEY_CTRL +export KEY_ALT +export KEY_PAUSE +export KEY_CAPS_LOCK +export KEY_HANGUL +export KEY_HANJA +export KEY_ESCAPE +export KEY_CONVERSION +export KEY_NON_CONVERSION +export KEY_SPACE +export KEY_PAGE_UP +export KEY_PAGE_DOWN +export KEY_END +export KEY_HOME +export KEY_LEFT_ARROW +export KEY_UP_ARROW +export KEY_RIGHT_ARROW +export KEY_DOWN_ARROW +export KEY_SELECT +export KEY_PRINT +export KEY_EXECUTE +export KEY_PRINT_SCREEN +export KEY_INSERT +export KEY_DELETE +export KEY_HELP +export KEY_0 +export KEY_1 +export KEY_2 +export KEY_3 +export KEY_4 +export KEY_5 +export KEY_6 +export KEY_7 +export KEY_8 +export KEY_9 +export KEY_COLON +export KEY_LEFT_CHEVRON +export KEY_EQUAL +export KEY_ESZETT +export KEY_AT +export KEY_A +export KEY_B +export KEY_C +export KEY_D +export KEY_E +export KEY_F +export KEY_G +export KEY_H +export KEY_I +export KEY_J +export KEY_K +export KEY_L +export KEY_M +export KEY_N +export KEY_O +export KEY_P +export KEY_Q +export KEY_R +export KEY_S +export KEY_T +export KEY_U +export KEY_V +export KEY_W +export KEY_X +export KEY_Y +export KEY_Z +export KEY_CMD_LEFT +export KEY_CMD_RIGHT +export KEY_SLEEP +export KEY_NUMPAD_0 +export KEY_NUMPAD_1 +export KEY_NUMPAD_2 +export KEY_NUMPAD_3 +export KEY_NUMPAD_4 +export KEY_NUMPAD_5 +export KEY_NUMPAD_6 +export KEY_NUMPAD_7 +export KEY_NUMPAD_8 +export KEY_NUMPAD_9 +export KEY_MULTIPLY +export KEY_ADD +export KEY_NUMPAD_PERIOD +export KEY_SUBSTRACT +export KEY_DECIMAL_POINT +export KEY_DIVIDE +export KEY_F1 +export KEY_F2 +export KEY_F3 +export KEY_F4 +export KEY_F5 +export KEY_F6 +export KEY_F7 +export KEY_F8 +export KEY_F9 +export KEY_F10 +export KEY_F11 +export KEY_F12 +export KEY_F13 +export KEY_F14 +export KEY_F15 +export KEY_F16 +export KEY_F17 +export KEY_F18 +export KEY_F19 +export KEY_F20 +export KEY_F21 +export KEY_F22 +export KEY_F23 +export KEY_F24 +export KEY_F25 +export KEY_F26 +export KEY_F27 +export KEY_F28 +export KEY_F29 +export KEY_F30 +export KEY_F31 +export KEY_F32 +export KEY_NUM_LOCK +export KEY_SCROLL_LOCK +export KEY_AIRPLANE_MODE +export KEY_CIRCONFLEX +export KEY_EXCLAMATION_MARK +export KEY_ARABIC_SEMI_COLON +export KEY_NUMBER_SIGN +export KEY_DOLLAR +export KEY_U_GRAVE_ACCENT +export KEY_PAGE_BACKWARD +export KEY_PAGE_FORWARD +export KEY_REFRESH +export KEY_RIGHT_PAREN +export KEY_ASTERISK +export KEY_TILDE +export KEY_MUTE +export KEY_NEXT +export KEY_PREVIOUS +export KEY_STOP +export KEY_PLAY_PAUSE +export KEY_EMAIL +export KEY_MUTE_UNMUTE +export KEY_DECREASE_VOLUME +export KEY_INCREASE_VOLUME +export KEY_SEMI_COLON +export KEY_COMMA +export KEY_DASH +export KEY_PERIOD +export KEY_FORWARD_SLASH +export KEY_GRAVE_ACCENT +export KEY_QUESTION_MARK +export KEY_BRACKET_LEFT +export KEY_BACK_SLASH +export KEY_BRACKET_RIGHT +export KEY_SINGLE_QUOTE +export KEY_BACK_TICK +export KEY_CMD +export KEY_ALTGR +export KEY_LEFT_BACK_SLASH +export KEY_GNOME_COMPOSE +export KEY_C_CEDILLA +export KEY_XF86_FORWARD +export KEY_XF86_BACKWARD +export KEY_ALPHA_NUMERIC +export KEY_HIRAGANA_KATAKANA +export KEY_HALF_WIDTH_FULL_WIDTH +export KEY_KANJI +export KEY_UNLOCK_TRACK_PAD +export KEY_TOGGLE_TOUCH_PAD diff --git a/.github/workflows/madlib_modules/MadUI/src/Subscription.mad b/.github/workflows/madlib_modules/MadUI/src/Subscription.mad new file mode 100644 index 0000000..e649f10 --- /dev/null +++ b/.github/workflows/madlib_modules/MadUI/src/Subscription.mad @@ -0,0 +1,6 @@ +export alias Subscription a = ((a -> a) -> {}) -> {} + +every :: Integer -> (a -> a) -> Subscription a +export every = (ms, fn, dispatch) => #-{ + setInterval(() => { dispatch(fn) }, ms); +}-# diff --git a/.github/workflows/madlib_modules/MadUI/version.lock b/.github/workflows/madlib_modules/MadUI/version.lock new file mode 100644 index 0000000..16e49bb --- /dev/null +++ b/.github/workflows/madlib_modules/MadUI/version.lock @@ -0,0 +1,956 @@ +{ + "llvmApi": { + "apiAliases": {}, + "apiInstances": [], + "apiInterfaces": {}, + "apiNames": { + "AbstractEvent": "{ bubbles :: Boolean, defaultPrevented :: Boolean, eventType :: String, preventDefault :: {} -> {}, stopImmediatePropagation :: {} -> {}, stopPropagation :: {} -> {}, timeStamp :: Integer } -> Event", + "DEFAULT_CONFIG": "{ globalEventHandlers :: List (GlobalAction a), subscriptions :: List (((a -> a) -> {}) -> {}) }", + "InputEvent": "{ bubbles :: Boolean, data :: String, defaultPrevented :: Boolean, eventType :: String, inputType :: String, preventDefault :: {} -> {}, stopImmediatePropagation :: {} -> {}, stopPropagation :: {} -> {}, target :: { value :: String }, timeStamp :: Integer } -> Event", + "KEY_0": "Key", + "KEY_1": "Key", + "KEY_2": "Key", + "KEY_3": "Key", + "KEY_4": "Key", + "KEY_5": "Key", + "KEY_6": "Key", + "KEY_7": "Key", + "KEY_8": "Key", + "KEY_9": "Key", + "KEY_A": "Key", + "KEY_ADD": "Key", + "KEY_AIRPLANE_MODE": "Key", + "KEY_ALPHA_NUMERIC": "Key", + "KEY_ALT": "Key", + "KEY_ALTGR": "Key", + "KEY_ANY": "Key", + "KEY_ARABIC_SEMI_COLON": "Key", + "KEY_ASTERISK": "Key", + "KEY_AT": "Key", + "KEY_B": "Key", + "KEY_BACKSPACE": "Key", + "KEY_BACK_SLASH": "Key", + "KEY_BACK_TICK": "Key", + "KEY_BRACKET_LEFT": "Key", + "KEY_BRACKET_RIGHT": "Key", + "KEY_BREAK": "Key", + "KEY_C": "Key", + "KEY_CAPS_LOCK": "Key", + "KEY_CIRCONFLEX": "Key", + "KEY_CLEAR": "Key", + "KEY_CMD": "Key", + "KEY_CMD_LEFT": "Key", + "KEY_CMD_RIGHT": "Key", + "KEY_COLON": "Key", + "KEY_COMMA": "Key", + "KEY_CONVERSION": "Key", + "KEY_CTRL": "Key", + "KEY_C_CEDILLA": "Key", + "KEY_D": "Key", + "KEY_DASH": "Key", + "KEY_DECIMAL_POINT": "Key", + "KEY_DECREASE_VOLUME": "Key", + "KEY_DELETE": "Key", + "KEY_DIVIDE": "Key", + "KEY_DOLLAR": "Key", + "KEY_DOWN_ARROW": "Key", + "KEY_E": "Key", + "KEY_EMAIL": "Key", + "KEY_END": "Key", + "KEY_ENTER": "Key", + "KEY_EQUAL": "Key", + "KEY_ESCAPE": "Key", + "KEY_ESZETT": "Key", + "KEY_EXCLAMATION_MARK": "Key", + "KEY_EXECUTE": "Key", + "KEY_F": "Key", + "KEY_F1": "Key", + "KEY_F10": "Key", + "KEY_F11": "Key", + "KEY_F12": "Key", + "KEY_F13": "Key", + "KEY_F14": "Key", + "KEY_F15": "Key", + "KEY_F16": "Key", + "KEY_F17": "Key", + "KEY_F18": "Key", + "KEY_F19": "Key", + "KEY_F2": "Key", + "KEY_F20": "Key", + "KEY_F21": "Key", + "KEY_F22": "Key", + "KEY_F23": "Key", + "KEY_F24": "Key", + "KEY_F25": "Key", + "KEY_F26": "Key", + "KEY_F27": "Key", + "KEY_F28": "Key", + "KEY_F29": "Key", + "KEY_F3": "Key", + "KEY_F30": "Key", + "KEY_F31": "Key", + "KEY_F32": "Key", + "KEY_F4": "Key", + "KEY_F5": "Key", + "KEY_F6": "Key", + "KEY_F7": "Key", + "KEY_F8": "Key", + "KEY_F9": "Key", + "KEY_FORWARD_SLASH": "Key", + "KEY_G": "Key", + "KEY_GNOME_COMPOSE": "Key", + "KEY_GRAVE_ACCENT": "Key", + "KEY_H": "Key", + "KEY_HALF_WIDTH_FULL_WIDTH": "Key", + "KEY_HANGUL": "Key", + "KEY_HANJA": "Key", + "KEY_HELP": "Key", + "KEY_HIRAGANA_KATAKANA": "Key", + "KEY_HOME": "Key", + "KEY_I": "Key", + "KEY_INCREASE_VOLUME": "Key", + "KEY_INSERT": "Key", + "KEY_J": "Key", + "KEY_K": "Key", + "KEY_KANJI": "Key", + "KEY_L": "Key", + "KEY_LEFT_ARROW": "Key", + "KEY_LEFT_BACK_SLASH": "Key", + "KEY_LEFT_CHEVRON": "Key", + "KEY_M": "Key", + "KEY_MULTIPLY": "Key", + "KEY_MUTE": "Key", + "KEY_MUTE_UNMUTE": "Key", + "KEY_N": "Key", + "KEY_NEXT": "Key", + "KEY_NON_CONVERSION": "Key", + "KEY_NUMBER_SIGN": "Key", + "KEY_NUMPAD_0": "Key", + "KEY_NUMPAD_1": "Key", + "KEY_NUMPAD_2": "Key", + "KEY_NUMPAD_3": "Key", + "KEY_NUMPAD_4": "Key", + "KEY_NUMPAD_5": "Key", + "KEY_NUMPAD_6": "Key", + "KEY_NUMPAD_7": "Key", + "KEY_NUMPAD_8": "Key", + "KEY_NUMPAD_9": "Key", + "KEY_NUMPAD_PERIOD": "Key", + "KEY_NUM_LOCK": "Key", + "KEY_O": "Key", + "KEY_P": "Key", + "KEY_PAGE_BACKWARD": "Key", + "KEY_PAGE_DOWN": "Key", + "KEY_PAGE_FORWARD": "Key", + "KEY_PAGE_UP": "Key", + "KEY_PAUSE": "Key", + "KEY_PERIOD": "Key", + "KEY_PLAY_PAUSE": "Key", + "KEY_PREVIOUS": "Key", + "KEY_PRINT": "Key", + "KEY_PRINT_SCREEN": "Key", + "KEY_Q": "Key", + "KEY_QUESTION_MARK": "Key", + "KEY_R": "Key", + "KEY_REFRESH": "Key", + "KEY_RIGHT_ARROW": "Key", + "KEY_RIGHT_PAREN": "Key", + "KEY_S": "Key", + "KEY_SCROLL_LOCK": "Key", + "KEY_SELECT": "Key", + "KEY_SEMI_COLON": "Key", + "KEY_SHIFT": "Key", + "KEY_SINGLE_QUOTE": "Key", + "KEY_SLEEP": "Key", + "KEY_SPACE": "Key", + "KEY_STOP": "Key", + "KEY_SUBSTRACT": "Key", + "KEY_T": "Key", + "KEY_TAB": "Key", + "KEY_TILDE": "Key", + "KEY_TOGGLE_TOUCH_PAD": "Key", + "KEY_U": "Key", + "KEY_UNLOCK_TRACK_PAD": "Key", + "KEY_UP_ARROW": "Key", + "KEY_U_GRAVE_ACCENT": "Key", + "KEY_V": "Key", + "KEY_W": "Key", + "KEY_X": "Key", + "KEY_XF86_BACKWARD": "Key", + "KEY_XF86_FORWARD": "Key", + "KEY_Y": "Key", + "KEY_Z": "Key", + "KeyboardEvent": "{ altKey :: Boolean, bubbles :: Boolean, ctrlKey :: Boolean, defaultPrevented :: Boolean, eventType :: String, key :: Key, preventDefault :: {} -> {}, shiftKey :: Boolean, stopImmediatePropagation :: {} -> {}, stopPropagation :: {} -> {}, timeStamp :: Integer } -> Event", + "MouseEvent": "{ bubbles :: Boolean, defaultPrevented :: Boolean, eventType :: String, preventDefault :: {} -> {}, stopImmediatePropagation :: {} -> {}, stopPropagation :: {} -> {}, timeStamp :: Integer } -> Event", + "PopStateEvent": "{ bubbles :: Boolean, defaultPrevented :: Boolean, eventType :: String, preventDefault :: {} -> {}, stopImmediatePropagation :: {} -> {}, stopPropagation :: {} -> {}, timeStamp :: Integer, url :: String } -> Event", + "a": "List (Attribute a) -> List (Element a) -> Element a", + "abbr": "List (Attribute a) -> List (Element a) -> Element a", + "accept": "String -> Attribute a", + "acceptCharset": "String -> Attribute a", + "accessKey": "String -> Attribute a", + "action": "String -> Attribute a", + "addGlobalEventHandler": "GlobalAction a -> { globalEventHandlers :: List (GlobalAction a), subscriptions :: List (((a -> a) -> {}) -> {}) } -> { globalEventHandlers :: List (GlobalAction a), subscriptions :: List (((a -> a) -> {}) -> {}) }", + "addSubscription": "(((a -> a) -> {}) -> {}) -> { globalEventHandlers :: List (GlobalAction a), subscriptions :: List (((a -> a) -> {}) -> {}) } -> { globalEventHandlers :: List (GlobalAction a), subscriptions :: List (((a -> a) -> {}) -> {}) }", + "address": "List (Attribute a) -> List (Element a) -> Element a", + "alt": "String -> Attribute a", + "area": "List (Attribute a) -> List (Element a) -> Element a", + "article": "List (Attribute a) -> List (Element a) -> Element a", + "aside": "List (Attribute a) -> List (Element a) -> Element a", + "async": "Boolean -> Attribute a", + "audio": "List (Attribute a) -> List (Element a) -> Element a", + "autocomplete": "Boolean -> Attribute a", + "autofocus": "Boolean -> Attribute a", + "autoplay": "Boolean -> Attribute a", + "b": "List (Attribute a) -> List (Element a) -> Element a", + "bdi": "List (Attribute a) -> List (Element a) -> Element a", + "bdo": "List (Attribute a) -> List (Element a) -> Element a", + "blockquote": "List (Attribute a) -> List (Element a) -> Element a", + "br": "List (Attribute a) -> List (Element a) -> Element a", + "button": "List (Attribute a) -> List (Element a) -> Element a", + "canvas": "List (Attribute a) -> List (Element a) -> Element a", + "caption": "List (Attribute a) -> List (Element a) -> Element a", + "checked": "Boolean -> Attribute a", + "cite": "List (Attribute a) -> List (Element a) -> Element a", + "citeAttr": "String -> Attribute a", + "className": "String -> Attribute a", + "code": "List (Attribute a) -> List (Element a) -> Element a", + "col": "List (Attribute a) -> List (Element a) -> Element a", + "colgroup": "List (Attribute a) -> List (Element a) -> Element a", + "cols": "Integer -> Attribute a", + "colspan": "Integer -> Attribute a", + "content": "List (Attribute a) -> List (Element a) -> Element a", + "contenteditable": "Boolean -> Attribute a", + "controls": "Boolean -> Attribute a", + "coords": "String -> Attribute a", + "data": "List (Attribute a) -> List (Element a) -> Element a", + "dataAttr": "String -> Attribute a", + "datalist": "List (Attribute a) -> List (Element a) -> Element a", + "datetime": "String -> Attribute a", + "dd": "List (Attribute a) -> List (Element a) -> Element a", + "default": "Boolean -> Attribute a", + "defer": "Boolean -> Attribute a", + "del": "List (Attribute a) -> List (Element a) -> Element a", + "details": "List (Attribute a) -> List (Element a) -> Element a", + "dfn": "List (Attribute a) -> List (Element a) -> Element a", + "dialog": "List (Attribute a) -> List (Element a) -> Element a", + "dir": "String -> Attribute a", + "dirname": "String -> Attribute a", + "disabled": "Boolean -> Attribute a", + "div": "List (Attribute a) -> List (Element a) -> Element a", + "dl": "List (Attribute a) -> List (Element a) -> Element a", + "download": "Boolean -> Attribute a", + "draggable": "Boolean -> Attribute a", + "dt": "List (Attribute a) -> List (Element a) -> Element a", + "em": "List (Attribute a) -> List (Element a) -> Element a", + "embed": "List (Attribute a) -> List (Element a) -> Element a", + "empty": "List (Attribute a) -> List (Element a) -> Element a", + "enctype": "String -> Attribute a", + "every": "Integer -> (a -> a) -> ((a -> a) -> {}) -> {}", + "fieldset": "List (Attribute a) -> List (Element a) -> Element a", + "figcaption": "List (Attribute a) -> List (Element a) -> Element a", + "figure": "List (Attribute a) -> List (Element a) -> Element a", + "footer": "List (Attribute a) -> List (Element a) -> Element a", + "for": "String -> Attribute a", + "form": "List (Attribute a) -> List (Element a) -> Element a", + "formAttr": "String -> Attribute a", + "formaction": "String -> Attribute a", + "getUrl": "{} -> String", + "h1": "List (Attribute a) -> List (Element a) -> Element a", + "h2": "List (Attribute a) -> List (Element a) -> Element a", + "h3": "List (Attribute a) -> List (Element a) -> Element a", + "h4": "List (Attribute a) -> List (Element a) -> Element a", + "h5": "List (Attribute a) -> List (Element a) -> Element a", + "h6": "List (Attribute a) -> List (Element a) -> Element a", + "header": "List (Attribute a) -> List (Element a) -> Element a", + "headers": "String -> Attribute a", + "height": "Integer -> Attribute a", + "hgroup": "List (Attribute a) -> List (Element a) -> Element a", + "hidden": "Boolean -> Attribute a", + "high": "Integer -> Attribute a", + "hr": "List (Attribute a) -> List (Element a) -> Element a", + "href": "String -> Attribute a", + "hreflang": "String -> Attribute a", + "i": "List (Attribute a) -> List (Element a) -> Element a", + "id": "String -> Attribute a", + "iframe": "List (Attribute a) -> List (Element a) -> Element a", + "img": "List (Attribute a) -> List (Element a) -> Element a", + "input": "List (Attribute a) -> List (Element a) -> Element a", + "inputType": "String -> Attribute a", + "ins": "List (Attribute a) -> List (Element a) -> Element a", + "ismap": "Boolean -> Attribute a", + "kbd": "List (Attribute a) -> List (Element a) -> Element a", + "key": "String -> Attribute a", + "kind": "String -> Attribute a", + "label": "List (Attribute a) -> List (Element a) -> Element a", + "labelAttr": "String -> Attribute a", + "lang": "String -> Attribute a", + "legend": "List (Attribute a) -> List (Element a) -> Element a", + "li": "List (Attribute a) -> List (Element a) -> Element a", + "link": "List (Attribute a) -> List (Element a) -> Element a", + "list": "String -> Attribute a", + "loop": "Boolean -> Attribute a", + "low": "Integer -> Attribute a", + "main": "List (Attribute a) -> List (Element a) -> Element a", + "mapElement": "List (Attribute a) -> List (Element a) -> Element a", + "mark": "List (Attribute a) -> List (Element a) -> Element a", + "max": "Integer -> Attribute a", + "maxlength": "Integer -> Attribute a", + "media": "String -> Attribute a", + "menu": "List (Attribute a) -> List (Element a) -> Element a", + "menuitem": "List (Attribute a) -> List (Element a) -> Element a", + "meta": "List (Attribute a) -> List (Element a) -> Element a", + "meter": "List (Attribute a) -> List (Element a) -> Element a", + "method": "Method -> Attribute a", + "min": "Integer -> Attribute a", + "multiple": "Boolean -> Attribute a", + "muted": "Boolean -> Attribute a", + "name": "String -> Attribute a", + "nav": "List (Attribute a) -> List (Element a) -> Element a", + "noscript": "List (Attribute a) -> List (Element a) -> Element a", + "novalidate": "Boolean -> Attribute a", + "object": "List (Attribute a) -> List (Element a) -> Element a", + "ol": "List (Attribute a) -> List (Element a) -> Element a", + "onAbort": "(a -> Event -> List (Wish (a -> a) (a -> a))) -> Attribute a", + "onAfterPrint": "(a -> Event -> List (Wish (a -> a) (a -> a))) -> GlobalAction a", + "onBeforePrint": "(a -> Event -> List (Wish (a -> a) (a -> a))) -> GlobalAction a", + "onBeforeUnload": "(a -> Event -> List (Wish (a -> a) (a -> a))) -> GlobalAction a", + "onBlur": "(a -> Event -> List (Wish (a -> a) (a -> a))) -> Attribute a", + "onCanPlay": "(a -> Event -> List (Wish (a -> a) (a -> a))) -> Attribute a", + "onCanPlayThrough": "(a -> Event -> List (Wish (a -> a) (a -> a))) -> Attribute a", + "onChange": "(a -> Event -> List (Wish (a -> a) (a -> a))) -> Attribute a", + "onClick": "(a -> Event -> List (Wish (a -> a) (a -> a))) -> Attribute a", + "onContextMenu": "(a -> Event -> List (Wish (a -> a) (a -> a))) -> Attribute a", + "onCopy": "(a -> Event -> List (Wish (a -> a) (a -> a))) -> Attribute a", + "onCueChange": "(a -> Event -> List (Wish (a -> a) (a -> a))) -> Attribute a", + "onCut": "(a -> Event -> List (Wish (a -> a) (a -> a))) -> Attribute a", + "onDblClick": "(a -> Event -> List (Wish (a -> a) (a -> a))) -> Attribute a", + "onDocumentLoad": "(a -> Event -> List (Wish (a -> a) (a -> a))) -> GlobalAction a", + "onDrag": "(a -> Event -> List (Wish (a -> a) (a -> a))) -> Attribute a", + "onDragEnd": "(a -> Event -> List (Wish (a -> a) (a -> a))) -> Attribute a", + "onDragEnter": "(a -> Event -> List (Wish (a -> a) (a -> a))) -> Attribute a", + "onDragLeave": "(a -> Event -> List (Wish (a -> a) (a -> a))) -> Attribute a", + "onDragOver": "(a -> Event -> List (Wish (a -> a) (a -> a))) -> Attribute a", + "onDragStart": "(a -> Event -> List (Wish (a -> a) (a -> a))) -> Attribute a", + "onDrop": "(a -> Event -> List (Wish (a -> a) (a -> a))) -> Attribute a", + "onDurationChange": "(a -> Event -> List (Wish (a -> a) (a -> a))) -> Attribute a", + "onEmptied": "(a -> Event -> List (Wish (a -> a) (a -> a))) -> Attribute a", + "onEnded": "(a -> Event -> List (Wish (a -> a) (a -> a))) -> Attribute a", + "onError": "(a -> Event -> List (Wish (a -> a) (a -> a))) -> Attribute a", + "onFocus": "(a -> Event -> List (Wish (a -> a) (a -> a))) -> Attribute a", + "onInput": "(a -> Event -> List (Wish (a -> a) (a -> a))) -> Attribute a", + "onInvalid": "(a -> Event -> List (Wish (a -> a) (a -> a))) -> Attribute a", + "onKeyDown": "(a -> Event -> List (Wish (a -> a) (a -> a))) -> Attribute a", + "onKeyPress": "(a -> Event -> List (Wish (a -> a) (a -> a))) -> Attribute a", + "onKeyUp": "(a -> Event -> List (Wish (a -> a) (a -> a))) -> Attribute a", + "onLoad": "(a -> Event -> List (Wish (a -> a) (a -> a))) -> Attribute a", + "onLoadStart": "(a -> Event -> List (Wish (a -> a) (a -> a))) -> Attribute a", + "onLoadedData": "(a -> Event -> List (Wish (a -> a) (a -> a))) -> Attribute a", + "onLoadedMetaData": "(a -> Event -> List (Wish (a -> a) (a -> a))) -> Attribute a", + "onMouseDown": "(a -> Event -> List (Wish (a -> a) (a -> a))) -> Attribute a", + "onMouseEnter": "(a -> Event -> List (Wish (a -> a) (a -> a))) -> Attribute a", + "onMouseLeave": "(a -> Event -> List (Wish (a -> a) (a -> a))) -> Attribute a", + "onMouseMove": "(a -> Event -> List (Wish (a -> a) (a -> a))) -> Attribute a", + "onMouseOut": "(a -> Event -> List (Wish (a -> a) (a -> a))) -> Attribute a", + "onMouseOver": "(a -> Event -> List (Wish (a -> a) (a -> a))) -> Attribute a", + "onMouseUp": "(a -> Event -> List (Wish (a -> a) (a -> a))) -> Attribute a", + "onMouseWheel": "(a -> Event -> List (Wish (a -> a) (a -> a))) -> Attribute a", + "onOffline": "(a -> Event -> List (Wish (a -> a) (a -> a))) -> GlobalAction a", + "onOnline": "(a -> Event -> List (Wish (a -> a) (a -> a))) -> GlobalAction a", + "onPageHide": "(a -> Event -> List (Wish (a -> a) (a -> a))) -> GlobalAction a", + "onPageShow": "(a -> Event -> List (Wish (a -> a) (a -> a))) -> GlobalAction a", + "onPaste": "(a -> Event -> List (Wish (a -> a) (a -> a))) -> Attribute a", + "onPause": "(a -> Event -> List (Wish (a -> a) (a -> a))) -> Attribute a", + "onPlay": "(a -> Event -> List (Wish (a -> a) (a -> a))) -> Attribute a", + "onPlaying": "(a -> Event -> List (Wish (a -> a) (a -> a))) -> Attribute a", + "onProgress": "(a -> Event -> List (Wish (a -> a) (a -> a))) -> Attribute a", + "onRateChange": "(a -> Event -> List (Wish (a -> a) (a -> a))) -> Attribute a", + "onReset": "(a -> Event -> List (Wish (a -> a) (a -> a))) -> Attribute a", + "onResize": "(a -> Event -> List (Wish (a -> a) (a -> a))) -> GlobalAction a", + "onScroll": "(a -> Event -> List (Wish (a -> a) (a -> a))) -> Attribute a", + "onSearch": "(a -> Event -> List (Wish (a -> a) (a -> a))) -> Attribute a", + "onSeeked": "(a -> Event -> List (Wish (a -> a) (a -> a))) -> Attribute a", + "onSeeking": "(a -> Event -> List (Wish (a -> a) (a -> a))) -> Attribute a", + "onSelect": "(a -> Event -> List (Wish (a -> a) (a -> a))) -> Attribute a", + "onStalled": "(a -> Event -> List (Wish (a -> a) (a -> a))) -> Attribute a", + "onSubmit": "(a -> Event -> List (Wish (a -> a) (a -> a))) -> Attribute a", + "onSuspend": "(a -> Event -> List (Wish (a -> a) (a -> a))) -> Attribute a", + "onTimeUpdate": "(a -> Event -> List (Wish (a -> a) (a -> a))) -> Attribute a", + "onToggle": "(a -> Event -> List (Wish (a -> a) (a -> a))) -> Attribute a", + "onTransitionCancel": "(a -> Event -> List (Wish (a -> a) (a -> a))) -> Attribute a", + "onTransitionEnd": "(a -> Event -> List (Wish (a -> a) (a -> a))) -> Attribute a", + "onTransitionRun": "(a -> Event -> List (Wish (a -> a) (a -> a))) -> Attribute a", + "onTransitionStart": "(a -> Event -> List (Wish (a -> a) (a -> a))) -> Attribute a", + "onUnload": "(a -> Event -> List (Wish (a -> a) (a -> a))) -> GlobalAction a", + "onUrlChanged": "(a -> Event -> List (Wish (a -> a) (a -> a))) -> GlobalAction a", + "onVolumeChange": "(a -> Event -> List (Wish (a -> a) (a -> a))) -> Attribute a", + "onWaiting": "(a -> Event -> List (Wish (a -> a) (a -> a))) -> Attribute a", + "onWheel": "(a -> Event -> List (Wish (a -> a) (a -> a))) -> Attribute a", + "open": "Boolean -> Attribute a", + "optgroup": "List (Attribute a) -> List (Element a) -> Element a", + "optimum": "Integer -> Attribute a", + "option": "List (Attribute a) -> List (Element a) -> Element a", + "output": "List (Attribute a) -> List (Element a) -> Element a", + "p": "List (Attribute a) -> List (Element a) -> Element a", + "param": "List (Attribute a) -> List (Element a) -> Element a", + "pattern": "String -> Attribute a", + "picture": "List (Attribute a) -> List (Element a) -> Element a", + "placeholder": "String -> Attribute a", + "plaintext": "List (Attribute a) -> List (Element a) -> Element a", + "poster": "String -> Attribute a", + "pre": "List (Attribute a) -> List (Element a) -> Element a", + "preload": "String -> Attribute a", + "progress": "List (Attribute a) -> List (Element a) -> Element a", + "q": "List (Attribute a) -> List (Element a) -> Element a", + "readonly": "Boolean -> Attribute a", + "rel": "String -> Attribute a", + "render": "(a -> Element a) -> a -> String -> {}", + "renderWithConfig": "{ globalEventHandlers :: List (GlobalAction a), subscriptions :: List (((a -> a) -> {}) -> {}) } -> (a -> Element a) -> a -> String -> {}", + "required": "Boolean -> Attribute a", + "reversed": "Boolean -> Attribute a", + "rows": "Integer -> Attribute a", + "rowspan": "Integer -> Attribute a", + "rp": "List (Attribute a) -> List (Element a) -> Element a", + "rt": "List (Attribute a) -> List (Element a) -> Element a", + "rtc": "List (Attribute a) -> List (Element a) -> Element a", + "ruby": "List (Attribute a) -> List (Element a) -> Element a", + "s": "List (Attribute a) -> List (Element a) -> Element a", + "samp": "List (Attribute a) -> List (Element a) -> Element a", + "sandbox": "Boolean -> Attribute a", + "scope": "String -> Attribute a", + "script": "List (Attribute a) -> List (Element a) -> Element a", + "section": "List (Attribute a) -> List (Element a) -> Element a", + "select": "List (Attribute a) -> List (Element a) -> Element a", + "selected": "Boolean -> Attribute a", + "shadow": "List (Attribute a) -> List (Element a) -> Element a", + "shape": "String -> Attribute a", + "size": "Integer -> Attribute a", + "sizes": "String -> Attribute a", + "slot": "List (Attribute a) -> List (Element a) -> Element a", + "small": "List (Attribute a) -> List (Element a) -> Element a", + "source": "List (Attribute a) -> List (Element a) -> Element a", + "span": "List (Attribute a) -> List (Element a) -> Element a", + "spanAttr": "Integer -> Attribute a", + "spellcheck": "Boolean -> Attribute a", + "src": "String -> Attribute a", + "srcdoc": "String -> Attribute a", + "srclang": "String -> Attribute a", + "srcset": "String -> Attribute a", + "start": "Integer -> Attribute a", + "step": "Integer -> Attribute a", + "stringAttribute": "#[String, String] -> Attribute a", + "strong": "List (Attribute a) -> List (Element a) -> Element a", + "style": "Dictionary String String -> Attribute a", + "sub": "List (Attribute a) -> List (Element a) -> Element a", + "summary": "List (Attribute a) -> List (Element a) -> Element a", + "sup": "List (Attribute a) -> List (Element a) -> Element a", + "syncAction": "(a -> Event -> a) -> a -> Event -> List (Wish (a -> a) (a -> a))", + "tabindex": "Integer -> Attribute a", + "table": "List (Attribute a) -> List (Element a) -> Element a", + "tag": "String -> List (Attribute a) -> List (Element a) -> Element a", + "target": "String -> Attribute a", + "tbody": "List (Attribute a) -> List (Element a) -> Element a", + "td": "List (Attribute a) -> List (Element a) -> Element a", + "template": "List (Attribute a) -> List (Element a) -> Element a", + "text": "String -> Element a", + "textarea": "List (Attribute a) -> List (Element a) -> Element a", + "tfoot": "List (Attribute a) -> List (Element a) -> Element a", + "th": "List (Attribute a) -> List (Element a) -> Element a", + "thead": "List (Attribute a) -> List (Element a) -> Element a", + "time": "List (Attribute a) -> List (Element a) -> Element a", + "title": "List (Attribute a) -> List (Element a) -> Element a", + "titleAttr": "String -> Attribute a", + "to": "String -> Attribute a", + "tr": "List (Attribute a) -> List (Element a) -> Element a", + "track": "List (Attribute a) -> List (Element a) -> Element a", + "translate": "Boolean -> Attribute a", + "u": "List (Attribute a) -> List (Element a) -> Element a", + "ul": "List (Attribute a) -> List (Element a) -> Element a", + "usemap": "String -> Attribute a", + "value": "String -> Attribute a", + "var": "List (Attribute a) -> List (Element a) -> Element a", + "video": "List (Attribute a) -> List (Element a) -> Element a", + "wbr": "List (Attribute a) -> List (Element a) -> Element a", + "width": "Integer -> Attribute a", + "wrap": "String -> Attribute a" + }, + "apiTypes": {} + }, + "jsApi": { + "apiAliases": {}, + "apiInstances": [], + "apiInterfaces": {}, + "apiNames": { + "AbstractEvent": "{ bubbles :: Boolean, defaultPrevented :: Boolean, eventType :: String, preventDefault :: {} -> {}, stopImmediatePropagation :: {} -> {}, stopPropagation :: {} -> {}, timeStamp :: Integer } -> Event", + "DEFAULT_CONFIG": "{ globalEventHandlers :: List (GlobalAction a), subscriptions :: List (((a -> a) -> {}) -> {}) }", + "InputEvent": "{ bubbles :: Boolean, data :: String, defaultPrevented :: Boolean, eventType :: String, inputType :: String, preventDefault :: {} -> {}, stopImmediatePropagation :: {} -> {}, stopPropagation :: {} -> {}, target :: { value :: String }, timeStamp :: Integer } -> Event", + "KEY_0": "Key", + "KEY_1": "Key", + "KEY_2": "Key", + "KEY_3": "Key", + "KEY_4": "Key", + "KEY_5": "Key", + "KEY_6": "Key", + "KEY_7": "Key", + "KEY_8": "Key", + "KEY_9": "Key", + "KEY_A": "Key", + "KEY_ADD": "Key", + "KEY_AIRPLANE_MODE": "Key", + "KEY_ALPHA_NUMERIC": "Key", + "KEY_ALT": "Key", + "KEY_ALTGR": "Key", + "KEY_ANY": "Key", + "KEY_ARABIC_SEMI_COLON": "Key", + "KEY_ASTERISK": "Key", + "KEY_AT": "Key", + "KEY_B": "Key", + "KEY_BACKSPACE": "Key", + "KEY_BACK_SLASH": "Key", + "KEY_BACK_TICK": "Key", + "KEY_BRACKET_LEFT": "Key", + "KEY_BRACKET_RIGHT": "Key", + "KEY_BREAK": "Key", + "KEY_C": "Key", + "KEY_CAPS_LOCK": "Key", + "KEY_CIRCONFLEX": "Key", + "KEY_CLEAR": "Key", + "KEY_CMD": "Key", + "KEY_CMD_LEFT": "Key", + "KEY_CMD_RIGHT": "Key", + "KEY_COLON": "Key", + "KEY_COMMA": "Key", + "KEY_CONVERSION": "Key", + "KEY_CTRL": "Key", + "KEY_C_CEDILLA": "Key", + "KEY_D": "Key", + "KEY_DASH": "Key", + "KEY_DECIMAL_POINT": "Key", + "KEY_DECREASE_VOLUME": "Key", + "KEY_DELETE": "Key", + "KEY_DIVIDE": "Key", + "KEY_DOLLAR": "Key", + "KEY_DOWN_ARROW": "Key", + "KEY_E": "Key", + "KEY_EMAIL": "Key", + "KEY_END": "Key", + "KEY_ENTER": "Key", + "KEY_EQUAL": "Key", + "KEY_ESCAPE": "Key", + "KEY_ESZETT": "Key", + "KEY_EXCLAMATION_MARK": "Key", + "KEY_EXECUTE": "Key", + "KEY_F": "Key", + "KEY_F1": "Key", + "KEY_F10": "Key", + "KEY_F11": "Key", + "KEY_F12": "Key", + "KEY_F13": "Key", + "KEY_F14": "Key", + "KEY_F15": "Key", + "KEY_F16": "Key", + "KEY_F17": "Key", + "KEY_F18": "Key", + "KEY_F19": "Key", + "KEY_F2": "Key", + "KEY_F20": "Key", + "KEY_F21": "Key", + "KEY_F22": "Key", + "KEY_F23": "Key", + "KEY_F24": "Key", + "KEY_F25": "Key", + "KEY_F26": "Key", + "KEY_F27": "Key", + "KEY_F28": "Key", + "KEY_F29": "Key", + "KEY_F3": "Key", + "KEY_F30": "Key", + "KEY_F31": "Key", + "KEY_F32": "Key", + "KEY_F4": "Key", + "KEY_F5": "Key", + "KEY_F6": "Key", + "KEY_F7": "Key", + "KEY_F8": "Key", + "KEY_F9": "Key", + "KEY_FORWARD_SLASH": "Key", + "KEY_G": "Key", + "KEY_GNOME_COMPOSE": "Key", + "KEY_GRAVE_ACCENT": "Key", + "KEY_H": "Key", + "KEY_HALF_WIDTH_FULL_WIDTH": "Key", + "KEY_HANGUL": "Key", + "KEY_HANJA": "Key", + "KEY_HELP": "Key", + "KEY_HIRAGANA_KATAKANA": "Key", + "KEY_HOME": "Key", + "KEY_I": "Key", + "KEY_INCREASE_VOLUME": "Key", + "KEY_INSERT": "Key", + "KEY_J": "Key", + "KEY_K": "Key", + "KEY_KANJI": "Key", + "KEY_L": "Key", + "KEY_LEFT_ARROW": "Key", + "KEY_LEFT_BACK_SLASH": "Key", + "KEY_LEFT_CHEVRON": "Key", + "KEY_M": "Key", + "KEY_MULTIPLY": "Key", + "KEY_MUTE": "Key", + "KEY_MUTE_UNMUTE": "Key", + "KEY_N": "Key", + "KEY_NEXT": "Key", + "KEY_NON_CONVERSION": "Key", + "KEY_NUMBER_SIGN": "Key", + "KEY_NUMPAD_0": "Key", + "KEY_NUMPAD_1": "Key", + "KEY_NUMPAD_2": "Key", + "KEY_NUMPAD_3": "Key", + "KEY_NUMPAD_4": "Key", + "KEY_NUMPAD_5": "Key", + "KEY_NUMPAD_6": "Key", + "KEY_NUMPAD_7": "Key", + "KEY_NUMPAD_8": "Key", + "KEY_NUMPAD_9": "Key", + "KEY_NUMPAD_PERIOD": "Key", + "KEY_NUM_LOCK": "Key", + "KEY_O": "Key", + "KEY_P": "Key", + "KEY_PAGE_BACKWARD": "Key", + "KEY_PAGE_DOWN": "Key", + "KEY_PAGE_FORWARD": "Key", + "KEY_PAGE_UP": "Key", + "KEY_PAUSE": "Key", + "KEY_PERIOD": "Key", + "KEY_PLAY_PAUSE": "Key", + "KEY_PREVIOUS": "Key", + "KEY_PRINT": "Key", + "KEY_PRINT_SCREEN": "Key", + "KEY_Q": "Key", + "KEY_QUESTION_MARK": "Key", + "KEY_R": "Key", + "KEY_REFRESH": "Key", + "KEY_RIGHT_ARROW": "Key", + "KEY_RIGHT_PAREN": "Key", + "KEY_S": "Key", + "KEY_SCROLL_LOCK": "Key", + "KEY_SELECT": "Key", + "KEY_SEMI_COLON": "Key", + "KEY_SHIFT": "Key", + "KEY_SINGLE_QUOTE": "Key", + "KEY_SLEEP": "Key", + "KEY_SPACE": "Key", + "KEY_STOP": "Key", + "KEY_SUBSTRACT": "Key", + "KEY_T": "Key", + "KEY_TAB": "Key", + "KEY_TILDE": "Key", + "KEY_TOGGLE_TOUCH_PAD": "Key", + "KEY_U": "Key", + "KEY_UNLOCK_TRACK_PAD": "Key", + "KEY_UP_ARROW": "Key", + "KEY_U_GRAVE_ACCENT": "Key", + "KEY_V": "Key", + "KEY_W": "Key", + "KEY_X": "Key", + "KEY_XF86_BACKWARD": "Key", + "KEY_XF86_FORWARD": "Key", + "KEY_Y": "Key", + "KEY_Z": "Key", + "KeyboardEvent": "{ altKey :: Boolean, bubbles :: Boolean, ctrlKey :: Boolean, defaultPrevented :: Boolean, eventType :: String, key :: Key, preventDefault :: {} -> {}, shiftKey :: Boolean, stopImmediatePropagation :: {} -> {}, stopPropagation :: {} -> {}, timeStamp :: Integer } -> Event", + "MouseEvent": "{ bubbles :: Boolean, defaultPrevented :: Boolean, eventType :: String, preventDefault :: {} -> {}, stopImmediatePropagation :: {} -> {}, stopPropagation :: {} -> {}, timeStamp :: Integer } -> Event", + "PopStateEvent": "{ bubbles :: Boolean, defaultPrevented :: Boolean, eventType :: String, preventDefault :: {} -> {}, stopImmediatePropagation :: {} -> {}, stopPropagation :: {} -> {}, timeStamp :: Integer, url :: String } -> Event", + "a": "List (Attribute a) -> List (Element a) -> Element a", + "abbr": "List (Attribute a) -> List (Element a) -> Element a", + "accept": "String -> Attribute a", + "acceptCharset": "String -> Attribute a", + "accessKey": "String -> Attribute a", + "action": "String -> Attribute a", + "addGlobalEventHandler": "GlobalAction a -> { globalEventHandlers :: List (GlobalAction a), subscriptions :: List (((a -> a) -> {}) -> {}) } -> { globalEventHandlers :: List (GlobalAction a), subscriptions :: List (((a -> a) -> {}) -> {}) }", + "addSubscription": "(((a -> a) -> {}) -> {}) -> { globalEventHandlers :: List (GlobalAction a), subscriptions :: List (((a -> a) -> {}) -> {}) } -> { globalEventHandlers :: List (GlobalAction a), subscriptions :: List (((a -> a) -> {}) -> {}) }", + "address": "List (Attribute a) -> List (Element a) -> Element a", + "alt": "String -> Attribute a", + "area": "List (Attribute a) -> List (Element a) -> Element a", + "article": "List (Attribute a) -> List (Element a) -> Element a", + "aside": "List (Attribute a) -> List (Element a) -> Element a", + "async": "Boolean -> Attribute a", + "audio": "List (Attribute a) -> List (Element a) -> Element a", + "autocomplete": "Boolean -> Attribute a", + "autofocus": "Boolean -> Attribute a", + "autoplay": "Boolean -> Attribute a", + "b": "List (Attribute a) -> List (Element a) -> Element a", + "bdi": "List (Attribute a) -> List (Element a) -> Element a", + "bdo": "List (Attribute a) -> List (Element a) -> Element a", + "blockquote": "List (Attribute a) -> List (Element a) -> Element a", + "br": "List (Attribute a) -> List (Element a) -> Element a", + "button": "List (Attribute a) -> List (Element a) -> Element a", + "canvas": "List (Attribute a) -> List (Element a) -> Element a", + "caption": "List (Attribute a) -> List (Element a) -> Element a", + "checked": "Boolean -> Attribute a", + "cite": "List (Attribute a) -> List (Element a) -> Element a", + "citeAttr": "String -> Attribute a", + "className": "String -> Attribute a", + "code": "List (Attribute a) -> List (Element a) -> Element a", + "col": "List (Attribute a) -> List (Element a) -> Element a", + "colgroup": "List (Attribute a) -> List (Element a) -> Element a", + "cols": "Integer -> Attribute a", + "colspan": "Integer -> Attribute a", + "content": "List (Attribute a) -> List (Element a) -> Element a", + "contenteditable": "Boolean -> Attribute a", + "controls": "Boolean -> Attribute a", + "coords": "String -> Attribute a", + "data": "List (Attribute a) -> List (Element a) -> Element a", + "dataAttr": "String -> Attribute a", + "datalist": "List (Attribute a) -> List (Element a) -> Element a", + "datetime": "String -> Attribute a", + "dd": "List (Attribute a) -> List (Element a) -> Element a", + "default": "Boolean -> Attribute a", + "defer": "Boolean -> Attribute a", + "del": "List (Attribute a) -> List (Element a) -> Element a", + "details": "List (Attribute a) -> List (Element a) -> Element a", + "dfn": "List (Attribute a) -> List (Element a) -> Element a", + "dialog": "List (Attribute a) -> List (Element a) -> Element a", + "dir": "String -> Attribute a", + "dirname": "String -> Attribute a", + "disabled": "Boolean -> Attribute a", + "div": "List (Attribute a) -> List (Element a) -> Element a", + "dl": "List (Attribute a) -> List (Element a) -> Element a", + "download": "Boolean -> Attribute a", + "draggable": "Boolean -> Attribute a", + "dt": "List (Attribute a) -> List (Element a) -> Element a", + "em": "List (Attribute a) -> List (Element a) -> Element a", + "embed": "List (Attribute a) -> List (Element a) -> Element a", + "empty": "List (Attribute a) -> List (Element a) -> Element a", + "enctype": "String -> Attribute a", + "every": "Integer -> (a -> a) -> ((a -> a) -> {}) -> {}", + "fieldset": "List (Attribute a) -> List (Element a) -> Element a", + "figcaption": "List (Attribute a) -> List (Element a) -> Element a", + "figure": "List (Attribute a) -> List (Element a) -> Element a", + "footer": "List (Attribute a) -> List (Element a) -> Element a", + "for": "String -> Attribute a", + "form": "List (Attribute a) -> List (Element a) -> Element a", + "formAttr": "String -> Attribute a", + "formaction": "String -> Attribute a", + "getUrl": "{} -> String", + "h1": "List (Attribute a) -> List (Element a) -> Element a", + "h2": "List (Attribute a) -> List (Element a) -> Element a", + "h3": "List (Attribute a) -> List (Element a) -> Element a", + "h4": "List (Attribute a) -> List (Element a) -> Element a", + "h5": "List (Attribute a) -> List (Element a) -> Element a", + "h6": "List (Attribute a) -> List (Element a) -> Element a", + "header": "List (Attribute a) -> List (Element a) -> Element a", + "headers": "String -> Attribute a", + "height": "Integer -> Attribute a", + "hgroup": "List (Attribute a) -> List (Element a) -> Element a", + "hidden": "Boolean -> Attribute a", + "high": "Integer -> Attribute a", + "hr": "List (Attribute a) -> List (Element a) -> Element a", + "href": "String -> Attribute a", + "hreflang": "String -> Attribute a", + "i": "List (Attribute a) -> List (Element a) -> Element a", + "id": "String -> Attribute a", + "iframe": "List (Attribute a) -> List (Element a) -> Element a", + "img": "List (Attribute a) -> List (Element a) -> Element a", + "input": "List (Attribute a) -> List (Element a) -> Element a", + "inputType": "String -> Attribute a", + "ins": "List (Attribute a) -> List (Element a) -> Element a", + "ismap": "Boolean -> Attribute a", + "kbd": "List (Attribute a) -> List (Element a) -> Element a", + "key": "String -> Attribute a", + "kind": "String -> Attribute a", + "label": "List (Attribute a) -> List (Element a) -> Element a", + "labelAttr": "String -> Attribute a", + "lang": "String -> Attribute a", + "legend": "List (Attribute a) -> List (Element a) -> Element a", + "li": "List (Attribute a) -> List (Element a) -> Element a", + "link": "List (Attribute a) -> List (Element a) -> Element a", + "list": "String -> Attribute a", + "loop": "Boolean -> Attribute a", + "low": "Integer -> Attribute a", + "main": "List (Attribute a) -> List (Element a) -> Element a", + "mapElement": "List (Attribute a) -> List (Element a) -> Element a", + "mark": "List (Attribute a) -> List (Element a) -> Element a", + "max": "Integer -> Attribute a", + "maxlength": "Integer -> Attribute a", + "media": "String -> Attribute a", + "menu": "List (Attribute a) -> List (Element a) -> Element a", + "menuitem": "List (Attribute a) -> List (Element a) -> Element a", + "meta": "List (Attribute a) -> List (Element a) -> Element a", + "meter": "List (Attribute a) -> List (Element a) -> Element a", + "method": "Method -> Attribute a", + "min": "Integer -> Attribute a", + "multiple": "Boolean -> Attribute a", + "muted": "Boolean -> Attribute a", + "name": "String -> Attribute a", + "nav": "List (Attribute a) -> List (Element a) -> Element a", + "noscript": "List (Attribute a) -> List (Element a) -> Element a", + "novalidate": "Boolean -> Attribute a", + "object": "List (Attribute a) -> List (Element a) -> Element a", + "ol": "List (Attribute a) -> List (Element a) -> Element a", + "onAbort": "(a -> Event -> List (Wish (a -> a) (a -> a))) -> Attribute a", + "onAfterPrint": "(a -> Event -> List (Wish (a -> a) (a -> a))) -> GlobalAction a", + "onBeforePrint": "(a -> Event -> List (Wish (a -> a) (a -> a))) -> GlobalAction a", + "onBeforeUnload": "(a -> Event -> List (Wish (a -> a) (a -> a))) -> GlobalAction a", + "onBlur": "(a -> Event -> List (Wish (a -> a) (a -> a))) -> Attribute a", + "onCanPlay": "(a -> Event -> List (Wish (a -> a) (a -> a))) -> Attribute a", + "onCanPlayThrough": "(a -> Event -> List (Wish (a -> a) (a -> a))) -> Attribute a", + "onChange": "(a -> Event -> List (Wish (a -> a) (a -> a))) -> Attribute a", + "onClick": "(a -> Event -> List (Wish (a -> a) (a -> a))) -> Attribute a", + "onContextMenu": "(a -> Event -> List (Wish (a -> a) (a -> a))) -> Attribute a", + "onCopy": "(a -> Event -> List (Wish (a -> a) (a -> a))) -> Attribute a", + "onCueChange": "(a -> Event -> List (Wish (a -> a) (a -> a))) -> Attribute a", + "onCut": "(a -> Event -> List (Wish (a -> a) (a -> a))) -> Attribute a", + "onDblClick": "(a -> Event -> List (Wish (a -> a) (a -> a))) -> Attribute a", + "onDocumentLoad": "(a -> Event -> List (Wish (a -> a) (a -> a))) -> GlobalAction a", + "onDrag": "(a -> Event -> List (Wish (a -> a) (a -> a))) -> Attribute a", + "onDragEnd": "(a -> Event -> List (Wish (a -> a) (a -> a))) -> Attribute a", + "onDragEnter": "(a -> Event -> List (Wish (a -> a) (a -> a))) -> Attribute a", + "onDragLeave": "(a -> Event -> List (Wish (a -> a) (a -> a))) -> Attribute a", + "onDragOver": "(a -> Event -> List (Wish (a -> a) (a -> a))) -> Attribute a", + "onDragStart": "(a -> Event -> List (Wish (a -> a) (a -> a))) -> Attribute a", + "onDrop": "(a -> Event -> List (Wish (a -> a) (a -> a))) -> Attribute a", + "onDurationChange": "(a -> Event -> List (Wish (a -> a) (a -> a))) -> Attribute a", + "onEmptied": "(a -> Event -> List (Wish (a -> a) (a -> a))) -> Attribute a", + "onEnded": "(a -> Event -> List (Wish (a -> a) (a -> a))) -> Attribute a", + "onError": "(a -> Event -> List (Wish (a -> a) (a -> a))) -> Attribute a", + "onFocus": "(a -> Event -> List (Wish (a -> a) (a -> a))) -> Attribute a", + "onInput": "(a -> Event -> List (Wish (a -> a) (a -> a))) -> Attribute a", + "onInvalid": "(a -> Event -> List (Wish (a -> a) (a -> a))) -> Attribute a", + "onKeyDown": "(a -> Event -> List (Wish (a -> a) (a -> a))) -> Attribute a", + "onKeyPress": "(a -> Event -> List (Wish (a -> a) (a -> a))) -> Attribute a", + "onKeyUp": "(a -> Event -> List (Wish (a -> a) (a -> a))) -> Attribute a", + "onLoad": "(a -> Event -> List (Wish (a -> a) (a -> a))) -> Attribute a", + "onLoadStart": "(a -> Event -> List (Wish (a -> a) (a -> a))) -> Attribute a", + "onLoadedData": "(a -> Event -> List (Wish (a -> a) (a -> a))) -> Attribute a", + "onLoadedMetaData": "(a -> Event -> List (Wish (a -> a) (a -> a))) -> Attribute a", + "onMouseDown": "(a -> Event -> List (Wish (a -> a) (a -> a))) -> Attribute a", + "onMouseEnter": "(a -> Event -> List (Wish (a -> a) (a -> a))) -> Attribute a", + "onMouseLeave": "(a -> Event -> List (Wish (a -> a) (a -> a))) -> Attribute a", + "onMouseMove": "(a -> Event -> List (Wish (a -> a) (a -> a))) -> Attribute a", + "onMouseOut": "(a -> Event -> List (Wish (a -> a) (a -> a))) -> Attribute a", + "onMouseOver": "(a -> Event -> List (Wish (a -> a) (a -> a))) -> Attribute a", + "onMouseUp": "(a -> Event -> List (Wish (a -> a) (a -> a))) -> Attribute a", + "onMouseWheel": "(a -> Event -> List (Wish (a -> a) (a -> a))) -> Attribute a", + "onOffline": "(a -> Event -> List (Wish (a -> a) (a -> a))) -> GlobalAction a", + "onOnline": "(a -> Event -> List (Wish (a -> a) (a -> a))) -> GlobalAction a", + "onPageHide": "(a -> Event -> List (Wish (a -> a) (a -> a))) -> GlobalAction a", + "onPageShow": "(a -> Event -> List (Wish (a -> a) (a -> a))) -> GlobalAction a", + "onPaste": "(a -> Event -> List (Wish (a -> a) (a -> a))) -> Attribute a", + "onPause": "(a -> Event -> List (Wish (a -> a) (a -> a))) -> Attribute a", + "onPlay": "(a -> Event -> List (Wish (a -> a) (a -> a))) -> Attribute a", + "onPlaying": "(a -> Event -> List (Wish (a -> a) (a -> a))) -> Attribute a", + "onProgress": "(a -> Event -> List (Wish (a -> a) (a -> a))) -> Attribute a", + "onRateChange": "(a -> Event -> List (Wish (a -> a) (a -> a))) -> Attribute a", + "onReset": "(a -> Event -> List (Wish (a -> a) (a -> a))) -> Attribute a", + "onResize": "(a -> Event -> List (Wish (a -> a) (a -> a))) -> GlobalAction a", + "onScroll": "(a -> Event -> List (Wish (a -> a) (a -> a))) -> Attribute a", + "onSearch": "(a -> Event -> List (Wish (a -> a) (a -> a))) -> Attribute a", + "onSeeked": "(a -> Event -> List (Wish (a -> a) (a -> a))) -> Attribute a", + "onSeeking": "(a -> Event -> List (Wish (a -> a) (a -> a))) -> Attribute a", + "onSelect": "(a -> Event -> List (Wish (a -> a) (a -> a))) -> Attribute a", + "onStalled": "(a -> Event -> List (Wish (a -> a) (a -> a))) -> Attribute a", + "onSubmit": "(a -> Event -> List (Wish (a -> a) (a -> a))) -> Attribute a", + "onSuspend": "(a -> Event -> List (Wish (a -> a) (a -> a))) -> Attribute a", + "onTimeUpdate": "(a -> Event -> List (Wish (a -> a) (a -> a))) -> Attribute a", + "onToggle": "(a -> Event -> List (Wish (a -> a) (a -> a))) -> Attribute a", + "onTransitionCancel": "(a -> Event -> List (Wish (a -> a) (a -> a))) -> Attribute a", + "onTransitionEnd": "(a -> Event -> List (Wish (a -> a) (a -> a))) -> Attribute a", + "onTransitionRun": "(a -> Event -> List (Wish (a -> a) (a -> a))) -> Attribute a", + "onTransitionStart": "(a -> Event -> List (Wish (a -> a) (a -> a))) -> Attribute a", + "onUnload": "(a -> Event -> List (Wish (a -> a) (a -> a))) -> GlobalAction a", + "onUrlChanged": "(a -> Event -> List (Wish (a -> a) (a -> a))) -> GlobalAction a", + "onVolumeChange": "(a -> Event -> List (Wish (a -> a) (a -> a))) -> Attribute a", + "onWaiting": "(a -> Event -> List (Wish (a -> a) (a -> a))) -> Attribute a", + "onWheel": "(a -> Event -> List (Wish (a -> a) (a -> a))) -> Attribute a", + "open": "Boolean -> Attribute a", + "optgroup": "List (Attribute a) -> List (Element a) -> Element a", + "optimum": "Integer -> Attribute a", + "option": "List (Attribute a) -> List (Element a) -> Element a", + "output": "List (Attribute a) -> List (Element a) -> Element a", + "p": "List (Attribute a) -> List (Element a) -> Element a", + "param": "List (Attribute a) -> List (Element a) -> Element a", + "pattern": "String -> Attribute a", + "picture": "List (Attribute a) -> List (Element a) -> Element a", + "placeholder": "String -> Attribute a", + "plaintext": "List (Attribute a) -> List (Element a) -> Element a", + "poster": "String -> Attribute a", + "pre": "List (Attribute a) -> List (Element a) -> Element a", + "preload": "String -> Attribute a", + "progress": "List (Attribute a) -> List (Element a) -> Element a", + "q": "List (Attribute a) -> List (Element a) -> Element a", + "readonly": "Boolean -> Attribute a", + "rel": "String -> Attribute a", + "render": "(a -> Element a) -> a -> String -> {}", + "renderWithConfig": "{ globalEventHandlers :: List (GlobalAction a), subscriptions :: List (((a -> a) -> {}) -> {}) } -> (a -> Element a) -> a -> String -> {}", + "required": "Boolean -> Attribute a", + "reversed": "Boolean -> Attribute a", + "rows": "Integer -> Attribute a", + "rowspan": "Integer -> Attribute a", + "rp": "List (Attribute a) -> List (Element a) -> Element a", + "rt": "List (Attribute a) -> List (Element a) -> Element a", + "rtc": "List (Attribute a) -> List (Element a) -> Element a", + "ruby": "List (Attribute a) -> List (Element a) -> Element a", + "s": "List (Attribute a) -> List (Element a) -> Element a", + "samp": "List (Attribute a) -> List (Element a) -> Element a", + "sandbox": "Boolean -> Attribute a", + "scope": "String -> Attribute a", + "script": "List (Attribute a) -> List (Element a) -> Element a", + "section": "List (Attribute a) -> List (Element a) -> Element a", + "select": "List (Attribute a) -> List (Element a) -> Element a", + "selected": "Boolean -> Attribute a", + "shadow": "List (Attribute a) -> List (Element a) -> Element a", + "shape": "String -> Attribute a", + "size": "Integer -> Attribute a", + "sizes": "String -> Attribute a", + "slot": "List (Attribute a) -> List (Element a) -> Element a", + "small": "List (Attribute a) -> List (Element a) -> Element a", + "source": "List (Attribute a) -> List (Element a) -> Element a", + "span": "List (Attribute a) -> List (Element a) -> Element a", + "spanAttr": "Integer -> Attribute a", + "spellcheck": "Boolean -> Attribute a", + "src": "String -> Attribute a", + "srcdoc": "String -> Attribute a", + "srclang": "String -> Attribute a", + "srcset": "String -> Attribute a", + "start": "Integer -> Attribute a", + "step": "Integer -> Attribute a", + "stringAttribute": "#[String, String] -> Attribute a", + "strong": "List (Attribute a) -> List (Element a) -> Element a", + "style": "Dictionary String String -> Attribute a", + "sub": "List (Attribute a) -> List (Element a) -> Element a", + "summary": "List (Attribute a) -> List (Element a) -> Element a", + "sup": "List (Attribute a) -> List (Element a) -> Element a", + "syncAction": "(a -> Event -> a) -> a -> Event -> List (Wish (a -> a) (a -> a))", + "tabindex": "Integer -> Attribute a", + "table": "List (Attribute a) -> List (Element a) -> Element a", + "tag": "String -> List (Attribute a) -> List (Element a) -> Element a", + "target": "String -> Attribute a", + "tbody": "List (Attribute a) -> List (Element a) -> Element a", + "td": "List (Attribute a) -> List (Element a) -> Element a", + "template": "List (Attribute a) -> List (Element a) -> Element a", + "text": "String -> Element a", + "textarea": "List (Attribute a) -> List (Element a) -> Element a", + "tfoot": "List (Attribute a) -> List (Element a) -> Element a", + "th": "List (Attribute a) -> List (Element a) -> Element a", + "thead": "List (Attribute a) -> List (Element a) -> Element a", + "time": "List (Attribute a) -> List (Element a) -> Element a", + "title": "List (Attribute a) -> List (Element a) -> Element a", + "titleAttr": "String -> Attribute a", + "to": "String -> Attribute a", + "tr": "List (Attribute a) -> List (Element a) -> Element a", + "track": "List (Attribute a) -> List (Element a) -> Element a", + "translate": "Boolean -> Attribute a", + "u": "List (Attribute a) -> List (Element a) -> Element a", + "ul": "List (Attribute a) -> List (Element a) -> Element a", + "usemap": "String -> Attribute a", + "value": "String -> Attribute a", + "var": "List (Attribute a) -> List (Element a) -> Element a", + "video": "List (Attribute a) -> List (Element a) -> Element a", + "wbr": "List (Attribute a) -> List (Element a) -> Element a", + "width": "Integer -> Attribute a", + "wrap": "String -> Attribute a" + }, + "apiTypes": {} + }, + "buildHash": "2a7691f623b74a2566779bcecfbfbdc6", + "versionHash": "272f0a04b740763e0a29316bc4af89a4" +} diff --git a/.gitignore b/.gitignore index c4f7da2..da7b86d 100644 --- a/.gitignore +++ b/.gitignore @@ -5,5 +5,5 @@ .repl .tests build -madlib_modules +# madlib_modules node_modules diff --git a/madlib_modules/MadDoc/.github/workflows/release.yml b/madlib_modules/MadDoc/.github/workflows/release.yml new file mode 100644 index 0000000..f3c2619 --- /dev/null +++ b/madlib_modules/MadDoc/.github/workflows/release.yml @@ -0,0 +1,69 @@ +name: 'Publish new version' + +on: + workflow_dispatch: + inputs: + version: + description: 'Version to publish ( ex: v0.0.1 )' + required: true + +env: + node-version: 20.x + + +jobs: + check-version: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - run: | + MADLIB_PKG_VERSION="v$(cat madlib.json | grep version | cut -d":" -f2 | cut -d"\"" -f2)" + TAG_NAME=${{ github.event.inputs.version }} + if [ "$TAG_NAME" = "$MADLIB_PKG_VERSION" ]; then + echo "Versions match" + else + echo "Versions in madlib.json is not ${TAG_NAME}" + exit 1 + fi + + release: + needs: check-version + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + + - name: Use Node.js ${{ env.node-version }} + uses: actions/setup-node@v4 + with: + node-version: ${{ env.node-version }} + + - name: "Changelog: generate changelog" + id: changelog + uses: TriPSs/conventional-changelog-action@v5.2.1 + with: + presets: "conventionalcommits" + github-token: ${{ secrets.GITHUB_TOKEN }} + skip-on-empty: false + output-file: false + tag-prefix: 'v' + skip-commit: true + skip-version-file: true + draft: false + prerelease: false + + - name: "Delete created tag from changelog" + run: | + git push --delete origin v${{ steps.changelog.outputs.version }} + git tag -d v${{ steps.changelog.outputs.version }} + + - name: "Create Release" + id: create_release + uses: actions/create-release@v1.1.4 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + with: + tag_name: ${{ github.event.inputs.version }} + release_name: Release ${{ github.event.inputs.version }} + body: ${{ steps.changelog.outputs.clean_changelog }} + draft: false + prerelease: false diff --git a/madlib_modules/MadDoc/.gitignore b/madlib_modules/MadDoc/.gitignore new file mode 100644 index 0000000..c37c5aa --- /dev/null +++ b/madlib_modules/MadDoc/.gitignore @@ -0,0 +1,11 @@ +madlib_modules +node_modules +/build +.DS_Store +.run +.docs +.tests +.coverage +documentation.json +_documentation.json +.module_cache diff --git a/madlib_modules/MadDoc/.madlibignore b/madlib_modules/MadDoc/.madlibignore new file mode 100644 index 0000000..768858d --- /dev/null +++ b/madlib_modules/MadDoc/.madlibignore @@ -0,0 +1,3 @@ +documentation.json +_documentation.json + diff --git a/madlib_modules/MadDoc/README.md b/madlib_modules/MadDoc/README.md new file mode 100644 index 0000000..db01bca --- /dev/null +++ b/madlib_modules/MadDoc/README.md @@ -0,0 +1,13 @@ +# MadDoc +MadDoc is a document generator that takes as input the json file generated by `madlib doc` command. + +## How to run it +```bash +madlib install +npm run dev +``` +Currently, MadDoc frontend expects a doc file named `documentation.json` to be located in the `src/` folder. You can generate this one using the `madlib doc` command. Run `madlib doc --help` for more information. + +## Note +This package is still under active development. + diff --git a/madlib_modules/MadDoc/madlib.json b/madlib_modules/MadDoc/madlib.json new file mode 100644 index 0000000..04bbf28 --- /dev/null +++ b/madlib_modules/MadDoc/madlib.json @@ -0,0 +1,21 @@ +{ + "name": "MadDoc", + "version": "0.0.9", + "madlibVersion": "0.23.14", + "main": "src/Main.mad", + "importAliases": { + ".": "src" + }, + "dependencies": [ + { + "minVersion": "2.0.4", + "url": "https://github.com/madlib-lang/madmarkdown-renderer/archive/refs/tags/v2.0.4.zip", + "description": "MadMarkdownRenderer" + }, + { + "minVersion": "7.0.2", + "url": "https://github.com/madlib-lang/madui/archive/refs/tags/v7.0.2.zip", + "description": "MadUI" + } + ] +} diff --git a/madlib_modules/MadDoc/package-lock.json b/madlib_modules/MadDoc/package-lock.json new file mode 100644 index 0000000..0c91c76 --- /dev/null +++ b/madlib_modules/MadDoc/package-lock.json @@ -0,0 +1,5044 @@ +{ + "name": "maddoc", + "version": "0.0.1", + "lockfileVersion": 2, + "requires": true, + "packages": { + "": { + "name": "maddoc", + "version": "0.0.1", + "license": "ISC", + "dependencies": { + "maddoc-cli": "file:madlib_modules/MadDocCli", + "madmarkdown-renderer": "file:madlib_modules/MadMarkdownRenderer", + "madui": "file:madlib_modules/MadUI", + "sass": "^1.32.6" + }, + "devDependencies": { + "browser-sync": "^2.26.14", + "concurrently": "^5.3.0", + "copy-and-watch": "^0.1.5", + "watch": "^1.0.2" + } + }, + "madlib_modules/MadDocCli": {}, + "madlib_modules/MadMarkdownRenderer": { + "name": "madmarkdown-renderer", + "version": "0.0.1", + "license": "ISC", + "dependencies": { + "sass": "^1.32.6" + }, + "devDependencies": { + "browser-sync": "^2.26.14", + "concurrently": "^5.3.0", + "copy-and-watch": "^0.1.5", + "watch": "^1.0.2" + } + }, + "madlib_modules/MadUI": { + "name": "madui", + "version": "0.0.1", + "license": "ISC", + "dependencies": { + "snabbdom": "^3.0.1" + }, + "devDependencies": { + "@rollup/plugin-node-resolve": "^11.2.0", + "rollup": "^2.39.1" + } + }, + "node_modules/@rollup/plugin-node-resolve": { + "version": "11.2.1", + "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-11.2.1.tgz", + "integrity": "sha512-yc2n43jcqVyGE2sqV5/YCmocy9ArjVAP/BeXyTtADTBBX6V0e5UMqwO8CdQ0kzjb6zu5P1qMzsScCMRvE9OlVg==", + "dev": true, + "dependencies": { + "@rollup/pluginutils": "^3.1.0", + "@types/resolve": "1.17.1", + "builtin-modules": "^3.1.0", + "deepmerge": "^4.2.2", + "is-module": "^1.0.0", + "resolve": "^1.19.0" + }, + "engines": { + "node": ">= 10.0.0" + }, + "peerDependencies": { + "rollup": "^1.20.0||^2.0.0" + } + }, + "node_modules/@rollup/pluginutils": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-3.1.0.tgz", + "integrity": "sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg==", + "dev": true, + "dependencies": { + "@types/estree": "0.0.39", + "estree-walker": "^1.0.1", + "picomatch": "^2.2.2" + }, + "engines": { + "node": ">= 8.0.0" + }, + "peerDependencies": { + "rollup": "^1.20.0||^2.0.0" + } + }, + "node_modules/@types/estree": { + "version": "0.0.39", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.39.tgz", + "integrity": "sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==", + "dev": true + }, + "node_modules/@types/node": { + "version": "20.12.11", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.12.11.tgz", + "integrity": "sha512-vDg9PZ/zi+Nqp6boSOT7plNuthRugEKixDv5sFTIpkE89MmNtEArAShI4mxuX2+UrLEe9pxC1vm2cjm9YlWbJw==", + "dev": true, + "dependencies": { + "undici-types": "~5.26.4" + } + }, + "node_modules/@types/resolve": { + "version": "1.17.1", + "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-1.17.1.tgz", + "integrity": "sha512-yy7HuzQhj0dhGpD8RLXSZWEkLsV9ibvxvi6EiJ3bkqLAO1RGo0WbkWQiwpRlSFymTJRz0d3k5LM3kkx8ArDbLw==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/accepts": { + "version": "1.3.7", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", + "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==", + "dev": true, + "dependencies": { + "mime-types": "~2.1.24", + "negotiator": "0.6.2" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/after": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/after/-/after-0.8.2.tgz", + "integrity": "sha1-/ts5T58OAqqXaOcCvaI7UF+ufh8=", + "dev": true + }, + "node_modules/ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/anymatch": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.1.tgz", + "integrity": "sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg==", + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/arraybuffer.slice": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/arraybuffer.slice/-/arraybuffer.slice-0.0.7.tgz", + "integrity": "sha512-wGUIVQXuehL5TCqQun8OW81jGzAWycqzFF8lFp+GOM5BXLYj3bKNsYC4daB7n6XjCqxQA/qgTJ+8ANR3acjrog==", + "dev": true + }, + "node_modules/async": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", + "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=", + "dev": true + }, + "node_modules/async-each-series": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/async-each-series/-/async-each-series-0.1.1.tgz", + "integrity": "sha1-dhfBkXQB/Yykooqtzj266Yr+tDI=", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/axios": { + "version": "0.21.1", + "resolved": "https://registry.npmjs.org/axios/-/axios-0.21.1.tgz", + "integrity": "sha512-dKQiRHxGD9PPRIUNIWvZhPTPpl1rf/OxTYKsqKUDjBwYylTvV7SjSHJb9ratfyzM6wCdLCOYLzs73qpg5c4iGA==", + "dev": true, + "dependencies": { + "follow-redirects": "^1.10.0" + } + }, + "node_modules/backo2": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/backo2/-/backo2-1.0.2.tgz", + "integrity": "sha1-MasayLEpNjRj41s+u2n038+6eUc=", + "dev": true + }, + "node_modules/balanced-match": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", + "dev": true + }, + "node_modules/base64-arraybuffer": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-0.1.4.tgz", + "integrity": "sha1-mBjHngWbE1X5fgQooBfIOOkLqBI=", + "dev": true, + "engines": { + "node": ">= 0.6.0" + } + }, + "node_modules/base64id": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/base64id/-/base64id-2.0.0.tgz", + "integrity": "sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog==", + "dev": true, + "engines": { + "node": "^4.5.0 || >= 5.9" + } + }, + "node_modules/batch": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", + "integrity": "sha1-3DQxT05nkxgJP8dgJyUl+UvyXBY=", + "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==", + "engines": { + "node": ">=8" + } + }, + "node_modules/blob": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/blob/-/blob-0.0.5.tgz", + "integrity": "sha512-gaqbzQPqOoamawKg0LGVd7SzLgXS+JH61oWprSLH+P+abTczqJbhTR8CmJ2u9/bUYNmHTGJx/UEmn6doAvvuig==", + "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==", + "dependencies": { + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/browser-sync": { + "version": "2.26.14", + "resolved": "https://registry.npmjs.org/browser-sync/-/browser-sync-2.26.14.tgz", + "integrity": "sha512-3TtpsheGolJT6UFtM2CZWEcGJmI4ZEvoCKiKE2bvcDnPxRkhQT4nIGVtfiyPcoHKXGM0LwMOZmYJNWfiNfVXWA==", + "dev": true, + "dependencies": { + "browser-sync-client": "^2.26.14", + "browser-sync-ui": "^2.26.14", + "bs-recipes": "1.3.4", + "bs-snippet-injector": "^2.0.1", + "chokidar": "^3.5.1", + "connect": "3.6.6", + "connect-history-api-fallback": "^1", + "dev-ip": "^1.0.1", + "easy-extender": "^2.3.4", + "eazy-logger": "3.1.0", + "etag": "^1.8.1", + "fresh": "^0.5.2", + "fs-extra": "3.0.1", + "http-proxy": "^1.18.1", + "immutable": "^3", + "localtunnel": "^2.0.1", + "micromatch": "^4.0.2", + "opn": "5.3.0", + "portscanner": "2.1.1", + "qs": "6.2.3", + "raw-body": "^2.3.2", + "resp-modifier": "6.0.2", + "rx": "4.1.0", + "send": "0.16.2", + "serve-index": "1.9.1", + "serve-static": "1.13.2", + "server-destroy": "1.0.1", + "socket.io": "2.4.0", + "ua-parser-js": "^0.7.18", + "yargs": "^15.4.1" + }, + "bin": { + "browser-sync": "dist/bin.js" + }, + "engines": { + "node": ">= 8.0.0" + } + }, + "node_modules/browser-sync-client": { + "version": "2.26.14", + "resolved": "https://registry.npmjs.org/browser-sync-client/-/browser-sync-client-2.26.14.tgz", + "integrity": "sha512-be0m1MchmKv/26r/yyyolxXcBi052aYrmaQep5nm8YNMjFcEyzv0ZoOKn/c3WEXNlEB/KeXWaw70fAOJ+/F1zQ==", + "dev": true, + "dependencies": { + "etag": "1.8.1", + "fresh": "0.5.2", + "mitt": "^1.1.3", + "rxjs": "^5.5.6" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/browser-sync-ui": { + "version": "2.26.14", + "resolved": "https://registry.npmjs.org/browser-sync-ui/-/browser-sync-ui-2.26.14.tgz", + "integrity": "sha512-6oT1sboM4KVNnWCCJDMGbRIeTBw97toMFQ+srImvwQ6J5t9KMgizaIX8HcKLiemsUMSJkgGM9RVKIpq2UblgOA==", + "dev": true, + "dependencies": { + "async-each-series": "0.1.1", + "connect-history-api-fallback": "^1", + "immutable": "^3", + "server-destroy": "1.0.1", + "socket.io-client": "^2.4.0", + "stream-throttle": "^0.1.3" + } + }, + "node_modules/bs-recipes": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/bs-recipes/-/bs-recipes-1.3.4.tgz", + "integrity": "sha1-DS1NSKcYyMBEdp/cT4lZLci2lYU=", + "dev": true + }, + "node_modules/bs-snippet-injector": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/bs-snippet-injector/-/bs-snippet-injector-2.0.1.tgz", + "integrity": "sha1-YbU5PxH1JVntEgaTEANDtu2wTdU=", + "dev": true + }, + "node_modules/builtin-modules": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.3.0.tgz", + "integrity": "sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==", + "dev": true, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/bytes": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", + "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "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/chokidar": { + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.1.tgz", + "integrity": "sha512-9+s+Od+W0VJJzawDma/gvBNQqkTiqYTWLuZoyAsivsI4AaWTCzHG06/TMjsf1cYe9Cb97UCEhjz7HvnPk2p/tw==", + "dependencies": { + "anymatch": "~3.1.1", + "braces": "~3.0.2", + "glob-parent": "~5.1.0", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.5.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.1" + } + }, + "node_modules/cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "dev": true, + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, + "node_modules/cliui/node_modules/ansi-regex": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/cliui/node_modules/strip-ansi": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "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": "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/component-bind": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/component-bind/-/component-bind-1.0.0.tgz", + "integrity": "sha1-AMYIq33Nk4l8AAllGx06jh5zu9E=", + "dev": true + }, + "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/component-inherit": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/component-inherit/-/component-inherit-0.0.3.tgz", + "integrity": "sha1-ZF/ErfWLcrZJ1crmUTVhnbJv8UM=", + "dev": true + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "dev": true + }, + "node_modules/concurrently": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/concurrently/-/concurrently-5.3.0.tgz", + "integrity": "sha512-8MhqOB6PWlBfA2vJ8a0bSFKATOdWlHiQlk11IfmQBPaHVP8oP2gsh2MObE6UR3hqDHqvaIvLTyceNW6obVuFHQ==", + "dev": true, + "dependencies": { + "chalk": "^2.4.2", + "date-fns": "^2.0.1", + "lodash": "^4.17.15", + "read-pkg": "^4.0.1", + "rxjs": "^6.5.2", + "spawn-command": "^0.0.2-1", + "supports-color": "^6.1.0", + "tree-kill": "^1.2.2", + "yargs": "^13.3.0" + }, + "bin": { + "concurrently": "bin/concurrently.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/concurrently/node_modules/ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/concurrently/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/concurrently/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/concurrently/node_modules/chalk/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/concurrently/node_modules/cliui": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", + "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", + "dev": true, + "dependencies": { + "string-width": "^3.1.0", + "strip-ansi": "^5.2.0", + "wrap-ansi": "^5.1.0" + } + }, + "node_modules/concurrently/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/concurrently/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, + "node_modules/concurrently/node_modules/emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", + "dev": true + }, + "node_modules/concurrently/node_modules/find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "dev": true, + "dependencies": { + "locate-path": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/concurrently/node_modules/is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/concurrently/node_modules/locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "dev": true, + "dependencies": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/concurrently/node_modules/p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "dev": true, + "dependencies": { + "p-limit": "^2.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/concurrently/node_modules/path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/concurrently/node_modules/rxjs": { + "version": "6.6.6", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.6.tgz", + "integrity": "sha512-/oTwee4N4iWzAMAL9xdGKjkEHmIwupR3oXbQjCKywF1BeFohswF3vZdogbmEF6pZkOsXTzWkrZszrWpQTByYVg==", + "dev": true, + "dependencies": { + "tslib": "^1.9.0" + }, + "engines": { + "npm": ">=2.0.0" + } + }, + "node_modules/concurrently/node_modules/string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "dev": true, + "dependencies": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/concurrently/node_modules/strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "dependencies": { + "ansi-regex": "^4.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/concurrently/node_modules/supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/concurrently/node_modules/wrap-ansi": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", + "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.0", + "string-width": "^3.0.0", + "strip-ansi": "^5.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/concurrently/node_modules/y18n": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.1.tgz", + "integrity": "sha512-wNcy4NvjMYL8gogWWYAO7ZFWFfHcbdbE57tZO8e4cbpj8tfUcwrwqSl3ad8HxpYWCdXcJUCeKKZS62Av1affwQ==", + "dev": true + }, + "node_modules/concurrently/node_modules/yargs": { + "version": "13.3.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz", + "integrity": "sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==", + "dev": true, + "dependencies": { + "cliui": "^5.0.0", + "find-up": "^3.0.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^3.0.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^13.1.2" + } + }, + "node_modules/concurrently/node_modules/yargs-parser": { + "version": "13.1.2", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz", + "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==", + "dev": true, + "dependencies": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + } + }, + "node_modules/connect": { + "version": "3.6.6", + "resolved": "https://registry.npmjs.org/connect/-/connect-3.6.6.tgz", + "integrity": "sha1-Ce/2xVr3I24TcTWnJXSFi2eG9SQ=", + "dev": true, + "dependencies": { + "debug": "2.6.9", + "finalhandler": "1.1.0", + "parseurl": "~1.3.2", + "utils-merge": "1.0.1" + }, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/connect-history-api-fallback": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-1.6.0.tgz", + "integrity": "sha512-e54B99q/OUoH64zYYRf3HBP5z24G38h5D3qXu23JGRoigpX5Ss4r9ZnDk3g0Z8uQC2x2lPaJ+UlWBc1ZWBWdLg==", + "dev": true, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/connect/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/cookie": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.1.tgz", + "integrity": "sha512-ZwrFkGJxUR3EIoXtO+yVE69Eb7KlixbaeAWfBQB9vVsNn/o+Yw69gBWSSDK825hQNdN+wF8zELf3dFNl/kxkUA==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/copy-and-watch": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/copy-and-watch/-/copy-and-watch-0.1.5.tgz", + "integrity": "sha512-DHWIPXhboSoAeWWMnG3GTetgzunjX9MLVuLb6yfLxEYzVu56C3LHZ5GNelA1wNChLWKM4Xmspg8np2yRs15Zsg==", + "dev": true, + "dependencies": { + "chokidar": "3.4.1", + "colors": "1.4.0", + "glob": "7.1.6", + "glob-parent": "5.1.1" + }, + "bin": { + "copy-and-watch": "bin/copy-and-watch" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/copy-and-watch/node_modules/chokidar": { + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.4.1.tgz", + "integrity": "sha512-TQTJyr2stihpC4Sya9hs2Xh+O2wf+igjL36Y75xx2WdHuiICcn/XJza46Jwt0eT5hVpQOzo3FpY3cj3RVYLX0g==", + "dev": true, + "dependencies": { + "anymatch": "~3.1.1", + "braces": "~3.0.2", + "glob-parent": "~5.1.0", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.4.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "optionalDependencies": { + "fsevents": "~2.1.2" + } + }, + "node_modules/copy-and-watch/node_modules/fsevents": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.1.3.tgz", + "integrity": "sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ==", + "deprecated": "\"Please update to latest v2.3 or v2.2\"", + "dev": true, + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/copy-and-watch/node_modules/glob-parent": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.1.tgz", + "integrity": "sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/copy-and-watch/node_modules/readdirp": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.4.0.tgz", + "integrity": "sha512-0xe001vZBnJEK+uKcj8qOhyAKPzIT+gStxWr3LCB0DwcXR5NZJ3IaC+yGnHCYzB/S7ov3m3EEbZI2zeNvX+hGQ==", + "dev": true, + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/date-fns": { + "version": "2.19.0", + "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-2.19.0.tgz", + "integrity": "sha512-X3bf2iTPgCAQp9wvjOQytnf5vO5rESYRXlPIVcgSbtT5OTScPcsf9eZU+B/YIkKAtYr5WeCii58BgATrNitlWg==", + "dev": true, + "engines": { + "node": ">=0.11" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/date-fns" + } + }, + "node_modules/debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/deepmerge": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", + "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/destroy": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", + "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=", + "dev": true + }, + "node_modules/dev-ip": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/dev-ip/-/dev-ip-1.0.1.tgz", + "integrity": "sha1-p2o+0YVb56ASu4rBbLgPPADcKPA=", + "dev": true, + "bin": { + "dev-ip": "lib/dev-ip.js" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/dlv": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz", + "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==", + "dev": true + }, + "node_modules/easy-extender": { + "version": "2.3.4", + "resolved": "https://registry.npmjs.org/easy-extender/-/easy-extender-2.3.4.tgz", + "integrity": "sha512-8cAwm6md1YTiPpOvDULYJL4ZS6WfM5/cTeVVh4JsvyYZAoqlRVUpHL9Gr5Fy7HA6xcSZicUia3DeAgO3Us8E+Q==", + "dev": true, + "dependencies": { + "lodash": "^4.17.10" + }, + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/eazy-logger": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/eazy-logger/-/eazy-logger-3.1.0.tgz", + "integrity": "sha512-/snsn2JqBtUSSstEl4R0RKjkisGHAhvYj89i7r3ytNUKW12y178KDZwXLXIgwDqLW6E/VRMT9qfld7wvFae8bQ==", + "dev": true, + "dependencies": { + "tfunk": "^4.0.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=", + "dev": true + }, + "node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "node_modules/encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/engine.io": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-3.5.0.tgz", + "integrity": "sha512-21HlvPUKaitDGE4GXNtQ7PLP0Sz4aWLddMPw2VTyFz1FVZqu/kZsJUO8WNpKuE/OCL7nkfRaOui2ZCJloGznGA==", + "dev": true, + "dependencies": { + "accepts": "~1.3.4", + "base64id": "2.0.0", + "cookie": "~0.4.1", + "debug": "~4.1.0", + "engine.io-parser": "~2.2.0", + "ws": "~7.4.2" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/engine.io-client": { + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-3.5.1.tgz", + "integrity": "sha512-oVu9kBkGbcggulyVF0kz6BV3ganqUeqXvD79WOFKa+11oK692w1NyFkuEj4xrkFRpZhn92QOqTk4RQq5LiBXbQ==", + "dev": true, + "dependencies": { + "component-emitter": "~1.3.0", + "component-inherit": "0.0.3", + "debug": "~3.1.0", + "engine.io-parser": "~2.2.0", + "has-cors": "1.1.0", + "indexof": "0.0.1", + "parseqs": "0.0.6", + "parseuri": "0.0.6", + "ws": "~7.4.2", + "xmlhttprequest-ssl": "~1.5.4", + "yeast": "0.1.2" + } + }, + "node_modules/engine.io-parser": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-2.2.1.tgz", + "integrity": "sha512-x+dN/fBH8Ro8TFwJ+rkB2AmuVw9Yu2mockR/p3W8f8YtExwFgDvBDi0GWyb4ZLkpahtDGZgtr3zLovanJghPqg==", + "dev": true, + "dependencies": { + "after": "0.8.2", + "arraybuffer.slice": "~0.0.7", + "base64-arraybuffer": "0.1.4", + "blob": "0.0.5", + "has-binary2": "~1.0.2" + } + }, + "node_modules/engine.io/node_modules/debug": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", + "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "deprecated": "Debug versions >=3.2.0 <3.2.7 || >=4 <4.3.1 have a low-severity ReDos regression when used in a Node.js environment. It is recommended you upgrade to 3.2.7 or 4.3.1. (https://github.com/visionmedia/debug/issues/797)", + "dev": true, + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/engine.io/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/error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "dev": true, + "dependencies": { + "is-arrayish": "^0.2.1" + } + }, + "node_modules/escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=", + "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": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/estree-walker": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-1.0.1.tgz", + "integrity": "sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg==", + "dev": true + }, + "node_modules/etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/eventemitter3": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", + "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", + "dev": true + }, + "node_modules/exec-sh": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/exec-sh/-/exec-sh-0.2.2.tgz", + "integrity": "sha512-FIUCJz1RbuS0FKTdaAafAByGS0CPvU3R0MeHxgtl+djzCc//F8HakL8GzmVNZanasTbTAY/3DRFA0KpVqj/eAw==", + "dev": true, + "dependencies": { + "merge": "^1.2.0" + } + }, + "node_modules/fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/finalhandler": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.0.tgz", + "integrity": "sha1-zgtoVbRYU+eRsvzGgARtiCU91/U=", + "dev": true, + "dependencies": { + "debug": "2.6.9", + "encodeurl": "~1.0.1", + "escape-html": "~1.0.3", + "on-finished": "~2.3.0", + "parseurl": "~1.3.2", + "statuses": "~1.3.1", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/finalhandler/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/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/follow-redirects": { + "version": "1.13.3", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.13.3.tgz", + "integrity": "sha512-DUgl6+HDzB0iEptNQEXLx/KhTmDb8tZUHSeLqpnjpknR70H0nC2t9N73BK6fN4hOvJ84pKlIQVQ4k5FFlBedKA==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, + "node_modules/fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fs-extra": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-3.0.1.tgz", + "integrity": "sha1-N5TzeMWLNC6n27sjCVEJxLO2IpE=", + "dev": true, + "dependencies": { + "graceful-fs": "^4.1.2", + "jsonfile": "^3.0.0", + "universalify": "^0.1.0" + } + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "dev": true + }, + "node_modules/fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "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-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true, + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/glob": { + "version": "7.1.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", + "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "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==", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.6", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.6.tgz", + "integrity": "sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ==", + "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": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", + "dev": true, + "dependencies": { + "ansi-regex": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/has-binary2": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-binary2/-/has-binary2-1.0.3.tgz", + "integrity": "sha512-G1LWKhDSvhGeAQ8mPVQlqNcOB2sJdwATtZKl2pDKKHfpf/rYj24lkinxf69blJbnsvtqqNU+L3SL50vzZhXOnw==", + "dev": true, + "dependencies": { + "isarray": "2.0.1" + } + }, + "node_modules/has-cors": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-cors/-/has-cors-1.1.0.tgz", + "integrity": "sha1-XkdHk/fqmEPRu5nCPu9J/xJv/zk=", + "dev": true + }, + "node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/hosted-git-info": { + "version": "2.8.8", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.8.tgz", + "integrity": "sha512-f/wzC2QaWBs7t9IYqB4T3sR1xviIViXJRJTWBlx2Gf3g0Xi5vI7Yy4koXQ1c9OYDGHN9sBy1DQ2AB8fqZBWhUg==", + "dev": true + }, + "node_modules/http-errors": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.3.tgz", + "integrity": "sha512-ZTTX0MWrsQ2ZAhA1cejAwDLycFsd7I7nVtnkT3Ol0aqodaKW+0CTZDQ1uBv5whptCnc8e8HeRRJxRs0kmm/Qfw==", + "dev": true, + "dependencies": { + "depd": "~1.1.2", + "inherits": "2.0.4", + "setprototypeof": "1.1.1", + "statuses": ">= 1.5.0 < 2", + "toidentifier": "1.0.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/http-errors/node_modules/statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/http-proxy": { + "version": "1.18.1", + "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz", + "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==", + "dev": true, + "dependencies": { + "eventemitter3": "^4.0.0", + "follow-redirects": "^1.0.0", + "requires-port": "^1.0.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dev": true, + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/immutable": { + "version": "3.8.2", + "resolved": "https://registry.npmjs.org/immutable/-/immutable-3.8.2.tgz", + "integrity": "sha1-wkOZUUVbs5kT2vKBN28VMOEErfM=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/indexof": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/indexof/-/indexof-0.0.1.tgz", + "integrity": "sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10=", + "dev": true + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "dev": true, + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "node_modules/is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", + "dev": true + }, + "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==", + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-core-module": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.2.0.tgz", + "integrity": "sha512-XRAfAdyyY5F5cOXn7hYQDqh2Xmii+DEfIcQGxK/uNwMHhIkPWO0g8msXcbzLe+MpGoR951MlqM/2iIlU4vKDdQ==", + "dev": true, + "dependencies": { + "has": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-glob": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", + "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-module": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz", + "integrity": "sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==", + "dev": true + }, + "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==", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-number-like": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/is-number-like/-/is-number-like-1.0.8.tgz", + "integrity": "sha512-6rZi3ezCyFcn5L71ywzz2bS5b2Igl1En3eTlZlvKjpz1n3IZLAYMbKYAIQgFmEu0GENg92ziU/faEOA/aixjbA==", + "dev": true, + "dependencies": { + "lodash.isfinite": "^3.3.2" + } + }, + "node_modules/is-wsl": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", + "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/isarray": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.1.tgz", + "integrity": "sha1-o32U7ZzaLVmGXJ92/llu4fM4dB4=", + "dev": true + }, + "node_modules/json-parse-better-errors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", + "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", + "dev": true + }, + "node_modules/jsonfile": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-3.0.1.tgz", + "integrity": "sha1-pezG9l9T9mLEQVx2daAzHQmS7GY=", + "dev": true, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/limiter": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/limiter/-/limiter-1.1.5.tgz", + "integrity": "sha512-FWWMIEOxz3GwUI4Ts/IvgVy6LPvoMPgjMdQ185nN6psJyBJ4yOpzqm695/h5umdLJg2vW3GR5iG11MAkR2AzJA==", + "dev": true + }, + "node_modules/localtunnel": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/localtunnel/-/localtunnel-2.0.1.tgz", + "integrity": "sha512-LiaI5wZdz0xFkIQpXbNI62ZnNn8IMsVhwxHmhA+h4vj8R9JG/07bQHWwQlyy7b95/5fVOCHJfIHv+a5XnkvaJA==", + "dev": true, + "dependencies": { + "axios": "0.21.1", + "debug": "4.3.1", + "openurl": "1.1.1", + "yargs": "16.2.0" + }, + "bin": { + "lt": "bin/lt.js" + }, + "engines": { + "node": ">=8.3.0" + } + }, + "node_modules/localtunnel/node_modules/debug": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", + "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/localtunnel/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/localtunnel/node_modules/yargs": { + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "dev": true, + "dependencies": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" + }, + "engines": { + "node": ">=10" + } + }, + "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.isfinite": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/lodash.isfinite/-/lodash.isfinite-3.3.2.tgz", + "integrity": "sha1-+4m2WpqAKBgz8LdHizpRBPiY67M=", + "dev": true + }, + "node_modules/maddoc-cli": { + "resolved": "madlib_modules/MadDocCli", + "link": true + }, + "node_modules/madmarkdown-renderer": { + "resolved": "madlib_modules/MadMarkdownRenderer", + "link": true + }, + "node_modules/madui": { + "resolved": "madlib_modules/MadUI", + "link": true + }, + "node_modules/merge": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/merge/-/merge-1.2.1.tgz", + "integrity": "sha512-VjFo4P5Whtj4vsLzsYBu5ayHhoHJ0UqNm7ibvShmbmoz7tGi0vXaoJbGdB+GmDMLUdg8DpQXEIeVDAe8MaABvQ==", + "dev": true + }, + "node_modules/micromatch": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.2.tgz", + "integrity": "sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q==", + "dev": true, + "dependencies": { + "braces": "^3.0.1", + "picomatch": "^2.0.5" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/mime": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.4.1.tgz", + "integrity": "sha512-KI1+qOZu5DcW6wayYHSzR/tXKCDC5Om4s1z2QJjDULzLcmf3DvzS7oluY4HCTrc+9FiKmWUgeNLg7W3uIQvxtQ==", + "dev": true, + "bin": { + "mime": "cli.js" + } + }, + "node_modules/mime-db": { + "version": "1.46.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.46.0.tgz", + "integrity": "sha512-svXaP8UQRZ5K7or+ZmfNhg2xX3yKDMUzqadsSqi4NCH/KomcH75MAMYAGVlvXn4+b/xOPhS3I2uHKRUzvjY7BQ==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.29", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.29.tgz", + "integrity": "sha512-Y/jMt/S5sR9OaqteJtslsFZKWOIIqMACsJSiHghlCAyhf7jfVYjKBmLiX8OgpWeW+fjJ2b+Az69aPFPkUOY6xQ==", + "dev": true, + "dependencies": { + "mime-db": "1.46.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minimist": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", + "dev": true + }, + "node_modules/mitt": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/mitt/-/mitt-1.2.0.tgz", + "integrity": "sha512-r6lj77KlwqLhIUku9UWYes7KJtsczvolZkzp8hbaDPPaE24OmWl5s539Mytlj22siEQKosZ26qCBgda2PKwoJw==", + "dev": true + }, + "node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, + "node_modules/negotiator": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", + "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/normalize-package-data": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", + "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", + "dev": true, + "dependencies": { + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" + } + }, + "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==", + "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": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", + "dev": true, + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dev": true, + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/openurl": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/openurl/-/openurl-1.1.1.tgz", + "integrity": "sha1-OHW0sO96UsFW8NtB1GCduw+Us4c=", + "dev": true + }, + "node_modules/opn": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/opn/-/opn-5.3.0.tgz", + "integrity": "sha512-bYJHo/LOmoTd+pfiYhfZDnf9zekVJrY+cnS2a5F2x+w5ppvTqObojTP7WiFG+kVZs9Inw+qQ/lw7TroWwhdd2g==", + "dev": true, + "dependencies": { + "is-wsl": "^1.1.0" + }, + "engines": { + "node": ">=4" + } + }, + "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/parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", + "dev": true, + "dependencies": { + "error-ex": "^1.3.1", + "json-parse-better-errors": "^1.0.1" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/parseqs": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/parseqs/-/parseqs-0.0.6.tgz", + "integrity": "sha512-jeAGzMDbfSHHA091hr0r31eYfTig+29g3GKKE/PPbEQ65X0lmMwlEoqmhzu0iztID5uJpZsFlUPDP8ThPL7M8w==", + "dev": true + }, + "node_modules/parseuri": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/parseuri/-/parseuri-0.0.6.tgz", + "integrity": "sha512-AUjen8sAkGgao7UyCX6Ahv0gIK2fABKmYjvP4xmy5JaKvcbTRueIqIPHLAfq30xJddqSE033IOMUSOMCcK3Sow==", + "dev": true + }, + "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/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": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-parse": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", + "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==", + "dev": true + }, + "node_modules/picomatch": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.2.tgz", + "integrity": "sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg==", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/portscanner": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/portscanner/-/portscanner-2.1.1.tgz", + "integrity": "sha1-6rtAnk3iSVD1oqUW01rnaTQ/u5Y=", + "dev": true, + "dependencies": { + "async": "1.5.2", + "is-number-like": "^1.0.3" + }, + "engines": { + "node": ">=0.4", + "npm": ">=1.0.0" + } + }, + "node_modules/qs": { + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.2.3.tgz", + "integrity": "sha1-HPyyXBCpsrSDBT/zn138kjOQjP4=", + "dev": true, + "engines": { + "node": ">=0.6" + } + }, + "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/raw-body": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.1.tgz", + "integrity": "sha512-9WmIKF6mkvA0SLmA2Knm9+qj89e+j1zqgyn8aXGd7+nAduPoqgI9lO57SAZNn/Byzo5P7JhXTyg9PzaJbH73bA==", + "dev": true, + "dependencies": { + "bytes": "3.1.0", + "http-errors": "1.7.3", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/read-pkg": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-4.0.1.tgz", + "integrity": "sha1-ljYlN48+HE1IyFhytabsfV0JMjc=", + "dev": true, + "dependencies": { + "normalize-package-data": "^2.3.2", + "parse-json": "^4.0.0", + "pify": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/readdirp": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.5.0.tgz", + "integrity": "sha512-cMhu7c/8rdhkHXWsY+osBhfSy0JikwpHK/5+imo+LpeasTF8ouErHrlYkwT0++njiyuDvc7OFY5T3ukvZ8qmFQ==", + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/require-main-filename": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", + "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", + "dev": true + }, + "node_modules/requires-port": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", + "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=", + "dev": true + }, + "node_modules/resolve": { + "version": "1.20.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", + "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", + "dev": true, + "dependencies": { + "is-core-module": "^2.2.0", + "path-parse": "^1.0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/resp-modifier": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/resp-modifier/-/resp-modifier-6.0.2.tgz", + "integrity": "sha1-sSTeXE+6/LpUH0j/pzlw9KpFa08=", + "dev": true, + "dependencies": { + "debug": "^2.2.0", + "minimatch": "^3.0.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/resp-modifier/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/rollup": { + "version": "2.79.1", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.79.1.tgz", + "integrity": "sha512-uKxbd0IhMZOhjAiD5oAFp7BqvkA4Dv47qpOCtaNvng4HBwdbWtdOh8f5nZNuk2rp51PMGk3bzfWu5oayNEuYnw==", + "dev": true, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=10.0.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/rx": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/rx/-/rx-4.1.0.tgz", + "integrity": "sha1-pfE/957zt0D+MKqAP7CfmIBdR4I=", + "dev": true + }, + "node_modules/rxjs": { + "version": "5.5.12", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-5.5.12.tgz", + "integrity": "sha512-xx2itnL5sBbqeeiVgNPVuQQ1nC8Jp2WfNJhXWHmElW9YmrpS9UVnNzhP3EH3HFqexO5Tlp8GhYY+WEcqcVMvGw==", + "dev": true, + "dependencies": { + "symbol-observable": "1.0.1" + }, + "engines": { + "npm": ">=2.0.0" + } + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "dev": true + }, + "node_modules/sass": { + "version": "1.32.8", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.32.8.tgz", + "integrity": "sha512-Sl6mIeGpzjIUZqvKnKETfMf0iDAswD9TNlv13A7aAF3XZlRPMq4VvJWBC2N2DXbp94MQVdNSFG6LfF/iOXrPHQ==", + "dependencies": { + "chokidar": ">=2.0.0 <4.0.0" + }, + "bin": { + "sass": "sass.js" + }, + "engines": { + "node": ">=8.9.0" + } + }, + "node_modules/semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true, + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/send": { + "version": "0.16.2", + "resolved": "https://registry.npmjs.org/send/-/send-0.16.2.tgz", + "integrity": "sha512-E64YFPUssFHEFBvpbbjr44NCLtI1AohxQ8ZSiJjQLskAdKuriYEP6VyGEsRDH8ScozGpkaX1BGvhanqCwkcEZw==", + "dev": true, + "dependencies": { + "debug": "2.6.9", + "depd": "~1.1.2", + "destroy": "~1.0.4", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "~1.6.2", + "mime": "1.4.1", + "ms": "2.0.0", + "on-finished": "~2.3.0", + "range-parser": "~1.2.0", + "statuses": "~1.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/send/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/send/node_modules/http-errors": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", + "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=", + "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/send/node_modules/inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", + "dev": true + }, + "node_modules/send/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/send/node_modules/statuses": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz", + "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/serve-index": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz", + "integrity": "sha1-03aNabHn2C5c4FD/9bRTvqEqkjk=", + "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/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/serve-index/node_modules/http-errors": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", + "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=", + "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": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", + "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/serve-index/node_modules/statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/serve-static": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.13.2.tgz", + "integrity": "sha512-p/tdJrO4U387R9oMjb1oj7qSMaMfmOyd4j9hOFoxZe2baQszgHcSWjuya/CiT5kgZZKRudHNOA0pYXOl8rQ5nw==", + "dev": true, + "dependencies": { + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.2", + "send": "0.16.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/server-destroy": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/server-destroy/-/server-destroy-1.0.1.tgz", + "integrity": "sha1-8Tv5KOQrnD55OD5hzDmYtdFObN0=", + "dev": true + }, + "node_modules/set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", + "dev": true + }, + "node_modules/setprototypeof": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", + "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==", + "dev": true + }, + "node_modules/snabbdom": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/snabbdom/-/snabbdom-3.6.2.tgz", + "integrity": "sha512-ig5qOnCDbugFntKi6c7Xlib8bA6xiJVk8O+WdFrV3wxbMqeHO0hXFQC4nAhPVWfZfi8255lcZkNhtIBINCc4+Q==", + "engines": { + "node": ">=12.17.0" + } + }, + "node_modules/socket.io": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-2.4.0.tgz", + "integrity": "sha512-9UPJ1UTvKayuQfVv2IQ3k7tCQC/fboDyIK62i99dAQIyHKaBsNdTpwHLgKJ6guRWxRtC9H+138UwpaGuQO9uWQ==", + "dev": true, + "dependencies": { + "debug": "~4.1.0", + "engine.io": "~3.5.0", + "has-binary2": "~1.0.2", + "socket.io-adapter": "~1.1.0", + "socket.io-client": "2.4.0", + "socket.io-parser": "~3.4.0" + } + }, + "node_modules/socket.io-adapter": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-1.1.2.tgz", + "integrity": "sha512-WzZRUj1kUjrTIrUKpZLEzFZ1OLj5FwLlAFQs9kuZJzJi5DKdU7FsWc36SNmA8iDOtwBQyT8FkrriRM8vXLYz8g==", + "dev": true + }, + "node_modules/socket.io-client": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-2.4.0.tgz", + "integrity": "sha512-M6xhnKQHuuZd4Ba9vltCLT9oa+YvTsP8j9NcEiLElfIg8KeYPyhWOes6x4t+LTAC8enQbE/995AdTem2uNyKKQ==", + "dev": true, + "dependencies": { + "backo2": "1.0.2", + "component-bind": "1.0.0", + "component-emitter": "~1.3.0", + "debug": "~3.1.0", + "engine.io-client": "~3.5.0", + "has-binary2": "~1.0.2", + "indexof": "0.0.1", + "parseqs": "0.0.6", + "parseuri": "0.0.6", + "socket.io-parser": "~3.3.0", + "to-array": "0.1.4" + } + }, + "node_modules/socket.io-parser": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-3.3.2.tgz", + "integrity": "sha512-FJvDBuOALxdCI9qwRrO/Rfp9yfndRtc1jSgVgV8FDraihmSP/MLGD5PEuJrNfjALvcQ+vMDM/33AWOYP/JSjDg==", + "dev": true, + "dependencies": { + "component-emitter": "~1.3.0", + "debug": "~3.1.0", + "isarray": "2.0.1" + } + }, + "node_modules/socket.io/node_modules/component-emitter": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz", + "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=", + "dev": true + }, + "node_modules/socket.io/node_modules/debug": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", + "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "deprecated": "Debug versions >=3.2.0 <3.2.7 || >=4 <4.3.1 have a low-severity ReDos regression when used in a Node.js environment. It is recommended you upgrade to 3.2.7 or 4.3.1. (https://github.com/visionmedia/debug/issues/797)", + "dev": true, + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/socket.io/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/socket.io/node_modules/socket.io-parser": { + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-3.4.1.tgz", + "integrity": "sha512-11hMgzL+WCLWf1uFtHSNvliI++tcRUWdoeYuwIl+Axvwy9z2gQM+7nJyN3STj1tLj5JyIUH8/gpDGxzAlDdi0A==", + "dev": true, + "dependencies": { + "component-emitter": "1.2.1", + "debug": "~4.1.0", + "isarray": "2.0.1" + } + }, + "node_modules/spawn-command": { + "version": "0.0.2-1", + "resolved": "https://registry.npmjs.org/spawn-command/-/spawn-command-0.0.2-1.tgz", + "integrity": "sha1-YvXpRmmBwbeW3Fkpk34RycaSG9A=", + "dev": true + }, + "node_modules/spdx-correct": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz", + "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==", + "dev": true, + "dependencies": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/spdx-exceptions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", + "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", + "dev": true + }, + "node_modules/spdx-expression-parse": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", + "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", + "dev": true, + "dependencies": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/spdx-license-ids": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.7.tgz", + "integrity": "sha512-U+MTEOO0AiDzxwFvoa4JVnMV6mZlJKk2sBLt90s7G0Gd0Mlknc7kxEn3nuDPNZRta7O2uy8oLcZLVT+4sqNZHQ==", + "dev": true + }, + "node_modules/statuses": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.3.1.tgz", + "integrity": "sha1-+vUbnrdKrvOzrPStX2Gr8ky3uT4=", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/stream-throttle": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/stream-throttle/-/stream-throttle-0.1.3.tgz", + "integrity": "sha1-rdV8jXzHOoFjDTHNVdOWHPr7qcM=", + "dev": true, + "dependencies": { + "commander": "^2.2.0", + "limiter": "^1.0.5" + }, + "bin": { + "throttleproxy": "bin/throttleproxy.js" + }, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/string-width": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz", + "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width/node_modules/ansi-regex": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width/node_modules/strip-ansi": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dev": true, + "dependencies": { + "ansi-regex": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/symbol-observable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-1.0.1.tgz", + "integrity": "sha1-g0D8RwLDEi310iKI+IKD9RPT/dQ=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/tfunk": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/tfunk/-/tfunk-4.0.0.tgz", + "integrity": "sha512-eJQ0dGfDIzWNiFNYFVjJ+Ezl/GmwHaFTBTjrtqNPW0S7cuVDBrZrmzUz6VkMeCR4DZFqhd4YtLwsw3i2wYHswQ==", + "dev": true, + "dependencies": { + "chalk": "^1.1.3", + "dlv": "^1.1.3" + } + }, + "node_modules/to-array": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/to-array/-/to-array-0.1.4.tgz", + "integrity": "sha1-F+bBH3PdTz10zaek/zI46a2b+JA=", + "dev": true + }, + "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==", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/toidentifier": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", + "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==", + "dev": true, + "engines": { + "node": ">=0.6" + } + }, + "node_modules/tree-kill": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz", + "integrity": "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==", + "dev": true, + "bin": { + "tree-kill": "cli.js" + } + }, + "node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + }, + "node_modules/ua-parser-js": { + "version": "0.7.24", + "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.24.tgz", + "integrity": "sha512-yo+miGzQx5gakzVK3QFfN0/L9uVhosXBBO7qmnk7c2iw1IhL212wfA3zbnI54B0obGwC/5NWub/iT9sReMx+Fw==", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/undici-types": { + "version": "5.26.5", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", + "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==", + "dev": true + }, + "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/unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=", + "dev": true, + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/validate-npm-package-license": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", + "dev": true, + "dependencies": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, + "node_modules/watch": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/watch/-/watch-1.0.2.tgz", + "integrity": "sha1-NApxe952Vyb6CqB9ch4BR6VR3ww=", + "dev": true, + "dependencies": { + "exec-sh": "^0.2.0", + "minimist": "^1.2.0" + }, + "bin": { + "watch": "cli.js" + }, + "engines": { + "node": ">=0.1.95" + } + }, + "node_modules/which-module": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", + "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", + "dev": true + }, + "node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi/node_modules/ansi-regex": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi/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/wrap-ansi/node_modules/strip-ansi": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "dev": true + }, + "node_modules/ws": { + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.4.tgz", + "integrity": "sha512-Qm8k8ojNQIMx7S+Zp8u/uHOx7Qazv3Yv4q68MiWWWOJhiwG5W3x7iqmRtJo8xxrciZUY4vRxUTJCKuRnF28ZZw==", + "dev": true, + "engines": { + "node": ">=8.3.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/xmlhttprequest-ssl": { + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.5.5.tgz", + "integrity": "sha1-wodrBhaKrcQOV9l+gRkayPQ5iz4=", + "dev": true, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/y18n": { + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.5.tgz", + "integrity": "sha512-hsRUr4FFrvhhRH12wOdfs38Gy7k2FFzB9qgN9v3aLykRq0dRcdcpz5C9FxdS2NuhOrI/628b/KSTJ3rwHysYSg==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/yargs": { + "version": "15.4.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", + "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", + "dev": true, + "dependencies": { + "cliui": "^6.0.0", + "decamelize": "^1.2.0", + "find-up": "^4.1.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^4.2.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^18.1.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/yargs-parser": { + "version": "20.2.6", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.6.tgz", + "integrity": "sha512-AP1+fQIWSM/sMiET8fyayjx/J+JmTPt2Mr0FkrgqB4todtfa53sOsrSAcIrJRD5XS20bKUwaDIuMkWKCEiQLKA==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/yargs/node_modules/ansi-regex": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/yargs/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/yargs/node_modules/cliui": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", + "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", + "dev": true, + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^6.2.0" + } + }, + "node_modules/yargs/node_modules/strip-ansi": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/yargs/node_modules/wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/yargs/node_modules/y18n": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.1.tgz", + "integrity": "sha512-wNcy4NvjMYL8gogWWYAO7ZFWFfHcbdbE57tZO8e4cbpj8tfUcwrwqSl3ad8HxpYWCdXcJUCeKKZS62Av1affwQ==", + "dev": true + }, + "node_modules/yargs/node_modules/yargs-parser": { + "version": "18.1.3", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", + "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", + "dev": true, + "dependencies": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/yeast": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/yeast/-/yeast-0.1.2.tgz", + "integrity": "sha1-AI4G2AlDIMNy28L47XagymyKxBk=", + "dev": true + } + }, + "dependencies": { + "@rollup/plugin-node-resolve": { + "version": "11.2.1", + "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-11.2.1.tgz", + "integrity": "sha512-yc2n43jcqVyGE2sqV5/YCmocy9ArjVAP/BeXyTtADTBBX6V0e5UMqwO8CdQ0kzjb6zu5P1qMzsScCMRvE9OlVg==", + "dev": true, + "requires": { + "@rollup/pluginutils": "^3.1.0", + "@types/resolve": "1.17.1", + "builtin-modules": "^3.1.0", + "deepmerge": "^4.2.2", + "is-module": "^1.0.0", + "resolve": "^1.19.0" + } + }, + "@rollup/pluginutils": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-3.1.0.tgz", + "integrity": "sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg==", + "dev": true, + "requires": { + "@types/estree": "0.0.39", + "estree-walker": "^1.0.1", + "picomatch": "^2.2.2" + } + }, + "@types/estree": { + "version": "0.0.39", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.39.tgz", + "integrity": "sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==", + "dev": true + }, + "@types/node": { + "version": "20.12.11", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.12.11.tgz", + "integrity": "sha512-vDg9PZ/zi+Nqp6boSOT7plNuthRugEKixDv5sFTIpkE89MmNtEArAShI4mxuX2+UrLEe9pxC1vm2cjm9YlWbJw==", + "dev": true, + "requires": { + "undici-types": "~5.26.4" + } + }, + "@types/resolve": { + "version": "1.17.1", + "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-1.17.1.tgz", + "integrity": "sha512-yy7HuzQhj0dhGpD8RLXSZWEkLsV9ibvxvi6EiJ3bkqLAO1RGo0WbkWQiwpRlSFymTJRz0d3k5LM3kkx8ArDbLw==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "accepts": { + "version": "1.3.7", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", + "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==", + "dev": true, + "requires": { + "mime-types": "~2.1.24", + "negotiator": "0.6.2" + } + }, + "after": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/after/-/after-0.8.2.tgz", + "integrity": "sha1-/ts5T58OAqqXaOcCvaI7UF+ufh8=", + "dev": true + }, + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true + }, + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + }, + "anymatch": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.1.tgz", + "integrity": "sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg==", + "requires": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + } + }, + "arraybuffer.slice": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/arraybuffer.slice/-/arraybuffer.slice-0.0.7.tgz", + "integrity": "sha512-wGUIVQXuehL5TCqQun8OW81jGzAWycqzFF8lFp+GOM5BXLYj3bKNsYC4daB7n6XjCqxQA/qgTJ+8ANR3acjrog==", + "dev": true + }, + "async": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", + "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=", + "dev": true + }, + "async-each-series": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/async-each-series/-/async-each-series-0.1.1.tgz", + "integrity": "sha1-dhfBkXQB/Yykooqtzj266Yr+tDI=", + "dev": true + }, + "axios": { + "version": "0.21.1", + "resolved": "https://registry.npmjs.org/axios/-/axios-0.21.1.tgz", + "integrity": "sha512-dKQiRHxGD9PPRIUNIWvZhPTPpl1rf/OxTYKsqKUDjBwYylTvV7SjSHJb9ratfyzM6wCdLCOYLzs73qpg5c4iGA==", + "dev": true, + "requires": { + "follow-redirects": "^1.10.0" + } + }, + "backo2": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/backo2/-/backo2-1.0.2.tgz", + "integrity": "sha1-MasayLEpNjRj41s+u2n038+6eUc=", + "dev": true + }, + "balanced-match": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", + "dev": true + }, + "base64-arraybuffer": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-0.1.4.tgz", + "integrity": "sha1-mBjHngWbE1X5fgQooBfIOOkLqBI=", + "dev": true + }, + "base64id": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/base64id/-/base64id-2.0.0.tgz", + "integrity": "sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog==", + "dev": true + }, + "batch": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", + "integrity": "sha1-3DQxT05nkxgJP8dgJyUl+UvyXBY=", + "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==" + }, + "blob": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/blob/-/blob-0.0.5.tgz", + "integrity": "sha512-gaqbzQPqOoamawKg0LGVd7SzLgXS+JH61oWprSLH+P+abTczqJbhTR8CmJ2u9/bUYNmHTGJx/UEmn6doAvvuig==", + "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==", + "requires": { + "fill-range": "^7.0.1" + } + }, + "browser-sync": { + "version": "2.26.14", + "resolved": "https://registry.npmjs.org/browser-sync/-/browser-sync-2.26.14.tgz", + "integrity": "sha512-3TtpsheGolJT6UFtM2CZWEcGJmI4ZEvoCKiKE2bvcDnPxRkhQT4nIGVtfiyPcoHKXGM0LwMOZmYJNWfiNfVXWA==", + "dev": true, + "requires": { + "browser-sync-client": "^2.26.14", + "browser-sync-ui": "^2.26.14", + "bs-recipes": "1.3.4", + "bs-snippet-injector": "^2.0.1", + "chokidar": "^3.5.1", + "connect": "3.6.6", + "connect-history-api-fallback": "^1", + "dev-ip": "^1.0.1", + "easy-extender": "^2.3.4", + "eazy-logger": "3.1.0", + "etag": "^1.8.1", + "fresh": "^0.5.2", + "fs-extra": "3.0.1", + "http-proxy": "^1.18.1", + "immutable": "^3", + "localtunnel": "^2.0.1", + "micromatch": "^4.0.2", + "opn": "5.3.0", + "portscanner": "2.1.1", + "qs": "6.2.3", + "raw-body": "^2.3.2", + "resp-modifier": "6.0.2", + "rx": "4.1.0", + "send": "0.16.2", + "serve-index": "1.9.1", + "serve-static": "1.13.2", + "server-destroy": "1.0.1", + "socket.io": "2.4.0", + "ua-parser-js": "^0.7.18", + "yargs": "^15.4.1" + } + }, + "browser-sync-client": { + "version": "2.26.14", + "resolved": "https://registry.npmjs.org/browser-sync-client/-/browser-sync-client-2.26.14.tgz", + "integrity": "sha512-be0m1MchmKv/26r/yyyolxXcBi052aYrmaQep5nm8YNMjFcEyzv0ZoOKn/c3WEXNlEB/KeXWaw70fAOJ+/F1zQ==", + "dev": true, + "requires": { + "etag": "1.8.1", + "fresh": "0.5.2", + "mitt": "^1.1.3", + "rxjs": "^5.5.6" + } + }, + "browser-sync-ui": { + "version": "2.26.14", + "resolved": "https://registry.npmjs.org/browser-sync-ui/-/browser-sync-ui-2.26.14.tgz", + "integrity": "sha512-6oT1sboM4KVNnWCCJDMGbRIeTBw97toMFQ+srImvwQ6J5t9KMgizaIX8HcKLiemsUMSJkgGM9RVKIpq2UblgOA==", + "dev": true, + "requires": { + "async-each-series": "0.1.1", + "connect-history-api-fallback": "^1", + "immutable": "^3", + "server-destroy": "1.0.1", + "socket.io-client": "^2.4.0", + "stream-throttle": "^0.1.3" + } + }, + "bs-recipes": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/bs-recipes/-/bs-recipes-1.3.4.tgz", + "integrity": "sha1-DS1NSKcYyMBEdp/cT4lZLci2lYU=", + "dev": true + }, + "bs-snippet-injector": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/bs-snippet-injector/-/bs-snippet-injector-2.0.1.tgz", + "integrity": "sha1-YbU5PxH1JVntEgaTEANDtu2wTdU=", + "dev": true + }, + "builtin-modules": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.3.0.tgz", + "integrity": "sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==", + "dev": true + }, + "bytes": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", + "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==", + "dev": true + }, + "camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true + }, + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "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" + } + }, + "chokidar": { + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.1.tgz", + "integrity": "sha512-9+s+Od+W0VJJzawDma/gvBNQqkTiqYTWLuZoyAsivsI4AaWTCzHG06/TMjsf1cYe9Cb97UCEhjz7HvnPk2p/tw==", + "requires": { + "anymatch": "~3.1.1", + "braces": "~3.0.2", + "fsevents": "~2.3.1", + "glob-parent": "~5.1.0", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.5.0" + } + }, + "cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "dev": true, + "requires": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "dev": true + }, + "strip-ansi": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "dev": true, + "requires": { + "ansi-regex": "^5.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": "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 + }, + "component-bind": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/component-bind/-/component-bind-1.0.0.tgz", + "integrity": "sha1-AMYIq33Nk4l8AAllGx06jh5zu9E=", + "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 + }, + "component-inherit": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/component-inherit/-/component-inherit-0.0.3.tgz", + "integrity": "sha1-ZF/ErfWLcrZJ1crmUTVhnbJv8UM=", + "dev": true + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "dev": true + }, + "concurrently": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/concurrently/-/concurrently-5.3.0.tgz", + "integrity": "sha512-8MhqOB6PWlBfA2vJ8a0bSFKATOdWlHiQlk11IfmQBPaHVP8oP2gsh2MObE6UR3hqDHqvaIvLTyceNW6obVuFHQ==", + "dev": true, + "requires": { + "chalk": "^2.4.2", + "date-fns": "^2.0.1", + "lodash": "^4.17.15", + "read-pkg": "^4.0.1", + "rxjs": "^6.5.2", + "spawn-command": "^0.0.2-1", + "supports-color": "^6.1.0", + "tree-kill": "^1.2.2", + "yargs": "^13.3.0" + }, + "dependencies": { + "ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "dev": true + }, + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "dependencies": { + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "cliui": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", + "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", + "dev": true, + "requires": { + "string-width": "^3.1.0", + "strip-ansi": "^5.2.0", + "wrap-ansi": "^5.1.0" + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, + "emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", + "dev": true + }, + "find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "dev": true, + "requires": { + "locate-path": "^3.0.0" + } + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true + }, + "locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "dev": true, + "requires": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + } + }, + "p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "dev": true, + "requires": { + "p-limit": "^2.0.0" + } + }, + "path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", + "dev": true + }, + "rxjs": { + "version": "6.6.6", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.6.tgz", + "integrity": "sha512-/oTwee4N4iWzAMAL9xdGKjkEHmIwupR3oXbQjCKywF1BeFohswF3vZdogbmEF6pZkOsXTzWkrZszrWpQTByYVg==", + "dev": true, + "requires": { + "tslib": "^1.9.0" + } + }, + "string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "dev": true, + "requires": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + } + }, + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "requires": { + "ansi-regex": "^4.1.0" + } + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + }, + "wrap-ansi": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", + "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.0", + "string-width": "^3.0.0", + "strip-ansi": "^5.0.0" + } + }, + "y18n": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.1.tgz", + "integrity": "sha512-wNcy4NvjMYL8gogWWYAO7ZFWFfHcbdbE57tZO8e4cbpj8tfUcwrwqSl3ad8HxpYWCdXcJUCeKKZS62Av1affwQ==", + "dev": true + }, + "yargs": { + "version": "13.3.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz", + "integrity": "sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==", + "dev": true, + "requires": { + "cliui": "^5.0.0", + "find-up": "^3.0.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^3.0.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^13.1.2" + } + }, + "yargs-parser": { + "version": "13.1.2", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz", + "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==", + "dev": true, + "requires": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + } + } + } + }, + "connect": { + "version": "3.6.6", + "resolved": "https://registry.npmjs.org/connect/-/connect-3.6.6.tgz", + "integrity": "sha1-Ce/2xVr3I24TcTWnJXSFi2eG9SQ=", + "dev": true, + "requires": { + "debug": "2.6.9", + "finalhandler": "1.1.0", + "parseurl": "~1.3.2", + "utils-merge": "1.0.1" + }, + "dependencies": { + "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" + } + } + } + }, + "connect-history-api-fallback": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-1.6.0.tgz", + "integrity": "sha512-e54B99q/OUoH64zYYRf3HBP5z24G38h5D3qXu23JGRoigpX5Ss4r9ZnDk3g0Z8uQC2x2lPaJ+UlWBc1ZWBWdLg==", + "dev": true + }, + "cookie": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.1.tgz", + "integrity": "sha512-ZwrFkGJxUR3EIoXtO+yVE69Eb7KlixbaeAWfBQB9vVsNn/o+Yw69gBWSSDK825hQNdN+wF8zELf3dFNl/kxkUA==", + "dev": true + }, + "copy-and-watch": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/copy-and-watch/-/copy-and-watch-0.1.5.tgz", + "integrity": "sha512-DHWIPXhboSoAeWWMnG3GTetgzunjX9MLVuLb6yfLxEYzVu56C3LHZ5GNelA1wNChLWKM4Xmspg8np2yRs15Zsg==", + "dev": true, + "requires": { + "chokidar": "3.4.1", + "colors": "1.4.0", + "glob": "7.1.6", + "glob-parent": "5.1.1" + }, + "dependencies": { + "chokidar": { + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.4.1.tgz", + "integrity": "sha512-TQTJyr2stihpC4Sya9hs2Xh+O2wf+igjL36Y75xx2WdHuiICcn/XJza46Jwt0eT5hVpQOzo3FpY3cj3RVYLX0g==", + "dev": true, + "requires": { + "anymatch": "~3.1.1", + "braces": "~3.0.2", + "fsevents": "~2.1.2", + "glob-parent": "~5.1.0", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.4.0" + } + }, + "fsevents": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.1.3.tgz", + "integrity": "sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ==", + "dev": true, + "optional": true + }, + "glob-parent": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.1.tgz", + "integrity": "sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ==", + "dev": true, + "requires": { + "is-glob": "^4.0.1" + } + }, + "readdirp": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.4.0.tgz", + "integrity": "sha512-0xe001vZBnJEK+uKcj8qOhyAKPzIT+gStxWr3LCB0DwcXR5NZJ3IaC+yGnHCYzB/S7ov3m3EEbZI2zeNvX+hGQ==", + "dev": true, + "requires": { + "picomatch": "^2.2.1" + } + } + } + }, + "date-fns": { + "version": "2.19.0", + "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-2.19.0.tgz", + "integrity": "sha512-X3bf2iTPgCAQp9wvjOQytnf5vO5rESYRXlPIVcgSbtT5OTScPcsf9eZU+B/YIkKAtYr5WeCii58BgATrNitlWg==", + "dev": true + }, + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", + "dev": true + }, + "deepmerge": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", + "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", + "dev": true + }, + "depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=", + "dev": true + }, + "destroy": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", + "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=", + "dev": true + }, + "dev-ip": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/dev-ip/-/dev-ip-1.0.1.tgz", + "integrity": "sha1-p2o+0YVb56ASu4rBbLgPPADcKPA=", + "dev": true + }, + "dlv": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz", + "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==", + "dev": true + }, + "easy-extender": { + "version": "2.3.4", + "resolved": "https://registry.npmjs.org/easy-extender/-/easy-extender-2.3.4.tgz", + "integrity": "sha512-8cAwm6md1YTiPpOvDULYJL4ZS6WfM5/cTeVVh4JsvyYZAoqlRVUpHL9Gr5Fy7HA6xcSZicUia3DeAgO3Us8E+Q==", + "dev": true, + "requires": { + "lodash": "^4.17.10" + } + }, + "eazy-logger": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/eazy-logger/-/eazy-logger-3.1.0.tgz", + "integrity": "sha512-/snsn2JqBtUSSstEl4R0RKjkisGHAhvYj89i7r3ytNUKW12y178KDZwXLXIgwDqLW6E/VRMT9qfld7wvFae8bQ==", + "dev": true, + "requires": { + "tfunk": "^4.0.0" + } + }, + "ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=", + "dev": true + }, + "emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=", + "dev": true + }, + "engine.io": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-3.5.0.tgz", + "integrity": "sha512-21HlvPUKaitDGE4GXNtQ7PLP0Sz4aWLddMPw2VTyFz1FVZqu/kZsJUO8WNpKuE/OCL7nkfRaOui2ZCJloGznGA==", + "dev": true, + "requires": { + "accepts": "~1.3.4", + "base64id": "2.0.0", + "cookie": "~0.4.1", + "debug": "~4.1.0", + "engine.io-parser": "~2.2.0", + "ws": "~7.4.2" + }, + "dependencies": { + "debug": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", + "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + }, + "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 + } + } + }, + "engine.io-client": { + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-3.5.1.tgz", + "integrity": "sha512-oVu9kBkGbcggulyVF0kz6BV3ganqUeqXvD79WOFKa+11oK692w1NyFkuEj4xrkFRpZhn92QOqTk4RQq5LiBXbQ==", + "dev": true, + "requires": { + "component-emitter": "~1.3.0", + "component-inherit": "0.0.3", + "debug": "~3.1.0", + "engine.io-parser": "~2.2.0", + "has-cors": "1.1.0", + "indexof": "0.0.1", + "parseqs": "0.0.6", + "parseuri": "0.0.6", + "ws": "~7.4.2", + "xmlhttprequest-ssl": "~1.5.4", + "yeast": "0.1.2" + } + }, + "engine.io-parser": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-2.2.1.tgz", + "integrity": "sha512-x+dN/fBH8Ro8TFwJ+rkB2AmuVw9Yu2mockR/p3W8f8YtExwFgDvBDi0GWyb4ZLkpahtDGZgtr3zLovanJghPqg==", + "dev": true, + "requires": { + "after": "0.8.2", + "arraybuffer.slice": "~0.0.7", + "base64-arraybuffer": "0.1.4", + "blob": "0.0.5", + "has-binary2": "~1.0.2" + } + }, + "error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "dev": true, + "requires": { + "is-arrayish": "^0.2.1" + } + }, + "escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "dev": true + }, + "escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=", + "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": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true + }, + "estree-walker": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-1.0.1.tgz", + "integrity": "sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg==", + "dev": true + }, + "etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=", + "dev": true + }, + "eventemitter3": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", + "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", + "dev": true + }, + "exec-sh": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/exec-sh/-/exec-sh-0.2.2.tgz", + "integrity": "sha512-FIUCJz1RbuS0FKTdaAafAByGS0CPvU3R0MeHxgtl+djzCc//F8HakL8GzmVNZanasTbTAY/3DRFA0KpVqj/eAw==", + "dev": true, + "requires": { + "merge": "^1.2.0" + } + }, + "fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "finalhandler": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.0.tgz", + "integrity": "sha1-zgtoVbRYU+eRsvzGgARtiCU91/U=", + "dev": true, + "requires": { + "debug": "2.6.9", + "encodeurl": "~1.0.1", + "escape-html": "~1.0.3", + "on-finished": "~2.3.0", + "parseurl": "~1.3.2", + "statuses": "~1.3.1", + "unpipe": "~1.0.0" + }, + "dependencies": { + "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" + } + } + } + }, + "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" + } + }, + "follow-redirects": { + "version": "1.13.3", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.13.3.tgz", + "integrity": "sha512-DUgl6+HDzB0iEptNQEXLx/KhTmDb8tZUHSeLqpnjpknR70H0nC2t9N73BK6fN4hOvJ84pKlIQVQ4k5FFlBedKA==", + "dev": true + }, + "fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=", + "dev": true + }, + "fs-extra": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-3.0.1.tgz", + "integrity": "sha1-N5TzeMWLNC6n27sjCVEJxLO2IpE=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "jsonfile": "^3.0.0", + "universalify": "^0.1.0" + } + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "dev": true + }, + "fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "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-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true + }, + "glob": { + "version": "7.1.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", + "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "requires": { + "is-glob": "^4.0.1" + } + }, + "graceful-fs": { + "version": "4.2.6", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.6.tgz", + "integrity": "sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ==", + "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": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "has-binary2": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-binary2/-/has-binary2-1.0.3.tgz", + "integrity": "sha512-G1LWKhDSvhGeAQ8mPVQlqNcOB2sJdwATtZKl2pDKKHfpf/rYj24lkinxf69blJbnsvtqqNU+L3SL50vzZhXOnw==", + "dev": true, + "requires": { + "isarray": "2.0.1" + } + }, + "has-cors": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-cors/-/has-cors-1.1.0.tgz", + "integrity": "sha1-XkdHk/fqmEPRu5nCPu9J/xJv/zk=", + "dev": true + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + }, + "hosted-git-info": { + "version": "2.8.8", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.8.tgz", + "integrity": "sha512-f/wzC2QaWBs7t9IYqB4T3sR1xviIViXJRJTWBlx2Gf3g0Xi5vI7Yy4koXQ1c9OYDGHN9sBy1DQ2AB8fqZBWhUg==", + "dev": true + }, + "http-errors": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.3.tgz", + "integrity": "sha512-ZTTX0MWrsQ2ZAhA1cejAwDLycFsd7I7nVtnkT3Ol0aqodaKW+0CTZDQ1uBv5whptCnc8e8HeRRJxRs0kmm/Qfw==", + "dev": true, + "requires": { + "depd": "~1.1.2", + "inherits": "2.0.4", + "setprototypeof": "1.1.1", + "statuses": ">= 1.5.0 < 2", + "toidentifier": "1.0.0" + }, + "dependencies": { + "statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=", + "dev": true + } + } + }, + "http-proxy": { + "version": "1.18.1", + "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz", + "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==", + "dev": true, + "requires": { + "eventemitter3": "^4.0.0", + "follow-redirects": "^1.0.0", + "requires-port": "^1.0.0" + } + }, + "iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dev": true, + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + }, + "immutable": { + "version": "3.8.2", + "resolved": "https://registry.npmjs.org/immutable/-/immutable-3.8.2.tgz", + "integrity": "sha1-wkOZUUVbs5kT2vKBN28VMOEErfM=", + "dev": true + }, + "indexof": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/indexof/-/indexof-0.0.1.tgz", + "integrity": "sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10=", + "dev": true + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "dev": true, + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", + "dev": true + }, + "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==", + "requires": { + "binary-extensions": "^2.0.0" + } + }, + "is-core-module": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.2.0.tgz", + "integrity": "sha512-XRAfAdyyY5F5cOXn7hYQDqh2Xmii+DEfIcQGxK/uNwMHhIkPWO0g8msXcbzLe+MpGoR951MlqM/2iIlU4vKDdQ==", + "dev": true, + "requires": { + "has": "^1.0.3" + } + }, + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=" + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true + }, + "is-glob": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", + "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", + "requires": { + "is-extglob": "^2.1.1" + } + }, + "is-module": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz", + "integrity": "sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==", + "dev": true + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==" + }, + "is-number-like": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/is-number-like/-/is-number-like-1.0.8.tgz", + "integrity": "sha512-6rZi3ezCyFcn5L71ywzz2bS5b2Igl1En3eTlZlvKjpz1n3IZLAYMbKYAIQgFmEu0GENg92ziU/faEOA/aixjbA==", + "dev": true, + "requires": { + "lodash.isfinite": "^3.3.2" + } + }, + "is-wsl": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", + "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=", + "dev": true + }, + "isarray": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.1.tgz", + "integrity": "sha1-o32U7ZzaLVmGXJ92/llu4fM4dB4=", + "dev": true + }, + "json-parse-better-errors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", + "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", + "dev": true + }, + "jsonfile": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-3.0.1.tgz", + "integrity": "sha1-pezG9l9T9mLEQVx2daAzHQmS7GY=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.6" + } + }, + "limiter": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/limiter/-/limiter-1.1.5.tgz", + "integrity": "sha512-FWWMIEOxz3GwUI4Ts/IvgVy6LPvoMPgjMdQ185nN6psJyBJ4yOpzqm695/h5umdLJg2vW3GR5iG11MAkR2AzJA==", + "dev": true + }, + "localtunnel": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/localtunnel/-/localtunnel-2.0.1.tgz", + "integrity": "sha512-LiaI5wZdz0xFkIQpXbNI62ZnNn8IMsVhwxHmhA+h4vj8R9JG/07bQHWwQlyy7b95/5fVOCHJfIHv+a5XnkvaJA==", + "dev": true, + "requires": { + "axios": "0.21.1", + "debug": "4.3.1", + "openurl": "1.1.1", + "yargs": "16.2.0" + }, + "dependencies": { + "debug": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", + "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", + "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 + }, + "yargs": { + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "dev": true, + "requires": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" + } + } + } + }, + "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.isfinite": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/lodash.isfinite/-/lodash.isfinite-3.3.2.tgz", + "integrity": "sha1-+4m2WpqAKBgz8LdHizpRBPiY67M=", + "dev": true + }, + "maddoc-cli": { + "version": "file:madlib_modules/MadDocCli" + }, + "madmarkdown-renderer": { + "version": "file:madlib_modules/MadMarkdownRenderer", + "requires": { + "browser-sync": "^2.26.14", + "concurrently": "^5.3.0", + "copy-and-watch": "^0.1.5", + "sass": "^1.32.6", + "watch": "^1.0.2" + } + }, + "madui": { + "version": "file:madlib_modules/MadUI", + "requires": { + "@rollup/plugin-node-resolve": "^11.2.0", + "rollup": "^2.39.1", + "snabbdom": "^3.0.1" + } + }, + "merge": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/merge/-/merge-1.2.1.tgz", + "integrity": "sha512-VjFo4P5Whtj4vsLzsYBu5ayHhoHJ0UqNm7ibvShmbmoz7tGi0vXaoJbGdB+GmDMLUdg8DpQXEIeVDAe8MaABvQ==", + "dev": true + }, + "micromatch": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.2.tgz", + "integrity": "sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q==", + "dev": true, + "requires": { + "braces": "^3.0.1", + "picomatch": "^2.0.5" + } + }, + "mime": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.4.1.tgz", + "integrity": "sha512-KI1+qOZu5DcW6wayYHSzR/tXKCDC5Om4s1z2QJjDULzLcmf3DvzS7oluY4HCTrc+9FiKmWUgeNLg7W3uIQvxtQ==", + "dev": true + }, + "mime-db": { + "version": "1.46.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.46.0.tgz", + "integrity": "sha512-svXaP8UQRZ5K7or+ZmfNhg2xX3yKDMUzqadsSqi4NCH/KomcH75MAMYAGVlvXn4+b/xOPhS3I2uHKRUzvjY7BQ==", + "dev": true + }, + "mime-types": { + "version": "2.1.29", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.29.tgz", + "integrity": "sha512-Y/jMt/S5sR9OaqteJtslsFZKWOIIqMACsJSiHghlCAyhf7jfVYjKBmLiX8OgpWeW+fjJ2b+Az69aPFPkUOY6xQ==", + "dev": true, + "requires": { + "mime-db": "1.46.0" + } + }, + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minimist": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", + "dev": true + }, + "mitt": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/mitt/-/mitt-1.2.0.tgz", + "integrity": "sha512-r6lj77KlwqLhIUku9UWYes7KJtsczvolZkzp8hbaDPPaE24OmWl5s539Mytlj22siEQKosZ26qCBgda2PKwoJw==", + "dev": true + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, + "negotiator": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", + "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==", + "dev": true + }, + "normalize-package-data": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", + "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", + "dev": true, + "requires": { + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" + } + }, + "normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==" + }, + "on-finished": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", + "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", + "dev": true, + "requires": { + "ee-first": "1.1.1" + } + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dev": true, + "requires": { + "wrappy": "1" + } + }, + "openurl": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/openurl/-/openurl-1.1.1.tgz", + "integrity": "sha1-OHW0sO96UsFW8NtB1GCduw+Us4c=", + "dev": true + }, + "opn": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/opn/-/opn-5.3.0.tgz", + "integrity": "sha512-bYJHo/LOmoTd+pfiYhfZDnf9zekVJrY+cnS2a5F2x+w5ppvTqObojTP7WiFG+kVZs9Inw+qQ/lw7TroWwhdd2g==", + "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 + }, + "parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", + "dev": true, + "requires": { + "error-ex": "^1.3.1", + "json-parse-better-errors": "^1.0.1" + } + }, + "parseqs": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/parseqs/-/parseqs-0.0.6.tgz", + "integrity": "sha512-jeAGzMDbfSHHA091hr0r31eYfTig+29g3GKKE/PPbEQ65X0lmMwlEoqmhzu0iztID5uJpZsFlUPDP8ThPL7M8w==", + "dev": true + }, + "parseuri": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/parseuri/-/parseuri-0.0.6.tgz", + "integrity": "sha512-AUjen8sAkGgao7UyCX6Ahv0gIK2fABKmYjvP4xmy5JaKvcbTRueIqIPHLAfq30xJddqSE033IOMUSOMCcK3Sow==", + "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 + }, + "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": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "dev": true + }, + "path-parse": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", + "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==", + "dev": true + }, + "picomatch": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.2.tgz", + "integrity": "sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg==" + }, + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "dev": true + }, + "portscanner": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/portscanner/-/portscanner-2.1.1.tgz", + "integrity": "sha1-6rtAnk3iSVD1oqUW01rnaTQ/u5Y=", + "dev": true, + "requires": { + "async": "1.5.2", + "is-number-like": "^1.0.3" + } + }, + "qs": { + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.2.3.tgz", + "integrity": "sha1-HPyyXBCpsrSDBT/zn138kjOQjP4=", + "dev": true + }, + "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 + }, + "raw-body": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.1.tgz", + "integrity": "sha512-9WmIKF6mkvA0SLmA2Knm9+qj89e+j1zqgyn8aXGd7+nAduPoqgI9lO57SAZNn/Byzo5P7JhXTyg9PzaJbH73bA==", + "dev": true, + "requires": { + "bytes": "3.1.0", + "http-errors": "1.7.3", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + } + }, + "read-pkg": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-4.0.1.tgz", + "integrity": "sha1-ljYlN48+HE1IyFhytabsfV0JMjc=", + "dev": true, + "requires": { + "normalize-package-data": "^2.3.2", + "parse-json": "^4.0.0", + "pify": "^3.0.0" + } + }, + "readdirp": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.5.0.tgz", + "integrity": "sha512-cMhu7c/8rdhkHXWsY+osBhfSy0JikwpHK/5+imo+LpeasTF8ouErHrlYkwT0++njiyuDvc7OFY5T3ukvZ8qmFQ==", + "requires": { + "picomatch": "^2.2.1" + } + }, + "require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", + "dev": true + }, + "require-main-filename": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", + "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", + "dev": true + }, + "requires-port": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", + "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=", + "dev": true + }, + "resolve": { + "version": "1.20.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", + "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", + "dev": true, + "requires": { + "is-core-module": "^2.2.0", + "path-parse": "^1.0.6" + } + }, + "resp-modifier": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/resp-modifier/-/resp-modifier-6.0.2.tgz", + "integrity": "sha1-sSTeXE+6/LpUH0j/pzlw9KpFa08=", + "dev": true, + "requires": { + "debug": "^2.2.0", + "minimatch": "^3.0.2" + }, + "dependencies": { + "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" + } + } + } + }, + "rollup": { + "version": "2.79.1", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.79.1.tgz", + "integrity": "sha512-uKxbd0IhMZOhjAiD5oAFp7BqvkA4Dv47qpOCtaNvng4HBwdbWtdOh8f5nZNuk2rp51PMGk3bzfWu5oayNEuYnw==", + "dev": true, + "requires": { + "fsevents": "~2.3.2" + } + }, + "rx": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/rx/-/rx-4.1.0.tgz", + "integrity": "sha1-pfE/957zt0D+MKqAP7CfmIBdR4I=", + "dev": true + }, + "rxjs": { + "version": "5.5.12", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-5.5.12.tgz", + "integrity": "sha512-xx2itnL5sBbqeeiVgNPVuQQ1nC8Jp2WfNJhXWHmElW9YmrpS9UVnNzhP3EH3HFqexO5Tlp8GhYY+WEcqcVMvGw==", + "dev": true, + "requires": { + "symbol-observable": "1.0.1" + } + }, + "safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "dev": true + }, + "sass": { + "version": "1.32.8", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.32.8.tgz", + "integrity": "sha512-Sl6mIeGpzjIUZqvKnKETfMf0iDAswD9TNlv13A7aAF3XZlRPMq4VvJWBC2N2DXbp94MQVdNSFG6LfF/iOXrPHQ==", + "requires": { + "chokidar": ">=2.0.0 <4.0.0" + } + }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true + }, + "send": { + "version": "0.16.2", + "resolved": "https://registry.npmjs.org/send/-/send-0.16.2.tgz", + "integrity": "sha512-E64YFPUssFHEFBvpbbjr44NCLtI1AohxQ8ZSiJjQLskAdKuriYEP6VyGEsRDH8ScozGpkaX1BGvhanqCwkcEZw==", + "dev": true, + "requires": { + "debug": "2.6.9", + "depd": "~1.1.2", + "destroy": "~1.0.4", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "~1.6.2", + "mime": "1.4.1", + "ms": "2.0.0", + "on-finished": "~2.3.0", + "range-parser": "~1.2.0", + "statuses": "~1.4.0" + }, + "dependencies": { + "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" + } + }, + "http-errors": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", + "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=", + "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": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", + "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 + }, + "statuses": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz", + "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew==", + "dev": true + } + } + }, + "serve-index": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz", + "integrity": "sha1-03aNabHn2C5c4FD/9bRTvqEqkjk=", + "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": { + "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" + } + }, + "http-errors": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", + "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=", + "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": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", + "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 + }, + "statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=", + "dev": true + } + } + }, + "serve-static": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.13.2.tgz", + "integrity": "sha512-p/tdJrO4U387R9oMjb1oj7qSMaMfmOyd4j9hOFoxZe2baQszgHcSWjuya/CiT5kgZZKRudHNOA0pYXOl8rQ5nw==", + "dev": true, + "requires": { + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.2", + "send": "0.16.2" + } + }, + "server-destroy": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/server-destroy/-/server-destroy-1.0.1.tgz", + "integrity": "sha1-8Tv5KOQrnD55OD5hzDmYtdFObN0=", + "dev": true + }, + "set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", + "dev": true + }, + "setprototypeof": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", + "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==", + "dev": true + }, + "snabbdom": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/snabbdom/-/snabbdom-3.6.2.tgz", + "integrity": "sha512-ig5qOnCDbugFntKi6c7Xlib8bA6xiJVk8O+WdFrV3wxbMqeHO0hXFQC4nAhPVWfZfi8255lcZkNhtIBINCc4+Q==" + }, + "socket.io": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-2.4.0.tgz", + "integrity": "sha512-9UPJ1UTvKayuQfVv2IQ3k7tCQC/fboDyIK62i99dAQIyHKaBsNdTpwHLgKJ6guRWxRtC9H+138UwpaGuQO9uWQ==", + "dev": true, + "requires": { + "debug": "~4.1.0", + "engine.io": "~3.5.0", + "has-binary2": "~1.0.2", + "socket.io-adapter": "~1.1.0", + "socket.io-client": "2.4.0", + "socket.io-parser": "~3.4.0" + }, + "dependencies": { + "component-emitter": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz", + "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=", + "dev": true + }, + "debug": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", + "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + }, + "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 + }, + "socket.io-parser": { + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-3.4.1.tgz", + "integrity": "sha512-11hMgzL+WCLWf1uFtHSNvliI++tcRUWdoeYuwIl+Axvwy9z2gQM+7nJyN3STj1tLj5JyIUH8/gpDGxzAlDdi0A==", + "dev": true, + "requires": { + "component-emitter": "1.2.1", + "debug": "~4.1.0", + "isarray": "2.0.1" + } + } + } + }, + "socket.io-adapter": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-1.1.2.tgz", + "integrity": "sha512-WzZRUj1kUjrTIrUKpZLEzFZ1OLj5FwLlAFQs9kuZJzJi5DKdU7FsWc36SNmA8iDOtwBQyT8FkrriRM8vXLYz8g==", + "dev": true + }, + "socket.io-client": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-2.4.0.tgz", + "integrity": "sha512-M6xhnKQHuuZd4Ba9vltCLT9oa+YvTsP8j9NcEiLElfIg8KeYPyhWOes6x4t+LTAC8enQbE/995AdTem2uNyKKQ==", + "dev": true, + "requires": { + "backo2": "1.0.2", + "component-bind": "1.0.0", + "component-emitter": "~1.3.0", + "debug": "~3.1.0", + "engine.io-client": "~3.5.0", + "has-binary2": "~1.0.2", + "indexof": "0.0.1", + "parseqs": "0.0.6", + "parseuri": "0.0.6", + "socket.io-parser": "~3.3.0", + "to-array": "0.1.4" + } + }, + "socket.io-parser": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-3.3.2.tgz", + "integrity": "sha512-FJvDBuOALxdCI9qwRrO/Rfp9yfndRtc1jSgVgV8FDraihmSP/MLGD5PEuJrNfjALvcQ+vMDM/33AWOYP/JSjDg==", + "dev": true, + "requires": { + "component-emitter": "~1.3.0", + "debug": "~3.1.0", + "isarray": "2.0.1" + } + }, + "spawn-command": { + "version": "0.0.2-1", + "resolved": "https://registry.npmjs.org/spawn-command/-/spawn-command-0.0.2-1.tgz", + "integrity": "sha1-YvXpRmmBwbeW3Fkpk34RycaSG9A=", + "dev": true + }, + "spdx-correct": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz", + "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==", + "dev": true, + "requires": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "spdx-exceptions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", + "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", + "dev": true + }, + "spdx-expression-parse": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", + "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", + "dev": true, + "requires": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "spdx-license-ids": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.7.tgz", + "integrity": "sha512-U+MTEOO0AiDzxwFvoa4JVnMV6mZlJKk2sBLt90s7G0Gd0Mlknc7kxEn3nuDPNZRta7O2uy8oLcZLVT+4sqNZHQ==", + "dev": true + }, + "statuses": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.3.1.tgz", + "integrity": "sha1-+vUbnrdKrvOzrPStX2Gr8ky3uT4=", + "dev": true + }, + "stream-throttle": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/stream-throttle/-/stream-throttle-0.1.3.tgz", + "integrity": "sha1-rdV8jXzHOoFjDTHNVdOWHPr7qcM=", + "dev": true, + "requires": { + "commander": "^2.2.0", + "limiter": "^1.0.5" + } + }, + "string-width": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz", + "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==", + "dev": true, + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "dev": true + }, + "strip-ansi": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "dev": true, + "requires": { + "ansi-regex": "^5.0.0" + } + } + } + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + }, + "symbol-observable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-1.0.1.tgz", + "integrity": "sha1-g0D8RwLDEi310iKI+IKD9RPT/dQ=", + "dev": true + }, + "tfunk": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/tfunk/-/tfunk-4.0.0.tgz", + "integrity": "sha512-eJQ0dGfDIzWNiFNYFVjJ+Ezl/GmwHaFTBTjrtqNPW0S7cuVDBrZrmzUz6VkMeCR4DZFqhd4YtLwsw3i2wYHswQ==", + "dev": true, + "requires": { + "chalk": "^1.1.3", + "dlv": "^1.1.3" + } + }, + "to-array": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/to-array/-/to-array-0.1.4.tgz", + "integrity": "sha1-F+bBH3PdTz10zaek/zI46a2b+JA=", + "dev": true + }, + "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==", + "requires": { + "is-number": "^7.0.0" + } + }, + "toidentifier": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", + "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==", + "dev": true + }, + "tree-kill": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz", + "integrity": "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==", + "dev": true + }, + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + }, + "ua-parser-js": { + "version": "0.7.24", + "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.24.tgz", + "integrity": "sha512-yo+miGzQx5gakzVK3QFfN0/L9uVhosXBBO7qmnk7c2iw1IhL212wfA3zbnI54B0obGwC/5NWub/iT9sReMx+Fw==", + "dev": true + }, + "undici-types": { + "version": "5.26.5", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", + "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==", + "dev": true + }, + "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 + }, + "unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=", + "dev": true + }, + "utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=", + "dev": true + }, + "validate-npm-package-license": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", + "dev": true, + "requires": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, + "watch": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/watch/-/watch-1.0.2.tgz", + "integrity": "sha1-NApxe952Vyb6CqB9ch4BR6VR3ww=", + "dev": true, + "requires": { + "exec-sh": "^0.2.0", + "minimist": "^1.2.0" + } + }, + "which-module": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", + "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", + "dev": true + }, + "wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "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" + } + }, + "strip-ansi": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "dev": true, + "requires": { + "ansi-regex": "^5.0.0" + } + } + } + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "dev": true + }, + "ws": { + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.4.tgz", + "integrity": "sha512-Qm8k8ojNQIMx7S+Zp8u/uHOx7Qazv3Yv4q68MiWWWOJhiwG5W3x7iqmRtJo8xxrciZUY4vRxUTJCKuRnF28ZZw==", + "dev": true, + "requires": {} + }, + "xmlhttprequest-ssl": { + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.5.5.tgz", + "integrity": "sha1-wodrBhaKrcQOV9l+gRkayPQ5iz4=", + "dev": true + }, + "y18n": { + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.5.tgz", + "integrity": "sha512-hsRUr4FFrvhhRH12wOdfs38Gy7k2FFzB9qgN9v3aLykRq0dRcdcpz5C9FxdS2NuhOrI/628b/KSTJ3rwHysYSg==", + "dev": true + }, + "yargs": { + "version": "15.4.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", + "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", + "dev": true, + "requires": { + "cliui": "^6.0.0", + "decamelize": "^1.2.0", + "find-up": "^4.1.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^4.2.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^18.1.2" + }, + "dependencies": { + "ansi-regex": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "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" + } + }, + "cliui": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", + "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", + "dev": true, + "requires": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^6.2.0" + } + }, + "strip-ansi": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "dev": true, + "requires": { + "ansi-regex": "^5.0.0" + } + }, + "wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "dev": true, + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + } + }, + "y18n": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.1.tgz", + "integrity": "sha512-wNcy4NvjMYL8gogWWYAO7ZFWFfHcbdbE57tZO8e4cbpj8tfUcwrwqSl3ad8HxpYWCdXcJUCeKKZS62Av1affwQ==", + "dev": true + }, + "yargs-parser": { + "version": "18.1.3", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", + "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", + "dev": true, + "requires": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + } + } + } + }, + "yargs-parser": { + "version": "20.2.6", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.6.tgz", + "integrity": "sha512-AP1+fQIWSM/sMiET8fyayjx/J+JmTPt2Mr0FkrgqB4todtfa53sOsrSAcIrJRD5XS20bKUwaDIuMkWKCEiQLKA==", + "dev": true + }, + "yeast": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/yeast/-/yeast-0.1.2.tgz", + "integrity": "sha1-AI4G2AlDIMNy28L47XagymyKxBk=", + "dev": true + } + } +} diff --git a/madlib_modules/MadDoc/package.json b/madlib_modules/MadDoc/package.json new file mode 100644 index 0000000..b383bcc --- /dev/null +++ b/madlib_modules/MadDoc/package.json @@ -0,0 +1,36 @@ +{ + "name": "maddoc", + "version": "0.0.9", + "description": "Automatic documentation generator", + "main": "index.js", + "dependencies": { + "maddoc-cli": "file:madlib_modules/MadDocCli", + "madmarkdown-renderer": "file:madlib_modules/MadMarkdownRenderer", + "sass": "^1.32.6" + }, + "devDependencies": { + "browser-sync": "^2.26.14", + "concurrently": "^5.3.0", + "copy-and-watch": "^0.1.5", + "watch": "^1.0.2" + }, + "scripts": { + "info": "madlib --version", + "build:bundle": "madlib compile -i src/Main.mad --target browser --bundle -o build/bundle.js", + "build:bundle:watch": "madlib compile -i src/Main.mad --target browser --bundle -o build/bundle.js --watch", + "build:sass": "sass src/styles/main.scss build/styles/main.css", + "build:html": "copy-and-watch src/**/*.html build/", + "dev": "concurrently \"browser-sync start --server build --files build/**\" \"sass --watch src/styles/main.scss build/styles/main.css\" \"copy-and-watch --watch src/**/*.html build/\" \"copy-and-watch --watch src/assets/* build/assets/\" \"npm run build:bundle:watch\"", + "test": "echo \"Error: no test specified\" && exit 1" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/madlib-lang/madui-examples.git" + }, + "author": "", + "license": "ISC", + "bugs": { + "url": "https://github.com/madlib-lang/madui-examples/issues" + }, + "homepage": "https://github.com/madlib-lang/madui-examples#readme" +} diff --git a/madlib_modules/MadDoc/src/App.mad b/madlib_modules/MadDoc/src/App.mad new file mode 100644 index 0000000..87d45ea --- /dev/null +++ b/madlib_modules/MadDoc/src/App.mad @@ -0,0 +1,148 @@ +import type { Element, GlobalAction } from "MadUI" + +import type { Module } from "@/Parser/Documentation" +import type { PathResult } from "@/PathResolver" +import type { State, Target } from "@/State" + +import { Left, Right } from "Either" +import Json from "Json/Parse" +import { + PopStateEvent, + className, + div, + empty, + getUrl, + h2, + link, + main, + onUrlChanged, + p, + syncAction, + text, + to, + ul, +} from "MadUI" +import Maybe from "Maybe" +import String from "String" +import Url from "Url" + +import { renderMarkdown } from "@/Markdown" +import { parser } from "@/Parser/Documentation" +import { + AliasResult, + ExpressionResult, + InstanceResult, + InterfaceResult, + ModuleResult, + TypeResult, + processPath, +} from "@/PathResolver" +import { JS } from "@/State" +import { Alias } from "@/Views/Alias" +import { Breadcrumbs } from "@/Views/Breadcrumbs" +import { Expression } from "@/Views/Expression" +import { Header } from "@/Views/Header" +import { Instance } from "@/Views/Instance" +import { Interface } from "@/Views/Interface" +import { SideMenu } from "@/Views/SideMenu" +import { Type } from "@/Views/Type" +import docJson from "@/documentation.json" + + + +parsedDocumentation = Json.parse(parser, docJson) + +initialState :: State +export initialState = where(parsedDocumentation) { + Right(modules) => + { modules, search: "", path: Maybe.fromMaybe("", Url.decode(getUrl({}))), target: JS } + + Left(err) => + do { + return { modules: [], search: "", path: "", target: JS } + } +} + + +ModuleView :: Target -> Module -> Element State +ModuleView = (target, module) => +
    +

    + + {module.name} + +

    + {String.isEmpty(module.description) + ? + :

    + {renderMarkdown(module.description)} +

    } +
      + {...map(Type(module.name), module.typeDeclarations)} + {...map(Alias(module.name), module.aliases)} + {...map(Interface(module.name), module.interfaces)} + {...map(Instance(module.name), module.instances)} + {...map(Expression(target, module.name), module.expressions)} +
    +
    + + +ContentView :: Target -> PathResult -> Element State +ContentView = (target, pathResult) => where(pathResult) { + ModuleResult(modules) => +
    + {...map(ModuleView(target), modules)} +
    + + ExpressionResult(moduleName, exp) => +
      + {Expression(target, moduleName, exp)} +
    + + TypeResult(moduleName, t) => +
      + {Type(moduleName, t)} +
    + + AliasResult(moduleName, t) => +
      + {Alias(moduleName, t)} +
    + + InterfaceResult(moduleName, t) => +
      + {Interface(moduleName, t)} +
    + + InstanceResult(moduleName, t) => +
      + {Instance(moduleName, t)} +
    +} + + +DocApp :: State -> Element State +export DocApp = (state) => { + pathResult = processPath(state) + return ( +
    + {Header(state.target)} + {SideMenu(state.search, state.modules)} +
    + {Breadcrumbs(state)} + {ContentView(state.target, pathResult)} +
    +
    + ) +} + + +handleUrlChanged :: GlobalAction State +export handleUrlChanged = onUrlChanged( + syncAction( + (state, event) => where(event) { + PopStateEvent({ url }) => + { ...state, path: Maybe.fromMaybe("", Url.decode(url)) } + }, + ), +) diff --git a/madlib_modules/MadDoc/src/Main.mad b/madlib_modules/MadDoc/src/Main.mad new file mode 100644 index 0000000..17c8a9f --- /dev/null +++ b/madlib_modules/MadDoc/src/Main.mad @@ -0,0 +1,15 @@ +import { DEFAULT_CONFIG, addGlobalEventHandler, renderWithConfig } from "MadUI" + +import { DocApp, handleUrlChanged, initialState } from "@/App" + + + +main :: List String -> {} +main = () => { + renderWithConfig( + addGlobalEventHandler(handleUrlChanged, DEFAULT_CONFIG), + DocApp, + initialState, + "app", + ) +} diff --git a/madlib_modules/MadDoc/src/Markdown.mad b/madlib_modules/MadDoc/src/Markdown.mad new file mode 100644 index 0000000..51b0e3b --- /dev/null +++ b/madlib_modules/MadDoc/src/Markdown.mad @@ -0,0 +1,17 @@ +import type { Config } from "MadMarkdownRenderer" +import type { Element } from "MadUI" + +import type { State } from "@/State" + +import { defaultConfig, renderMarkdownWithConfig, setLinkView } from "MadMarkdownRenderer" +import { className, link, text, to } from "MadUI" + + + +mdConfig :: Config State +mdConfig = pipe( + setLinkView((txt, url) => {txt}), +)(defaultConfig) + +renderMarkdown :: String -> Element State +export renderMarkdown = renderMarkdownWithConfig(mdConfig) diff --git a/madlib_modules/MadDoc/src/Parser/Documentation.mad b/madlib_modules/MadDoc/src/Parser/Documentation.mad new file mode 100644 index 0000000..ef4588e --- /dev/null +++ b/madlib_modules/MadDoc/src/Parser/Documentation.mad @@ -0,0 +1,253 @@ +import type { Maybe } from "Maybe" + +import Json from "Json/Parse" +import { Just, Nothing } from "Maybe" + + + +export alias Instance = { + constraints :: String, + declaration :: String, + description :: String, + example :: String, + since :: String, +} + +export alias Interface = { + constraints :: String, + description :: String, + example :: String, + methods :: List String, + name :: String, + since :: String, + vars :: String, +} + +export alias Alias = { + aliasedType :: String, + description :: String, + example :: String, + name :: String, + params :: String, + since :: String, +} + +export alias Type = { + constructors :: List String, + description :: String, + example :: String, + name :: String, + params :: String, + since :: String, +} + +export alias Expression = { + description :: String, + example :: String, + name :: String, + since :: String, + typing :: String, +} + +export type Targeted a = BothTargets(a, a) | JSTarget(a) | LLVMTarget(a) | InvalidTarget + + +getName :: Targeted { ...base, name :: String } -> String +export getName = where { + BothTargets(a, _) => + a.name + + JSTarget(a) => + a.name + + LLVMTarget(a) => + a.name + + InvalidTarget => + "Invalid Target" +} + + +hasJSTarget :: Targeted a -> Boolean +export hasJSTarget = (targeted) => where(targeted) { + BothTargets(_, _) => + true + + JSTarget(_) => + true + + _ => + false +} + +export alias Module = { + aliases :: List Alias, + description :: String, + expressions :: List (Targeted Expression), + instances :: List Instance, + interfaces :: List Interface, + name :: String, + path :: String, + typeDeclarations :: List Type, +} + +export alias Documentation = List Module + +makeInstance :: String -> String -> String -> String -> String -> Instance +makeInstance = (declaration, constraints, description, since, example) => ( + { declaration, constraints, description, since, example } +) + +makeInterface :: String + -> String + -> String + -> List String + -> String + -> String + -> String + -> Interface +export makeInterface = (name, vars, constraints, methods, description, since, example) => ( + { name, vars, constraints, methods, description, since, example } +) + +makeAlias :: String -> String -> String -> String -> String -> String -> Alias +export makeAlias = (name, params, aliasedType, description, since, example) => ( + { name, params, aliasedType, description, since, example } +) + +makeType :: String -> String -> List String -> String -> String -> String -> Type +export makeType = (name, params, constructors, description, since, example) => ( + { name, params, constructors, description, since, example } +) + +makeExpression :: String -> String -> String -> String -> String -> Expression +export makeExpression = (name, description, typing, since, example) => ( + { name, description, typing, since, example } +) + +makeTargeted :: Maybe a -> Maybe a -> Targeted a +export makeTargeted = (maybeJS, maybeLLVM) => where(#[maybeJS, maybeLLVM]) { + #[Just(js), Just(llvm)] => + BothTargets(js, llvm) + + #[Just(js), Nothing] => + JSTarget(js) + + #[Nothing, Just(llvm)] => + LLVMTarget(llvm) + + _ => + InvalidTarget +} + +makeModule :: String + -> String + -> String + -> List (Targeted Expression) + -> List Type + -> List Alias + -> List Interface + -> List Instance + -> Module +export makeModule = ( + path, + name, + description, + expressions, + typeDeclarations, + aliases, + interfaces, + instances +) => ({ path, name, description, expressions, typeDeclarations, aliases, interfaces, instances }) + + + +expressionParser :: Json.Parser Expression +export expressionParser = Json.map5( + makeExpression, + Json.field("name", Json.string), + Json.field("description", Json.string), + Json.field("type", Json.string), + Json.field("since", Json.string), + Json.field("example", Json.string), +) + + +parser :: Json.Parser Documentation +export parser = Json.field( + "modules", + Json.list( + Json.map8( + makeModule, + Json.field("path", Json.string), + Json.field("moduleName", Json.string), + Json.field("description", Json.string), + Json.field( + "expressions", + Json.list( + Json.map2( + makeTargeted, + Json.maybe(Json.field("js", expressionParser)), + Json.maybe(Json.field("llvm", expressionParser)), + ), + ), + ), + Json.field( + "typeDeclarations", + Json.list( + Json.map6( + makeType, + Json.path(["js", "name"], Json.string), + Json.path(["js", "params"], Json.string), + Json.path(["js", "constructors"], Json.list(Json.string)), + Json.path(["js", "description"], Json.string), + Json.path(["js", "since"], Json.string), + Json.path(["js", "example"], Json.string), + ), + ), + ), + Json.field( + "aliases", + Json.list( + Json.map6( + makeAlias, + Json.path(["js", "name"], Json.string), + Json.path(["js", "params"], Json.string), + Json.path(["js", "aliasedType"], Json.string), + Json.path(["js", "description"], Json.string), + Json.path(["js", "since"], Json.string), + Json.path(["js", "example"], Json.string), + ), + ), + ), + Json.field( + "interfaces", + Json.list( + Json.map7( + makeInterface, + Json.path(["js", "name"], Json.string), + Json.path(["js", "vars"], Json.string), + Json.path(["js", "constraints"], Json.string), + Json.path(["js", "methods"], Json.list(Json.string)), + Json.path(["js", "description"], Json.string), + Json.path(["js", "since"], Json.string), + Json.path(["js", "example"], Json.string), + ), + ), + ), + Json.field( + "instances", + Json.list( + Json.map5( + makeInstance, + Json.path(["js", "declaration"], Json.string), + Json.path(["js", "constraints"], Json.string), + Json.path(["js", "description"], Json.string), + Json.path(["js", "since"], Json.string), + Json.path(["js", "example"], Json.string), + ), + ), + ), + ), + ), +) diff --git a/madlib_modules/MadDoc/src/PathResolver.mad b/madlib_modules/MadDoc/src/PathResolver.mad new file mode 100644 index 0000000..3f1e02f --- /dev/null +++ b/madlib_modules/MadDoc/src/PathResolver.mad @@ -0,0 +1,197 @@ +import type { Maybe } from "Maybe" + +import type { + Alias, + Expression, + Instance, + Interface, + Module, + Targeted, + Type, +} from "@/Parser/Documentation" +import type { State } from "@/State" + +import {} from "Compare" +import { canonicalizePath, isRootPathOf } from "FilePath" +import { always, equals, ifElse } from "Function" +import { any } from "List" +import List from "List" +import { Just, Nothing } from "Maybe" +import { drop, length, split, toLower } from "String" + +import { getName, makeModule } from "@/Parser/Documentation" + + + +export type PathResult + = ModuleResult(List Module) + | ExpressionResult(String, Targeted Expression) + | TypeResult(String, Type) + | AliasResult(String, Alias) + | InterfaceResult(String, Interface) + | InstanceResult(String, Instance) + | NotFound + +emptyPaths :: Module -> Boolean +export emptyPaths = (module) => !List.isEmpty(module.expressions) + || !List.isEmpty(module.typeDeclarations) + || !List.isEmpty(module.aliases) + || !List.isEmpty(module.interfaces) + || !List.isEmpty(module.instances) + +getPossiblePaths :: Module -> List String +export getPossiblePaths = (module) => [ + ...map(getName, module.expressions), + ...map(.name, module.typeDeclarations), + ...map(.name, module.aliases), + ...map(.name, module.interfaces), + ...map(.declaration, module.instances), +] + +isParentPath :: String -> String -> Boolean +export isParentPath = (parent, child) => pipe( + canonicalizePath, + toLower, + drop(1), + isRootPathOf($, child), +)(parent) + +walkByPath :: String -> Module -> Boolean +export walkByPath = (path, module) => pipe( + .name, + toLower, + ifElse( + isParentPath(path), + always(emptyPaths(module)), + pipe( + always(getPossiblePaths(module)), + map( + pipe( + mappend(`${module.name}/`), + toLower, + ), + ), + any(isParentPath(path)), + ), + ), +)(module) + +filterByPath :: String -> List Module -> List Module +export filterByPath = (path, modules) => List.filter(walkByPath(path))(modules) + +getModulesToShow :: State -> List Module +export getModulesToShow = (state) => pipe( + .modules, + filterByPath(state.path), +)(state) + +hasLongerPath :: String -> Module -> Boolean +export hasLongerPath = (path, m) => length(canonicalizePath(path)) > length(`/${m.name}`) + +firstModuleIsInPath :: String -> Maybe Module -> Boolean +export firstModuleIsInPath = (path, maybeModule) => where(maybeModule) { + Just(m) => + hasLongerPath(path, m) + + Nothing => + false +} + +isItemView :: String -> List Module -> Boolean +export isItemView = (path, mods) => { + return ifElse( + pipe( + List.length, + equals(1), + ), + pipe( + List.first, + firstModuleIsInPath(path), + ), + always(false), + )(mods) +} + +nameMatchesEndOfPath :: String -> (b -> String) -> b -> Boolean +export nameMatchesEndOfPath = (path, getter, raw) => pipe( + split("/"), + List.last, + where { + Just(x) => + x == getter(raw) + + _ => + false + }, +)(path) + +tryItemByKind :: (a -> b -> PathResult) + -> (b -> String) + -> List b + -> String + -> { ...module, name :: a } + -> PathResult +export tryItemByKind = (constructor, retrieveName, items, path, module) => pipe( + List.find(nameMatchesEndOfPath(path, retrieveName)), + where { + Just(found) => + constructor(module.name, found) + + Nothing => + NotFound + }, +)(items) + + +export alias Finder = String -> Module -> PathResult + +_findItem :: List Finder -> String -> Module -> PathResult +_findItem = (finders, path, module) => where(finders) { + [try, ...others] => + where(try(path, module)) { + NotFound => + _findItem(others, path, module) + + found => + found + } + + [] => + NotFound +} + + +findItem :: String -> Module -> PathResult +export findItem = (path, module) => _findItem( + [ + tryItemByKind(ExpressionResult, getName, module.expressions), + tryItemByKind(TypeResult, .name, module.typeDeclarations), + tryItemByKind(AliasResult, .name, module.aliases), + tryItemByKind(InterfaceResult, .name, module.interfaces), + tryItemByKind(InstanceResult, .declaration, module.instances), + ], + path, + module, +) + +processPath :: State -> PathResult +export processPath = (state) => { + path = state.path + return pipe( + getModulesToShow, + ifElse( + isItemView(path), + pipe( + List.first, + where { + Just(m) => + findItem(path, m) + + Nothing => + NotFound + }, + ), + ModuleResult, + ), + )(state) +} diff --git a/madlib_modules/MadDoc/src/PathResolver.spec.mad b/madlib_modules/MadDoc/src/PathResolver.spec.mad new file mode 100644 index 0000000..a902eb8 --- /dev/null +++ b/madlib_modules/MadDoc/src/PathResolver.spec.mad @@ -0,0 +1,189 @@ +import { when } from "Function" +import IO from "IO" +import List from "List" +import { Nothing } from "Maybe" +import { assertEquals, test } from "Test" + +import { JSTarget } from "./Parser/Documentation" +import { + AliasResult, + ModuleResult, + NotFound, + emptyPaths, + filterByPath, + findItem, + firstModuleIsInPath, + getModulesToShow, + getPossiblePaths, + hasLongerPath, + hasLongerPath, + isItemView, + isParentPath, + nameMatchesEndOfPath, + processPath, + tryItemByKind, + walkByPath, +} from "./PathResolver" +import { LLVM } from "./State" + + + +EMPTY_MODULE = { + aliases: [], + description: "this is a test", + expressions: [], + instances: [], + interfaces: [], + name: "test", + path: "path/to/test", + typeDeclarations: [], +} + +test( + "walkByPath", + () => do { + _ <- assertEquals( + walkByPath( + "/a/b/c", + { + ...EMPTY_MODULE, + aliases: [ + { aliasedType: "", description: "", example: "", name: "/a/b/", params: "", since: "" }, + ], + }, + ), + false, + ) + return assertEquals(walkByPath("/a/b/c", EMPTY_MODULE), false) + }, +) +test( + "getModulesToShow", + () => do { + myModule = { + ...EMPTY_MODULE, + aliases: [ + { aliasedType: "", description: "", example: "", name: "/a/b/", params: "", since: "" }, + ], + } + return assertEquals( + getModulesToShow({ path: "", search: "", target: LLVM, modules: [myModule] }), + [myModule], + ) + }, +) + +test( + "emptyPaths", + () => do { + _ <- assertEquals(emptyPaths(EMPTY_MODULE), false) + return assertEquals( + emptyPaths({ + aliases: [], + description: "this is a test", + expressions: [ + JSTarget({ + description: "this is an expression", + example: `import {cool} from "./wherever"`, + name: "cool", + since: "0.42.20", + typing: "String -> Boolean", + }), + ], + instances: [], + interfaces: [], + name: "test", + path: "path/to/test", + typeDeclarations: [], + }), + true, + ) + }, +) + +test( + "getPossiblePaths", + () => do { + _ <- assertEquals(getPossiblePaths(EMPTY_MODULE), []) + return assertEquals( + getPossiblePaths({ + ...EMPTY_MODULE, + aliases: [ + { + aliasedType: "Nice", + description: "This is an alias for Nice", + example: `import { Cool } from "Cool"`, + name: "Cool", + params: "a", + since: "0.0.1", + }, + ], + }), + ["Cool"], + ) + }, +) + +test("firstModuleIsInPath", () => assertEquals(firstModuleIsInPath("", Nothing), false)) + +test("isItemView - true", () => assertEquals(isItemView("/a/b/c", [EMPTY_MODULE]), true)) + +test("isItemView - false", () => assertEquals(isItemView("/a/b/c", []), false)) + +test( + "isParentPath", + () => do { + _ <- assertEquals(isParentPath("/A/B/C", "/a/b/c/d"), false) + return assertEquals(isParentPath("/A/B/C/d", "/a/b/c"), false) + }, +) + +test("hasLongerPath", () => assertEquals(hasLongerPath("", EMPTY_MODULE), false)) + +test( + "nameMatchesEndOfPath", + () => do { + _ <- assertEquals(nameMatchesEndOfPath("", .name, { name: "x" }), false) + return assertEquals(nameMatchesEndOfPath("/a/b/c", .name, { name: "c" }), true) + }, +) + +test( + "findItem", + () => do { + aliasX = { aliasedType: "", description: "", example: "", name: "b", params: "", since: "" } + aliases = [aliasX] + + _ <- assertEquals(findItem("squibble", { ...EMPTY_MODULE, aliases }), NotFound) + return assertEquals( + findItem("/z/a/b", { ...EMPTY_MODULE, aliases }), + AliasResult("test", aliasX), + ) + }, +) + +test( + "processPath - non item view", + () => do { + myModule = { + ...EMPTY_MODULE, + aliases: [ + { aliasedType: "", description: "", example: "", name: "/a/b/", params: "", since: "" }, + ], + } + return assertEquals( + processPath({ path: "", search: "", target: LLVM, modules: [myModule] }), + ModuleResult([myModule]), + ) + }, +) + +test( + "processPath - item view", + () => do { + return assertEquals( + processPath({ path: "/a/b/c", search: "", target: LLVM, modules: [EMPTY_MODULE] }), + ModuleResult([EMPTY_MODULE]), + ) + }, +) diff --git a/madlib_modules/MadDoc/src/State.mad b/madlib_modules/MadDoc/src/State.mad new file mode 100644 index 0000000..cc8d13f --- /dev/null +++ b/madlib_modules/MadDoc/src/State.mad @@ -0,0 +1,7 @@ +import type { Module } from "@/Parser/Documentation" + + + +export type Target = LLVM | JS + +export alias State = { modules :: List Module, path :: String, search :: String, target :: Target } diff --git a/madlib_modules/MadDoc/src/TargetInfo.mad b/madlib_modules/MadDoc/src/TargetInfo.mad new file mode 100644 index 0000000..65167d5 --- /dev/null +++ b/madlib_modules/MadDoc/src/TargetInfo.mad @@ -0,0 +1 @@ +export alias TargetInfo = { hasJS :: Boolean, hasLLVM :: Boolean, isAvailable :: Boolean } diff --git a/madlib_modules/MadDoc/src/Views/Alias.mad b/madlib_modules/MadDoc/src/Views/Alias.mad new file mode 100644 index 0000000..1a6ad9e --- /dev/null +++ b/madlib_modules/MadDoc/src/Views/Alias.mad @@ -0,0 +1,50 @@ +import type { Element } from "MadUI" + +import type { Alias } from "@/Parser/Documentation" +import type { State } from "@/State" + +import { className, div, li, span, text } from "MadUI" +import String from "String" + +import { Description } from "@/Views/Description" +import { Etiquette } from "@/Views/Etiquette" +import { Example } from "@/Views/Example" +import { Since } from "@/Views/Since" +import { Title } from "@/Views/Title" + + + +Alias :: String -> Alias -> Element State +export Alias = (moduleName, aliasDef) => { + aliasedType = aliasDef.aliasedType + params = String.isEmpty(aliasDef.params) ? "" : ` ${aliasDef.params}` + + return ( +
  • + {...[ + Etiquette("Alias"), + Title(aliasDef.name, { hasJS: false, hasLLVM: false, isAvailable: false }, moduleName), + ]} +
    + + alias + + + {aliasDef.name} + {params} + + + + + = + + + {aliasedType} + + + +
    + {...[Since(aliasDef), Description(aliasDef), Example(aliasDef)]} +
  • + ) +} diff --git a/madlib_modules/MadDoc/src/Views/Breadcrumbs.mad b/madlib_modules/MadDoc/src/Views/Breadcrumbs.mad new file mode 100644 index 0000000..feb33b5 --- /dev/null +++ b/madlib_modules/MadDoc/src/Views/Breadcrumbs.mad @@ -0,0 +1,66 @@ +import type { Element } from "MadUI" + +import type { State } from "@/State" + +import { canonicalizePath, joinPath, splitPath } from "FilePath" +import { append, intersperseWithIndex, reduce } from "List" +import { className, key, li, link, text, to, ul } from "MadUI" +import {} from "Number" +import { snd } from "Tuple" + + + +type Breadcrumb = Breadcrumb(String, String) + +getLink = where { + Breadcrumb(_, l) => + l +} +getName = where { + Breadcrumb(l, _) => + l +} + + +generateBreadcrumbName :: String -> String +generateBreadcrumbName = pipe( + canonicalizePath, + (pathSegment) => pathSegment == "/" || pathSegment == "" ? "home" : pathSegment, +) + +computeBreadcrumbs :: State -> List Breadcrumb +computeBreadcrumbs = pipe( + .path, + splitPath, + reduce( + (acc, pathSegment) => where(acc) { + #[prevPath, breadcrumbs] => + pipe( + append(pathSegment), + joinPath, + (path) => #[ + path, + append(Breadcrumb(generateBreadcrumbName(pathSegment), path), breadcrumbs), + ], + )([prevPath]) + }, + #["", []], + ), + snd, +) + +BreadcrumbItem :: Breadcrumb -> Element a +BreadcrumbItem = (breadcrumb) => +
  • + + {getName(breadcrumb)} + +
  • + +Breadcrumbs :: State -> Element a +export Breadcrumbs = pipe( + computeBreadcrumbs, + map(BreadcrumbItem), + intersperseWithIndex((i) =>
  • /
  • ), + (breadcrumbs) =>
      {...breadcrumbs}
    , +) diff --git a/madlib_modules/MadDoc/src/Views/Description.mad b/madlib_modules/MadDoc/src/Views/Description.mad new file mode 100644 index 0000000..ffe5fd2 --- /dev/null +++ b/madlib_modules/MadDoc/src/Views/Description.mad @@ -0,0 +1,16 @@ +import type { Element } from "MadUI" + +import type { State } from "@/State" + +import { className, div, text } from "MadUI" + +import { renderMarkdown } from "@/Markdown" + + + +Description :: { ...a, description :: String } -> Element State +export Description = pipe( + .description, + renderMarkdown, + (content) =>
    {content}
    , +) diff --git a/madlib_modules/MadDoc/src/Views/Etiquette.mad b/madlib_modules/MadDoc/src/Views/Etiquette.mad new file mode 100644 index 0000000..6f8ded1 --- /dev/null +++ b/madlib_modules/MadDoc/src/Views/Etiquette.mad @@ -0,0 +1,10 @@ +import type { Element } from "MadUI" + +import type { State } from "@/State" + +import { className, div, text } from "MadUI" + + + +Etiquette :: String -> Element State +export Etiquette = (content) =>
    {content}
    diff --git a/madlib_modules/MadDoc/src/Views/Example.mad b/madlib_modules/MadDoc/src/Views/Example.mad new file mode 100644 index 0000000..679126e --- /dev/null +++ b/madlib_modules/MadDoc/src/Views/Example.mad @@ -0,0 +1,19 @@ +import type { Element } from "MadUI" + +import type { State } from "@/State" + +import { always, ifElse } from "Function" +import { className, empty, p, text } from "MadUI" +import { isEmpty } from "String" + + + +Example :: { ...a, example :: String } -> Element State +export Example = pipe( + .example, + ifElse( + isEmpty, + always(), + (example) =>

    {example}

    , + ), +) diff --git a/madlib_modules/MadDoc/src/Views/Expression.mad b/madlib_modules/MadDoc/src/Views/Expression.mad new file mode 100644 index 0000000..dcd5a1c --- /dev/null +++ b/madlib_modules/MadDoc/src/Views/Expression.mad @@ -0,0 +1,39 @@ +import type { Element } from "MadUI" + +import type { Expression, Targeted } from "@/Parser/Documentation" +import type { State, Target } from "@/State" +import type { TargetInfo } from "@/TargetInfo" + +import { className, key, li, text } from "MadUI" + +import { Description } from "@/Views/Description" +import { Etiquette } from "@/Views/Etiquette" +import { Example } from "@/Views/Example" +import { Since } from "@/Views/Since" +import { TargetedItem } from "@/Views/TargetedItem" +import { Title } from "@/Views/Title" +import { Typing } from "@/Views/Typing" + + + +ExpressionView :: String -> TargetInfo -> Expression -> Element State +ExpressionView = (moduleName, targetInfo, definition) => +
  • + {Etiquette("Function")} + {Title(definition.name, targetInfo, moduleName)} + {Typing(definition)} + {Since(definition)} + {Description(definition)} + {Example(definition)} +
  • + + +Expression :: Target -> String -> Targeted Expression -> Element State +export Expression = (target, moduleName, definition) => TargetedItem( + target, + definition, + ExpressionView(moduleName), +) diff --git a/madlib_modules/MadDoc/src/Views/Header.mad b/madlib_modules/MadDoc/src/Views/Header.mad new file mode 100644 index 0000000..e6f6f2a --- /dev/null +++ b/madlib_modules/MadDoc/src/Views/Header.mad @@ -0,0 +1,67 @@ +import type { Action, Element } from "MadUI" + +import type { State, Target } from "@/State" + +import { always } from "Function" +import { + InputEvent, + button, + className, + div, + h1, + header, + input, + inputType, + onClick, + onInput, + placeholder, + syncAction, +} from "MadUI" +import String from "String" + +import { JS, LLVM } from "@/State" + + + +handleInput :: Action State +handleInput = (state, event) => where(event) { + InputEvent(e) => + [of(always({ ...state, search: String.toLower(e.target.value) }))] +} + + +handleTargetChange :: Target -> Action State +handleTargetChange = (target) => syncAction((state, _) => ({ ...state, target })) + + +Header :: Target -> Element State +export Header = (target) => +
    +

    + MadDoc +

    + +
    + + +
    +
    diff --git a/madlib_modules/MadDoc/src/Views/Instance.mad b/madlib_modules/MadDoc/src/Views/Instance.mad new file mode 100644 index 0000000..5f2ef9b --- /dev/null +++ b/madlib_modules/MadDoc/src/Views/Instance.mad @@ -0,0 +1,49 @@ +import type { Element } from "MadUI" + +import type { Instance } from "@/Parser/Documentation" +import type { State } from "@/State" + +import { className, div, li, span, text } from "MadUI" + +import { Description } from "@/Views/Description" +import { Etiquette } from "@/Views/Etiquette" +import { Example } from "@/Views/Example" +import { Since } from "@/Views/Since" +import { Title } from "@/Views/Title" + + + +Instance :: String -> Instance -> Element State +export Instance = (moduleName, instanceDef) => { + constraints = instanceDef.constraints + constraintElements = if (constraints != "") { + [{constraints}, {` => `}] + } else { + [] + } + + return ( +
  • + {...[ + Etiquette("Instance"), + Title( + instanceDef.declaration, + { hasJS: false, hasLLVM: false, isAvailable: false }, + moduleName, + ), + ]} +
    + + instance + + + {...constraintElements} + + + {instanceDef.declaration} + +
    + {...[Since(instanceDef), Description(instanceDef), Example(instanceDef)]} +
  • + ) +} diff --git a/madlib_modules/MadDoc/src/Views/Interface.mad b/madlib_modules/MadDoc/src/Views/Interface.mad new file mode 100644 index 0000000..3b3ab9a --- /dev/null +++ b/madlib_modules/MadDoc/src/Views/Interface.mad @@ -0,0 +1,56 @@ +import type { Element } from "MadUI" + +import type { Interface } from "@/Parser/Documentation" +import type { State } from "@/State" + +import { className, div, li, span, text } from "MadUI" + +import { Description } from "@/Views/Description" +import { Etiquette } from "@/Views/Etiquette" +import { Example } from "@/Views/Example" +import { Since } from "@/Views/Since" +import { Title } from "@/Views/Title" + + + +Interface :: String -> Interface -> Element State +export Interface = (moduleName, interfaceDef) => { + methods = interfaceDef.methods + constraints = interfaceDef.constraints + constraintElements = if (constraints != "") { + [{constraints}, {` => `}] + } else { + [] + } + + return ( +
  • + {...[ + Etiquette("Interface"), + Title(interfaceDef.name, { hasJS: false, hasLLVM: false, isAvailable: false }, moduleName), + ]} +
    + + interface + + + {...constraintElements} + + + {interfaceDef.name} + {interfaceDef.vars} + + + {` {`} + +
    + {...map((method) =>
    {method}
    , methods)} +
    + + {`}`} + +
    + {...[Since(interfaceDef), Description(interfaceDef), Example(interfaceDef)]} +
  • + ) +} diff --git a/madlib_modules/MadDoc/src/Views/SideMenu.mad b/madlib_modules/MadDoc/src/Views/SideMenu.mad new file mode 100644 index 0000000..9841c85 --- /dev/null +++ b/madlib_modules/MadDoc/src/Views/SideMenu.mad @@ -0,0 +1,135 @@ +import type { Element } from "MadUI" + +import type { Module } from "@/Parser/Documentation" +import type { State } from "@/State" + +import {} from "Compare" +import List from "List" +import { className, div, h3, li, link, p, span, text, to, ul } from "MadUI" +import String from "String" +import Tuple from "Tuple" + +import { getName } from "@/Parser/Documentation" + + + +ModuleLink :: Module -> Element State +ModuleLink = (module) => +
  • + + + {module.name} + + +
  • + + +MenuLink :: #[String, String] -> Element State +MenuLink = where { + #[name, moduleName] => +
  • + + + {name} + + + {moduleName} + + +
  • +} + + +LinksForType :: String + -> ({ ...a, name :: String } -> List b) + -> (b -> String) + -> List { ...a, name :: String } + -> List (Element State) +LinksForType = (search, getItems, retrieveName) => pipe( + chain( + (module) => pipe( + getItems, + List.filter( + pipe( + retrieveName, + String.toLower, + String.match(search), + ), + ), + map((a) => #[retrieveName(a), module.name]), + )(module), + ), + itemsToLinks, +) + + +itemsToLinks :: List #[String, String] -> List (Element State) +itemsToLinks = pipe( + List.sortBy((a, b) => compare(Tuple.fst(a), Tuple.fst(b))), + map(MenuLink), +) + + +sortAndFilterModules :: String -> List Module -> List Module +sortAndFilterModules = (search) => pipe( + List.filter( + pipe( + .name, + String.toLower, + String.match(search), + ), + ), + List.sortBy((a, b) => compare(a.name, b.name)), +) + + +MenuSection :: String -> List (Element State) -> List (Element State) +MenuSection = (title, items) => List.isEmpty(items) + ? [] + : [ +

    + {title} +

    , +
      + {...items} +
    , + ] + +SideMenu :: String -> List Module -> Element State +export SideMenu = (search, modules) => { + moduleLinks = map(ModuleLink, sortAndFilterModules(search, modules)) + functionLinks = LinksForType(search, .expressions, getName, modules) + typeLinks = LinksForType(search, .typeDeclarations, .name, modules) + aliasLinks = LinksForType(search, .aliases, .name, modules) + interfaceLinks = LinksForType(search, .interfaces, .name, modules) + instanceLinks = LinksForType(search, .instances, .declaration, modules) + + notFound = List.all( + List.isEmpty, + [moduleLinks, functionLinks, typeLinks, aliasLinks, interfaceLinks, instanceLinks], + ) + + return notFound + ? ( +
    +

    + No result was found for + + {search} + +

    +
    + ) + : ( +
    +
    + {...MenuSection("MODULES", moduleLinks)} + {...MenuSection("FUNCTIONS", functionLinks)} + {...MenuSection("TYPES", typeLinks)} + {...MenuSection("ALIASES", aliasLinks)} + {...MenuSection("INTERFACES", interfaceLinks)} + {...MenuSection("INSTANCES", instanceLinks)} +
    +
    + ) +} diff --git a/madlib_modules/MadDoc/src/Views/Since.mad b/madlib_modules/MadDoc/src/Views/Since.mad new file mode 100644 index 0000000..62e0585 --- /dev/null +++ b/madlib_modules/MadDoc/src/Views/Since.mad @@ -0,0 +1,19 @@ +import type { Element } from "MadUI" + +import type { State } from "@/State" + +import { always, ifElse } from "Function" +import { className, empty, p, text } from "MadUI" +import { isEmpty } from "String" + + + +Since :: { ...a, since :: String } -> Element State +export Since = pipe( + .since, + ifElse( + isEmpty, + always(), + (since) =>

    since v{since}

    , + ), +) diff --git a/madlib_modules/MadDoc/src/Views/TargetedItem.mad b/madlib_modules/MadDoc/src/Views/TargetedItem.mad new file mode 100644 index 0000000..cbafdf2 --- /dev/null +++ b/madlib_modules/MadDoc/src/Views/TargetedItem.mad @@ -0,0 +1,28 @@ +import type { Element } from "MadUI" + +import type { Targeted } from "@/Parser/Documentation" +import type { State, Target } from "@/State" +import type { TargetInfo } from "@/TargetInfo" + +import { BothTargets, JSTarget, LLVMTarget } from "@/Parser/Documentation" +import { JS, LLVM } from "@/State" + + + +TargetedItem :: Target -> Targeted a -> (TargetInfo -> a -> Element State) -> Element State +export TargetedItem = (target, targeted, cardView) => where(targeted) { + JSTarget(js) => + target == JS + ? cardView({ hasJS: true, hasLLVM: false, isAvailable: true }, js) + : cardView({ hasJS: true, hasLLVM: false, isAvailable: false }, js) + + LLVMTarget(llvm) => + target == LLVM + ? cardView({ hasJS: false, hasLLVM: true, isAvailable: true }, llvm) + : cardView({ hasJS: false, hasLLVM: true, isAvailable: false }, llvm) + + BothTargets(js, llvm) => + target == JS + ? cardView({ hasJS: true, hasLLVM: true, isAvailable: true }, js) + : cardView({ hasJS: true, hasLLVM: true, isAvailable: true }, llvm) +} diff --git a/madlib_modules/MadDoc/src/Views/Title.mad b/madlib_modules/MadDoc/src/Views/Title.mad new file mode 100644 index 0000000..364c2dd --- /dev/null +++ b/madlib_modules/MadDoc/src/Views/Title.mad @@ -0,0 +1,37 @@ +import type { Element } from "MadUI" + +import type { State } from "@/State" +import type { TargetInfo } from "@/TargetInfo" + +import { className, empty, h2, span, text } from "MadUI" + + + +makeTagClassName :: Boolean -> String +makeTagClassName = (isWarning) => isWarning + ? "definition__target-tag definition__target-tag--warning" + : "definition__target-tag" + + +TargetTags :: TargetInfo -> List (Element State) +TargetTags = (targetInfo) => { + unavailable = !targetInfo.isAvailable + unavailableClass = makeTagClassName(unavailable) + return [ + targetInfo.hasJS ? JS : , + targetInfo.hasLLVM ? LLVM : , + ] +} + + +Title :: String -> TargetInfo -> String -> Element State +export Title = (title, targetInfo, moduleName) => +

    + + {title} + + {...TargetTags(targetInfo)} + + {moduleName} + +

    diff --git a/madlib_modules/MadDoc/src/Views/Type.mad b/madlib_modules/MadDoc/src/Views/Type.mad new file mode 100644 index 0000000..8d71e3c --- /dev/null +++ b/madlib_modules/MadDoc/src/Views/Type.mad @@ -0,0 +1,84 @@ +import type { Element } from "MadUI" + +import type { Type } from "@/Parser/Documentation" +import type { State } from "@/State" + +import { first, length } from "List" +import { className, div, li, span, text } from "MadUI" +import { fromMaybe } from "Maybe" + +import { Description } from "./Description" +import { Etiquette } from "./Etiquette" +import { Example } from "./Example" +import { Since } from "./Since" +import { Title } from "./Title" + + + +Type :: String -> Type -> Element State +export Type = (moduleName, typeDefinition) => { + constructors = typeDefinition.constructors + manyCtors = length(constructors) > 1 + + renderedConstructors = manyCtors + ? ConstructorsView("=", constructors) + : [ + + + = + + + {fromMaybe("???", first(constructors))} + + , + ] + + return ( +
  • + {...[ + Etiquette("Type"), + Title( + typeDefinition.name, + { hasJS: false, hasLLVM: false, isAvailable: false }, + moduleName, + ), + ]} +
    + + type + + + {typeDefinition.name} + {typeDefinition.params} + + + {...renderedConstructors} + +
    + {...[Since(typeDefinition), Description(typeDefinition), Example(typeDefinition)]} +
  • + ) +} + +ConstructorsView :: String -> List String -> List (Element a) +ConstructorsView = (separator, items) => where(items) { + [ctor, ...more] => + [ConstructorView(separator, ctor), ...ConstructorsView("|", more)] + + [ctor] => + [ConstructorView(separator, ctor)] + + [] => + [] +} + +ConstructorView :: String -> String -> Element a +ConstructorView = (separator, constructor) => +
    + + {separator} + + + {constructor} + +
    diff --git a/madlib_modules/MadDoc/src/Views/Typing.mad b/madlib_modules/MadDoc/src/Views/Typing.mad new file mode 100644 index 0000000..43c7b08 --- /dev/null +++ b/madlib_modules/MadDoc/src/Views/Typing.mad @@ -0,0 +1,13 @@ +import type { Element } from "MadUI" + +import type { State } from "@/State" + +import { className, p, span, text } from "MadUI" + + + +Typing :: { ...a, typing :: String } -> Element State +export Typing = pipe( + .typing, + (typing) =>

    {typing}

    , +) diff --git a/madlib_modules/MadDoc/src/index.html b/madlib_modules/MadDoc/src/index.html new file mode 100644 index 0000000..a838502 --- /dev/null +++ b/madlib_modules/MadDoc/src/index.html @@ -0,0 +1,11 @@ + + + + + + + +
    + + + diff --git a/madlib_modules/MadDoc/src/styles/main.scss b/madlib_modules/MadDoc/src/styles/main.scss new file mode 100644 index 0000000..0a8a0a5 --- /dev/null +++ b/madlib_modules/MadDoc/src/styles/main.scss @@ -0,0 +1,442 @@ +$background-color: #eeeeee; +$primary-color: #0c96cc; +$primary-color-greyed-out: #cfcfcf; +$primary-color-light: #bce5f5; +$dark-grey: #333333; + +input:focus, +button:focus { + outline: none; +} + +ul { + list-style: none; + padding: 0; +} + +body { + font: + 14px "Helvetica Neue", + Helvetica, + Arial, + sans-serif; + color: $dark-grey; + background-color: $background-color; + margin: 0 auto; + --webkit-font-smoothing: antialiased; +} + +.documentation { + display: flex; + flex-direction: row; + min-height: 100vh; +} + +a { + color: inherit; + text-decoration: none; +} + +// ---------------------------------------------- +// Side Menu +// ---------------------------------------------- + +.side-menu { + min-width: 300px; + background-color: white; + height: calc(100vh - 80px); + position: sticky; + top: 80px; + border-right: 1px solid #ccc; + flex-shrink: 0; +} + +.side-menu__no-result { + padding: 20px; + max-width: 300px; +} + +.side-menu__no-result-search { + font-weight: 800; +} + +.side-menu__scrollbar-container { + height: 100%; + overflow: scroll; +} + +.side-menu__title { + padding: 0 15px 0 15px; + font-size: 24px; + margin-bottom: 5px; +} + +.side-menu__link-list { + margin: 0; + padding-bottom: 20px; +} + +.side-menu__link { + box-sizing: border-box; + cursor: pointer; + display: flex; + flex-direction: row; + width: 100%; + padding: 5px 15px; + + &:hover { + background: $background-color; + } +} + +.side-menu__link-name { + flex-grow: 1; + margin-right: 20px; + font-family: Menlo, Monaco, Consolas, "Courier New", monospace; + white-space: nowrap; +} + +.side-menu__link-extra { + background-color: $primary-color-light; + color: $primary-color; + padding: 1px 5px; + border-radius: 3px; +} + +// ---------------------------------------------- +// Main Content +// ---------------------------------------------- + +.documentation__content { + min-width: 230px; + flex-grow: 1; + padding: 100px 30px 0 30px; +} + +.content__items { + margin-top: 50px; +} + +// ---------------------------------------------- +// Header +// ---------------------------------------------- + +.header { + height: 60px; + padding: 10px 10px 10px 30px; + position: fixed; + z-index: 1; + width: 100%; + color: white; + background-color: $primary-color; + box-shadow: 0px 0px 10px 2px rgba(0, 0, 0, 0.36); +} + +.header__title { + display: inline-block; + margin: 15px 0; +} + +.search-field { + background: white; + border: none; + border-radius: 5px; + padding: 10px; + min-width: 350px; + position: relative; + display: -webkit-inline-box; + top: -7px; + margin-left: 50px; + + box-shadow: inset 0px 0px 5px -1px rgb(0 0 0 / 80%); + + &::placeholder { + color: #aaa; + font-style: italic; + } +} + +.target-selector { + display: inline-block; + position: absolute; + right: 60px; + top: 20%; + height: 60%; +} + +.target-selector__button { + height: 100%; + border: 0; + padding: 0 10px; + color: #939393; + background: #cfcfcf; + transition-timing-function: ease-in-out; + transition: + background 0.6s, + color 0.6s; + + cursor: pointer; + font-weight: bold; + // box-shadow: inset 0px 0px 5px 1px rgb(255 255 255 / 41%); + font-family: Verdana, Geneva, Tahoma, sans-serif; + + &:nth-child(1) { + border-top-left-radius: 5px; + border-bottom-left-radius: 5px; + border-top-right-radius: 0px; + border-bottom-right-radius: 0px; + } + + &:nth-child(2) { + border-top-left-radius: 0px; + border-bottom-left-radius: 0px; + border-top-right-radius: 5px; + border-bottom-right-radius: 5px; + } + + &:not(.target-selector__button--selected) { + &:hover { + transition: + background 0.3s, + color 0.3s; + color: white; + background: #5fbee4; + box-shadow: inset 0px 0px 5px 1px rgb(255 255 255 / 41%); + } + } + + &--selected { + color: $primary-color; + background: white; + box-shadow: inset 0px 0px 5px 0px rgb(0 0 0 / 40%); + cursor: initial; + } +} + +// ---------------------------------------------- +// Definition +// ---------------------------------------------- + +.definition { + font-size: 16px; + margin: 0 0 30px 0; + border: 1px solid #fff; + -webkit-box-shadow: 0 0 0 1px #ccc; + box-shadow: 0 0 0 1px #ccc; + padding: 15px; + background: #fff; + border-radius: 0 2px 2px 2px; + position: relative; +} + +.definition--greyed-out .definition__etiquette { + background: $primary-color-greyed-out; +} + +.definition__etiquette { + transition: + background 0.3s, + color 0.3s; + position: absolute; + left: -2px; + top: -2px; + transform: translateY(-100%); + text-orientation: upright; + color: white; + background: $primary-color; + padding: 0 10px; + font-weight: bold; + font-size: 14px; +} + +.definition--greyed-out .definition__title { + color: #808080; +} + +.definition__target-tag { + transition: + background 0.3s, + color 0.3s; + color: #0c96cc; + background-color: #bce5f5; + font-size: 12px; + margin-right: 10px; + padding: 5px; + border-radius: 5px; + vertical-align: middle; + + &--warning { + background-color: #ffeded; + color: #ee6969; + } +} + +.definition__title { + transition: + background 0.3s, + color 0.3s; + font-size: 30px; + font-weight: 700; + margin-top: 0; + margin-bottom: 10px; +} + +.definition__title-span { + margin-right: 15px; +} + +.definition--greyed-out .definition__module { + color: #c5c5c5; + background: #f0f0f0; +} + +.definition__module { + transition: + background 0.3s, + color 0.3s; + display: inline; + padding: 0.2em 0.6em 0.3em; + font-size: 75%; + font-weight: 700; + color: #fff; + text-align: center; + white-space: nowrap; + vertical-align: baseline; + border-radius: 0.25em; + background: $primary-color-light; + color: $primary-color; + float: right !important; +} + +.definition__type { + padding: 2px 4px; + font-size: 90%; + color: #000; + background-color: $background-color; + border-radius: 4px; + font-family: Menlo, Monaco, Consolas, "Courier New", monospace; +} + +.definition__since { + font-size: 14px; + font-style: italic; +} + +.definition__description { + margin-bottom: 20px; + + > p { + margin: 4px 0; + } +} + +.definition__example { + background-color: $dark-grey; + color: #cccccc; + margin: 0 -15px -15px -15px; + padding: 15px; + font-weight: 500; + white-space: pre-wrap; + word-wrap: break-word; + font-family: Menlo, Monaco, Consolas, "Courier New", monospace; +} + +.example__line { + margin-bottom: 4px; +} + +.highlight { + color: $primary-color; + font-weight: 800; +} + +.definition__adt, +.definition__interface { + white-space: pre-wrap; + font-family: Menlo, Monaco, Consolas, "Courier New", monospace; +} + +// ---------------------------------------------- +// Markdown +// ---------------------------------------------- +.markdown { + line-height: 1.5; + + p { + margin-top: 0; + margin-bottom: 10px; + } + + ul { + padding-left: 20px; + + li::before { + content: " "; + font-size: 16px; + display: inline-block; + width: 6px; + height: 6px; + background: black; + border-radius: 8px; + margin-right: 10px; + margin-bottom: 2px; + } + } +} + +.markdown__inline-code { + background-color: $background-color; + border-radius: 4px; + font-family: Menlo, Monaco, Consolas, "Courier New", monospace; + padding: 2px 4px; +} + +.markdown__link { + color: $primary-color; + cursor: pointer; +} + +// ---------------------------------------------- +// Breadcrumbs +// ---------------------------------------------- + +.breadcrumbs { + margin: 0 0 40px 0; +} + +.breadcrumbs__item { + display: inline-block; + cursor: pointer; +} + +.breadcrumbs__separator { + display: inline-block; + margin: 0 10px; +} + +// ---------------------------------------------- +// Module +// ---------------------------------------------- + +.module { + margin-bottom: 80px; +} + +.module__title { + margin: 0 0 20px 0; + font-size: 40px; + + > a { + cursor: pointer; + } +} + +.module__description { + margin: 0 0 80px 0; + font-size: 16px; + background-color: white; + box-shadow: 0 0 0 1px #ccc; + border: 1px solid #fff; + border-radius: 2px; + padding: 15px; +} diff --git a/madlib_modules/MadDoc/version.lock b/madlib_modules/MadDoc/version.lock new file mode 100644 index 0000000..deecab9 --- /dev/null +++ b/madlib_modules/MadDoc/version.lock @@ -0,0 +1,18 @@ +{ + "buildHash": "25f6cef77410c505301cb6de49b86dd9", + "jsApi": { + "apiInstances": [], + "apiAliases": {}, + "apiInterfaces": {}, + "apiNames": {}, + "apiTypes": {} + }, + "llvmApi": { + "apiInstances": [], + "apiAliases": {}, + "apiInterfaces": {}, + "apiNames": {}, + "apiTypes": {} + }, + "versionHash": "0303f93637e61e28843862449f225607" +} diff --git a/madlib_modules/MadDocCli/.github/workflows/build.yml b/madlib_modules/MadDocCli/.github/workflows/build.yml new file mode 100644 index 0000000..142af13 --- /dev/null +++ b/madlib_modules/MadDocCli/.github/workflows/build.yml @@ -0,0 +1,39 @@ +on: [push] + +env: + node-version: 20.x + +name: build + +jobs: + build: + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: Setup Node.js ${{ env.node-version }} + uses: actions/setup-node@v4 + with: + node-version: ${{ env.node-version }} + + - name: Install Madlib + run: npm install -g @madlib-lang/madlib@0.23.14 + + - name: Display Madlib version + run: madlib -v + + - name: Install Madlib Modules + run: madlib install + + - name: Generate .docs + run: mkdir .docs + + - name: Run tests + run: madlib test --coverage + + - name: Push coverage to Coveralls + uses: coverallsapp/github-action@master + with: + github-token: ${{ secrets.GITHUB_TOKEN }} + path-to-lcov: .coverage/lcov.info diff --git a/madlib_modules/MadDocCli/.github/workflows/release.yml b/madlib_modules/MadDocCli/.github/workflows/release.yml new file mode 100644 index 0000000..f3c2619 --- /dev/null +++ b/madlib_modules/MadDocCli/.github/workflows/release.yml @@ -0,0 +1,69 @@ +name: 'Publish new version' + +on: + workflow_dispatch: + inputs: + version: + description: 'Version to publish ( ex: v0.0.1 )' + required: true + +env: + node-version: 20.x + + +jobs: + check-version: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - run: | + MADLIB_PKG_VERSION="v$(cat madlib.json | grep version | cut -d":" -f2 | cut -d"\"" -f2)" + TAG_NAME=${{ github.event.inputs.version }} + if [ "$TAG_NAME" = "$MADLIB_PKG_VERSION" ]; then + echo "Versions match" + else + echo "Versions in madlib.json is not ${TAG_NAME}" + exit 1 + fi + + release: + needs: check-version + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + + - name: Use Node.js ${{ env.node-version }} + uses: actions/setup-node@v4 + with: + node-version: ${{ env.node-version }} + + - name: "Changelog: generate changelog" + id: changelog + uses: TriPSs/conventional-changelog-action@v5.2.1 + with: + presets: "conventionalcommits" + github-token: ${{ secrets.GITHUB_TOKEN }} + skip-on-empty: false + output-file: false + tag-prefix: 'v' + skip-commit: true + skip-version-file: true + draft: false + prerelease: false + + - name: "Delete created tag from changelog" + run: | + git push --delete origin v${{ steps.changelog.outputs.version }} + git tag -d v${{ steps.changelog.outputs.version }} + + - name: "Create Release" + id: create_release + uses: actions/create-release@v1.1.4 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + with: + tag_name: ${{ github.event.inputs.version }} + release_name: Release ${{ github.event.inputs.version }} + body: ${{ steps.changelog.outputs.clean_changelog }} + draft: false + prerelease: false diff --git a/madlib_modules/MadDocCli/.gitignore b/madlib_modules/MadDocCli/.gitignore new file mode 100644 index 0000000..6329468 --- /dev/null +++ b/madlib_modules/MadDocCli/.gitignore @@ -0,0 +1,13 @@ +madlib_modules +node_modules +/build +.DS_Store +.run +.docs +.tests +.coverage +documentation.json +coverage +.module_cache + +.repl diff --git a/madlib_modules/MadDocCli/README.md b/madlib_modules/MadDocCli/README.md new file mode 100644 index 0000000..ba55ce2 --- /dev/null +++ b/madlib_modules/MadDocCli/README.md @@ -0,0 +1,3 @@ +# MadDoc CLI +[![build](https://github.com/madlib-lang/maddoc-cli/actions/workflows/build.yml/badge.svg)](https://github.com/madlib-lang/maddoc-cli/actions/workflows/build.yml) +[![Coverage Status](https://coveralls.io/repos/github/madlib-lang/maddoc-cli/badge.svg?branch=master)](https://coveralls.io/github/madlib-lang/maddoc-cli?branch=master) diff --git a/madlib_modules/MadDocCli/madlib.json b/madlib_modules/MadDocCli/madlib.json new file mode 100644 index 0000000..054b972 --- /dev/null +++ b/madlib_modules/MadDocCli/madlib.json @@ -0,0 +1,17 @@ +{ + "name": "MadDocCli", + "version": "0.0.11", + "madlibVersion": "0.23.14", + "main": "src/Main.mad", + "bin": "src/Main.mad", + "importAliases": { + ".": "src" + }, + "dependencies": [ + { + "minVersion": "0.0.9", + "url": "https://github.com/madlib-lang/maddoc/archive/refs/tags/v0.0.9.zip", + "description": "MadDoc" + } + ] +} diff --git a/madlib_modules/MadDocCli/package-lock.json b/madlib_modules/MadDocCli/package-lock.json new file mode 100644 index 0000000..320aaff --- /dev/null +++ b/madlib_modules/MadDocCli/package-lock.json @@ -0,0 +1,2983 @@ +{ + "name": "maddoc-cli", + "version": "0.0.9", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "maddoc-cli", + "version": "0.0.9", + "license": "ISC", + "dependencies": { + "maddoc": "file:madlib_modules/MadDoc", + "sass": "^1.32.8", + "snabbdom": "^3.5.1" + }, + "bin": { + "maddoc-cli": "build/src/maddoc-cli.js" + }, + "devDependencies": {} + }, + "madlib_modules/MadDoc": { + "version": "0.0.9", + "license": "ISC", + "dependencies": { + "maddoc-cli": "file:madlib_modules/MadDocCli", + "madmarkdown-renderer": "file:madlib_modules/MadMarkdownRenderer", + "sass": "^1.32.6" + }, + "devDependencies": { + "browser-sync": "^2.26.14", + "concurrently": "^5.3.0", + "copy-and-watch": "^0.1.5", + "watch": "^1.0.2" + } + }, + "madlib_modules/MadDoc/madlib_modules/MadDocCli": {}, + "madlib_modules/MadDoc/madlib_modules/MadMarkdownRenderer": {}, + "madlib_modules/MadMarkdownRenderer": { + "name": "madmarkdown-renderer", + "version": "0.0.1", + "extraneous": true, + "license": "ISC", + "dependencies": { + "sass": "^1.32.6" + }, + "devDependencies": { + "browser-sync": "^2.26.14", + "concurrently": "^5.3.0", + "copy-and-watch": "^0.1.5", + "watch": "^1.0.2" + } + }, + "madlib_modules/MadUI": { + "name": "madui", + "version": "0.0.1", + "extraneous": true, + "license": "ISC", + "dependencies": { + "snabbdom": "^3.0.1" + }, + "devDependencies": { + "@rollup/plugin-node-resolve": "^11.2.0", + "rollup": "^2.39.1" + } + }, + "node_modules/@babel/runtime": { + "version": "7.24.5", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.24.5.tgz", + "integrity": "sha512-Nms86NXrsaeU9vbBJKni6gXiEXZ4CVpYVzEjDH9Sb8vmZ3UljyA1GSOJl/6LGPO8EHLuSF9H+IxNXHPX8QHJ4g==", + "dev": true, + "dependencies": { + "regenerator-runtime": "^0.14.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@isaacs/cliui": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", + "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", + "dev": true, + "dependencies": { + "string-width": "^5.1.2", + "string-width-cjs": "npm:string-width@^4.2.0", + "strip-ansi": "^7.0.1", + "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", + "wrap-ansi": "^8.1.0", + "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@pkgjs/parseargs": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", + "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", + "dev": true, + "optional": true, + "engines": { + "node": ">=14" + } + }, + "node_modules/@socket.io/component-emitter": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@socket.io/component-emitter/-/component-emitter-3.1.2.tgz", + "integrity": "sha512-9BCxFwvbGg/RsZK9tjXd8s4UcwR0MWeFQ1XEKIQVVvAGJyINdrqKMcTRyLoK8Rse1GjzLV9cwjWV1olXRWEXVA==", + "dev": true + }, + "node_modules/@types/cookie": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.4.1.tgz", + "integrity": "sha512-XW/Aa8APYr6jSVVA1y/DEIZX0/GMKLEVekNG727R8cs56ahETkRAy/3DR7+fJyh7oUgGwNQaRfXCun0+KbWY7Q==", + "dev": true + }, + "node_modules/@types/cors": { + "version": "2.8.17", + "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.17.tgz", + "integrity": "sha512-8CGDvrBj1zgo2qE+oS3pOCyYNqCPryMWY2bGfwA0dcfopWGgxs+78df0Rs3rc9THP4JkOhLsAa+15VdpAqkcUA==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/node": { + "version": "20.12.11", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.12.11.tgz", + "integrity": "sha512-vDg9PZ/zi+Nqp6boSOT7plNuthRugEKixDv5sFTIpkE89MmNtEArAShI4mxuX2+UrLEe9pxC1vm2cjm9YlWbJw==", + "dev": true, + "dependencies": { + "undici-types": "~5.26.4" + } + }, + "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": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "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.2", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", + "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "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-series": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/async-each-series/-/async-each-series-0.1.1.tgz", + "integrity": "sha512-p4jj6Fws4Iy2m0iCmI2am2ZNZCgbdgE+P8F/8csmn2vx7ixXrO2zGcuNsD46X5uZSVecmkEy/M06X2vG8KD6dQ==", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/axios": { + "version": "0.21.4", + "resolved": "https://registry.npmjs.org/axios/-/axios-0.21.4.tgz", + "integrity": "sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg==", + "dev": true, + "dependencies": { + "follow-redirects": "^1.14.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/base64id": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/base64id/-/base64id-2.0.0.tgz", + "integrity": "sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog==", + "dev": true, + "engines": { + "node": "^4.5.0 || >= 5.9" + } + }, + "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/binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "engines": { + "node": ">=8" + } + }, + "node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dependencies": { + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/browser-sync": { + "version": "2.29.3", + "resolved": "https://registry.npmjs.org/browser-sync/-/browser-sync-2.29.3.tgz", + "integrity": "sha512-NiM38O6XU84+MN+gzspVmXV2fTOoe+jBqIBx3IBdhZrdeURr6ZgznJr/p+hQ+KzkKEiGH/GcC4SQFSL0jV49bg==", + "dev": true, + "dependencies": { + "browser-sync-client": "^2.29.3", + "browser-sync-ui": "^2.29.3", + "bs-recipes": "1.3.4", + "chalk": "4.1.2", + "chokidar": "^3.5.1", + "connect": "3.6.6", + "connect-history-api-fallback": "^1", + "dev-ip": "^1.0.1", + "easy-extender": "^2.3.4", + "eazy-logger": "^4.0.1", + "etag": "^1.8.1", + "fresh": "^0.5.2", + "fs-extra": "3.0.1", + "http-proxy": "^1.18.1", + "immutable": "^3", + "localtunnel": "^2.0.1", + "micromatch": "^4.0.2", + "opn": "5.3.0", + "portscanner": "2.2.0", + "raw-body": "^2.3.2", + "resp-modifier": "6.0.2", + "rx": "4.1.0", + "send": "0.16.2", + "serve-index": "1.9.1", + "serve-static": "1.13.2", + "server-destroy": "1.0.1", + "socket.io": "^4.4.1", + "ua-parser-js": "^1.0.33", + "yargs": "^17.3.1" + }, + "bin": { + "browser-sync": "dist/bin.js" + }, + "engines": { + "node": ">= 8.0.0" + } + }, + "node_modules/browser-sync-client": { + "version": "2.29.3", + "resolved": "https://registry.npmjs.org/browser-sync-client/-/browser-sync-client-2.29.3.tgz", + "integrity": "sha512-4tK5JKCl7v/3aLbmCBMzpufiYLsB1+UI+7tUXCCp5qF0AllHy/jAqYu6k7hUF3hYtlClKpxExWaR+rH+ny07wQ==", + "dev": true, + "dependencies": { + "etag": "1.8.1", + "fresh": "0.5.2", + "mitt": "^1.1.3" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/browser-sync-ui": { + "version": "2.29.3", + "resolved": "https://registry.npmjs.org/browser-sync-ui/-/browser-sync-ui-2.29.3.tgz", + "integrity": "sha512-kBYOIQjU/D/3kYtUIJtj82e797Egk1FB2broqItkr3i4eF1qiHbFCG6srksu9gWhfmuM/TNG76jMfzAdxEPakg==", + "dev": true, + "dependencies": { + "async-each-series": "0.1.1", + "chalk": "4.1.2", + "connect-history-api-fallback": "^1", + "immutable": "^3", + "server-destroy": "1.0.1", + "socket.io-client": "^4.4.1", + "stream-throttle": "^0.1.3" + } + }, + "node_modules/bs-recipes": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/bs-recipes/-/bs-recipes-1.3.4.tgz", + "integrity": "sha512-BXvDkqhDNxXEjeGM8LFkSbR+jzmP/CYpCiVKYn+soB1dDldeU15EBNDkwVXndKuX35wnNUaPd0qSoQEAkmQtMw==", + "dev": true + }, + "node_modules/bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/chokidar": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", + "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", + "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" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "dev": true, + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/cliui/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/cliui/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "node_modules/cliui/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cliui/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cliui/node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "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": "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/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/concurrently": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/concurrently/-/concurrently-5.3.0.tgz", + "integrity": "sha512-8MhqOB6PWlBfA2vJ8a0bSFKATOdWlHiQlk11IfmQBPaHVP8oP2gsh2MObE6UR3hqDHqvaIvLTyceNW6obVuFHQ==", + "dev": true, + "dependencies": { + "chalk": "^2.4.2", + "date-fns": "^2.0.1", + "lodash": "^4.17.15", + "read-pkg": "^4.0.1", + "rxjs": "^6.5.2", + "spawn-command": "^0.0.2-1", + "supports-color": "^6.1.0", + "tree-kill": "^1.2.2", + "yargs": "^13.3.0" + }, + "bin": { + "concurrently": "bin/concurrently.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/concurrently/node_modules/ansi-regex": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz", + "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/concurrently/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/concurrently/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/concurrently/node_modules/chalk/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/concurrently/node_modules/cliui": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", + "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", + "dev": true, + "dependencies": { + "string-width": "^3.1.0", + "strip-ansi": "^5.2.0", + "wrap-ansi": "^5.1.0" + } + }, + "node_modules/concurrently/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/concurrently/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true + }, + "node_modules/concurrently/node_modules/emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", + "dev": true + }, + "node_modules/concurrently/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/concurrently/node_modules/is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/concurrently/node_modules/string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "dev": true, + "dependencies": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/concurrently/node_modules/strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "dependencies": { + "ansi-regex": "^4.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/concurrently/node_modules/supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/concurrently/node_modules/wrap-ansi": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", + "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.0", + "string-width": "^3.0.0", + "strip-ansi": "^5.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/concurrently/node_modules/y18n": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", + "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", + "dev": true + }, + "node_modules/concurrently/node_modules/yargs": { + "version": "13.3.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz", + "integrity": "sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==", + "dev": true, + "dependencies": { + "cliui": "^5.0.0", + "find-up": "^3.0.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^3.0.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^13.1.2" + } + }, + "node_modules/concurrently/node_modules/yargs-parser": { + "version": "13.1.2", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz", + "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==", + "dev": true, + "dependencies": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + } + }, + "node_modules/connect": { + "version": "3.6.6", + "resolved": "https://registry.npmjs.org/connect/-/connect-3.6.6.tgz", + "integrity": "sha512-OO7axMmPpu/2XuX1+2Yrg0ddju31B6xLZMWkJ5rYBu4YRmRVlOjvlY6kw2FJKiAzyxGwnrDUAG4s1Pf0sbBMCQ==", + "dev": true, + "dependencies": { + "debug": "2.6.9", + "finalhandler": "1.1.0", + "parseurl": "~1.3.2", + "utils-merge": "1.0.1" + }, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/connect-history-api-fallback": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-1.6.0.tgz", + "integrity": "sha512-e54B99q/OUoH64zYYRf3HBP5z24G38h5D3qXu23JGRoigpX5Ss4r9ZnDk3g0Z8uQC2x2lPaJ+UlWBc1ZWBWdLg==", + "dev": true, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/cookie": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.2.tgz", + "integrity": "sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/copy-and-watch": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/copy-and-watch/-/copy-and-watch-0.1.8.tgz", + "integrity": "sha512-Prw3k4Za+C/m/OutNtjy1+7Fq+JTiryrFc5JiR0wRrYQ+yPUnsXV8DNPna7plzEcmNbm8x87fqegp9+ogNqKNQ==", + "dev": true, + "dependencies": { + "chokidar": "3.6.0", + "colors": "1.4.0", + "glob": "10.3.12", + "glob-parent": "6.0.2" + }, + "bin": { + "copy-and-watch": "bin/copy-and-watch" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/copy-and-watch/node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/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/cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/date-fns": { + "version": "2.30.0", + "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-2.30.0.tgz", + "integrity": "sha512-fnULvOpxnC5/Vg3NCiWelDsLiUc9bRwAPs/+LfTLNvetFCtCTN+yQz15C/fs4AwX1R9K5GLtLfn8QW+dWisaAw==", + "dev": true, + "dependencies": { + "@babel/runtime": "^7.21.0" + }, + "engines": { + "node": ">=0.11" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/date-fns" + } + }, + "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/decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==", + "dev": true, + "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.0.4", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", + "integrity": "sha512-3NdhDuEXnfun/z7x9GOElY49LoqVHoGScmOKwmxhsS8N5Y+Z8KyPPDnaSzqWgYt/ji4mqwfTS34Htrk0zPIXVg==", + "dev": true + }, + "node_modules/dev-ip": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/dev-ip/-/dev-ip-1.0.1.tgz", + "integrity": "sha512-LmVkry/oDShEgSZPNgqCIp2/TlqtExeGmymru3uCELnfyjY11IzpAproLYs+1X88fXO6DBoYP3ul2Xo2yz2j6A==", + "dev": true, + "bin": { + "dev-ip": "lib/dev-ip.js" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", + "dev": true + }, + "node_modules/easy-extender": { + "version": "2.3.4", + "resolved": "https://registry.npmjs.org/easy-extender/-/easy-extender-2.3.4.tgz", + "integrity": "sha512-8cAwm6md1YTiPpOvDULYJL4ZS6WfM5/cTeVVh4JsvyYZAoqlRVUpHL9Gr5Fy7HA6xcSZicUia3DeAgO3Us8E+Q==", + "dev": true, + "dependencies": { + "lodash": "^4.17.10" + }, + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/eazy-logger": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/eazy-logger/-/eazy-logger-4.0.1.tgz", + "integrity": "sha512-2GSFtnnC6U4IEKhEI7+PvdxrmjJ04mdsj3wHZTFiw0tUtG4HCWzTr13ZYTk8XOGnA1xQMaDljoBOYlk3D/MMSw==", + "dev": true, + "dependencies": { + "chalk": "4.1.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "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/emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "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/engine.io": { + "version": "6.5.4", + "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-6.5.4.tgz", + "integrity": "sha512-KdVSDKhVKyOi+r5uEabrDLZw2qXStVvCsEB/LN3mw4WFi6Gx50jTyuxYVCwAAC0U46FdnzP/ScKRBTXb/NiEOg==", + "dev": true, + "dependencies": { + "@types/cookie": "^0.4.1", + "@types/cors": "^2.8.12", + "@types/node": ">=10.0.0", + "accepts": "~1.3.4", + "base64id": "2.0.0", + "cookie": "~0.4.1", + "cors": "~2.8.5", + "debug": "~4.3.1", + "engine.io-parser": "~5.2.1", + "ws": "~8.11.0" + }, + "engines": { + "node": ">=10.2.0" + } + }, + "node_modules/engine.io-client": { + "version": "6.5.3", + "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-6.5.3.tgz", + "integrity": "sha512-9Z0qLB0NIisTRt1DZ/8U2k12RJn8yls/nXMZLn+/N8hANT3TcYjKFKcwbw5zFQiN4NTde3TSY9zb79e1ij6j9Q==", + "dev": true, + "dependencies": { + "@socket.io/component-emitter": "~3.1.0", + "debug": "~4.3.1", + "engine.io-parser": "~5.2.1", + "ws": "~8.11.0", + "xmlhttprequest-ssl": "~2.0.0" + } + }, + "node_modules/engine.io-client/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/engine.io-client/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/engine.io-parser": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-5.2.2.tgz", + "integrity": "sha512-RcyUFKA93/CXH20l4SoVvzZfrSDMOTUS3bWVpTt2FuFP+XYrL8i8oonHP7WInRyVHXh0n/ORtoeiE1os+8qkSw==", + "dev": true, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/engine.io/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/engine.io/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/error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "dev": true, + "dependencies": { + "is-arrayish": "^0.2.1" + } + }, + "node_modules/escalade": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz", + "integrity": "sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "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/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/eventemitter3": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", + "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", + "dev": true + }, + "node_modules/exec-sh": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/exec-sh/-/exec-sh-0.2.2.tgz", + "integrity": "sha512-FIUCJz1RbuS0FKTdaAafAByGS0CPvU3R0MeHxgtl+djzCc//F8HakL8GzmVNZanasTbTAY/3DRFA0KpVqj/eAw==", + "dev": true, + "dependencies": { + "merge": "^1.2.0" + } + }, + "node_modules/fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/finalhandler": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.0.tgz", + "integrity": "sha512-ejnvM9ZXYzp6PUPUyQBMBf0Co5VX2gr5H2VQe2Ui2jWXNlxv+PYZo8wpAymJNJdLsG1R4p+M4aynF8KuoUEwRw==", + "dev": true, + "dependencies": { + "debug": "2.6.9", + "encodeurl": "~1.0.1", + "escape-html": "~1.0.3", + "on-finished": "~2.3.0", + "parseurl": "~1.3.2", + "statuses": "~1.3.1", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "dev": true, + "dependencies": { + "locate-path": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/follow-redirects": { + "version": "1.15.6", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.6.tgz", + "integrity": "sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, + "node_modules/foreground-child": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.1.1.tgz", + "integrity": "sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==", + "dev": true, + "dependencies": { + "cross-spawn": "^7.0.0", + "signal-exit": "^4.0.1" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "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/fs-extra": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-3.0.1.tgz", + "integrity": "sha512-V3Z3WZWVUYd8hoCL5xfXJCaHWYzmtwW5XWYSlLgERi8PWd8bx1kUHUk8L1BT57e49oKnDDD180mjfrHc1yA9rg==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.1.2", + "jsonfile": "^3.0.0", + "universalify": "^0.1.0" + } + }, + "node_modules/fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true, + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/glob": { + "version": "10.3.12", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.12.tgz", + "integrity": "sha512-TCNv8vJ+xz4QiqTpfOJA7HvYv+tNIRHKfUWw/q+v2jdgN4ebz+KY9tGx5J4rHP0o84mNP+ApH66HRX8us3Khqg==", + "dev": true, + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^2.3.6", + "minimatch": "^9.0.1", + "minipass": "^7.0.4", + "path-scurry": "^1.10.2" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "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==", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "dev": true + }, + "node_modules/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/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/hosted-git-info": { + "version": "2.8.9", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", + "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", + "dev": true + }, + "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-proxy": { + "version": "1.18.1", + "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz", + "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==", + "dev": true, + "dependencies": { + "eventemitter3": "^4.0.0", + "follow-redirects": "^1.0.0", + "requires-port": "^1.0.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dev": true, + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/immutable": { + "version": "3.8.2", + "resolved": "https://registry.npmjs.org/immutable/-/immutable-3.8.2.tgz", + "integrity": "sha512-15gZoQ38eYjEjxkorfbcgBKBL6R7T459OuK+CpcWt7O3KF4uPCx2tD0uFETlUDIyo+1789crbMhTvQBSR5yBMg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "node_modules/is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", + "dev": true + }, + "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==", + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-core-module": { + "version": "2.13.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.1.tgz", + "integrity": "sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==", + "dev": true, + "dependencies": { + "hasown": "^2.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "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==", + "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==", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-number-like": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/is-number-like/-/is-number-like-1.0.8.tgz", + "integrity": "sha512-6rZi3ezCyFcn5L71ywzz2bS5b2Igl1En3eTlZlvKjpz1n3IZLAYMbKYAIQgFmEu0GENg92ziU/faEOA/aixjbA==", + "dev": true, + "dependencies": { + "lodash.isfinite": "^3.3.2" + } + }, + "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/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true + }, + "node_modules/jackspeak": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-2.3.6.tgz", + "integrity": "sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ==", + "dev": true, + "dependencies": { + "@isaacs/cliui": "^8.0.2" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + }, + "optionalDependencies": { + "@pkgjs/parseargs": "^0.11.0" + } + }, + "node_modules/json-parse-better-errors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", + "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", + "dev": true + }, + "node_modules/jsonfile": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-3.0.1.tgz", + "integrity": "sha512-oBko6ZHlubVB5mRFkur5vgYR1UyqX+S6Y/oCfLhqNdcc2fYFlDpIoNc7AfKS1KOGcnNAkvsr0grLck9ANM815w==", + "dev": true, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/limiter": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/limiter/-/limiter-1.1.5.tgz", + "integrity": "sha512-FWWMIEOxz3GwUI4Ts/IvgVy6LPvoMPgjMdQ185nN6psJyBJ4yOpzqm695/h5umdLJg2vW3GR5iG11MAkR2AzJA==", + "dev": true + }, + "node_modules/localtunnel": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/localtunnel/-/localtunnel-2.0.2.tgz", + "integrity": "sha512-n418Cn5ynvJd7m/N1d9WVJISLJF/ellZnfsLnx8WBWGzxv/ntNcFkJ1o6se5quUhCplfLGBNL5tYHiq5WF3Nug==", + "dev": true, + "dependencies": { + "axios": "0.21.4", + "debug": "4.3.2", + "openurl": "1.1.1", + "yargs": "17.1.1" + }, + "bin": { + "lt": "bin/lt.js" + }, + "engines": { + "node": ">=8.3.0" + } + }, + "node_modules/localtunnel/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/localtunnel/node_modules/cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "dev": true, + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, + "node_modules/localtunnel/node_modules/debug": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", + "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/localtunnel/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "node_modules/localtunnel/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/localtunnel/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/localtunnel/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/localtunnel/node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/localtunnel/node_modules/yargs": { + "version": "17.1.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.1.1.tgz", + "integrity": "sha512-c2k48R0PwKIqKhPMWjeiF6y2xY/gPMUlro0sgxqXpbOIohWiLNXWslsootttv7E1e73QPAMQSg5FeySbVcpsPQ==", + "dev": true, + "dependencies": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/localtunnel/node_modules/yargs-parser": { + "version": "20.2.9", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", + "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "dev": true, + "dependencies": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "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.isfinite": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/lodash.isfinite/-/lodash.isfinite-3.3.2.tgz", + "integrity": "sha512-7FGG40uhC8Mm633uKW1r58aElFlBlxCrg9JfSi3P6aYiWmfiWF0PgMd86ZUsxE5GwWPdHoS2+48bwTh2VPkIQA==", + "dev": true + }, + "node_modules/lru-cache": { + "version": "10.2.2", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.2.2.tgz", + "integrity": "sha512-9hp3Vp2/hFQUiIwKo8XCeFVnrg8Pk3TYNPIR7tJADKi5YfcF7vEaK7avFHTlSy3kOKYaJQaalfEo6YuXdceBOQ==", + "dev": true, + "engines": { + "node": "14 || >=16.14" + } + }, + "node_modules/maddoc": { + "resolved": "madlib_modules/MadDoc", + "link": true + }, + "node_modules/maddoc-cli": { + "resolved": "madlib_modules/MadDoc/madlib_modules/MadDocCli", + "link": true + }, + "node_modules/madmarkdown-renderer": { + "resolved": "madlib_modules/MadDoc/madlib_modules/MadMarkdownRenderer", + "link": true + }, + "node_modules/merge": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/merge/-/merge-1.2.1.tgz", + "integrity": "sha512-VjFo4P5Whtj4vsLzsYBu5ayHhoHJ0UqNm7ibvShmbmoz7tGi0vXaoJbGdB+GmDMLUdg8DpQXEIeVDAe8MaABvQ==", + "dev": true + }, + "node_modules/micromatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "dev": true, + "dependencies": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/mime": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.4.1.tgz", + "integrity": "sha512-KI1+qOZu5DcW6wayYHSzR/tXKCDC5Om4s1z2QJjDULzLcmf3DvzS7oluY4HCTrc+9FiKmWUgeNLg7W3uIQvxtQ==", + "dev": true, + "bin": { + "mime": "cli.js" + } + }, + "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": "9.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.4.tgz", + "integrity": "sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/minipass": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.1.tgz", + "integrity": "sha512-UZ7eQ+h8ywIRAW1hIEl2AqdwzJucU/Kp59+8kkZeSvafXhZjul247BvIJjEVFVeON6d7lM46XX1HXCduKAS8VA==", + "dev": true, + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/mitt": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/mitt/-/mitt-1.2.0.tgz", + "integrity": "sha512-r6lj77KlwqLhIUku9UWYes7KJtsczvolZkzp8hbaDPPaE24OmWl5s539Mytlj22siEQKosZ26qCBgda2PKwoJw==", + "dev": true + }, + "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/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/normalize-package-data": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", + "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", + "dev": true, + "dependencies": { + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" + } + }, + "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==", + "engines": { + "node": ">=0.10.0" + } + }, + "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/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/openurl": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/openurl/-/openurl-1.1.1.tgz", + "integrity": "sha512-d/gTkTb1i1GKz5k3XE3XFV/PxQ1k45zDqGP2OA7YhgsaLoqm6qRvARAZOFer1fcXritWlGBRCu/UgeS4HAnXAA==", + "dev": true + }, + "node_modules/opn": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/opn/-/opn-5.3.0.tgz", + "integrity": "sha512-bYJHo/LOmoTd+pfiYhfZDnf9zekVJrY+cnS2a5F2x+w5ppvTqObojTP7WiFG+kVZs9Inw+qQ/lw7TroWwhdd2g==", + "dev": true, + "dependencies": { + "is-wsl": "^1.1.0" + }, + "engines": { + "node": ">=4" + } + }, + "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": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "dev": true, + "dependencies": { + "p-limit": "^2.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "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/parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw==", + "dev": true, + "dependencies": { + "error-ex": "^1.3.1", + "json-parse-better-errors": "^1.0.1" + }, + "engines": { + "node": ">=4" + } + }, + "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/path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "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/path-scurry": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", + "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", + "dev": true, + "dependencies": { + "lru-cache": "^10.2.0", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" + }, + "engines": { + "node": ">=16 || 14 >=14.18" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/portscanner": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/portscanner/-/portscanner-2.2.0.tgz", + "integrity": "sha512-IFroCz/59Lqa2uBvzK3bKDbDDIEaAY8XJ1jFxcLWTqosrsc32//P4VuSB2vZXoHiHqOmx8B5L5hnKOxL/7FlPw==", + "dev": true, + "dependencies": { + "async": "^2.6.0", + "is-number-like": "^1.0.3" + }, + "engines": { + "node": ">=0.4", + "npm": ">=1.0.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/raw-body": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz", + "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==", + "dev": true, + "dependencies": { + "bytes": "3.1.2", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/read-pkg": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-4.0.1.tgz", + "integrity": "sha512-+UBirHHDm5J+3WDmLBZYSklRYg82nMlz+enn+GMZ22nSR2f4bzxmhso6rzQW/3mT2PVzpzDTiYIZahk8UmZ44w==", + "dev": true, + "dependencies": { + "normalize-package-data": "^2.3.2", + "parse-json": "^4.0.0", + "pify": "^3.0.0" + }, + "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==", + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/regenerator-runtime": { + "version": "0.14.1", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz", + "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==", + "dev": true + }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/require-main-filename": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", + "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", + "dev": true + }, + "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.8", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", + "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", + "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/resp-modifier": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/resp-modifier/-/resp-modifier-6.0.2.tgz", + "integrity": "sha512-U1+0kWC/+4ncRFYqQWTx/3qkfE6a4B/h3XXgmXypfa0SPZ3t7cbbaFk297PjQS/yov24R18h6OZe6iZwj3NSLw==", + "dev": true, + "dependencies": { + "debug": "^2.2.0", + "minimatch": "^3.0.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/resp-modifier/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/resp-modifier/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/rx": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/rx/-/rx-4.1.0.tgz", + "integrity": "sha512-CiaiuN6gapkdl+cZUr67W6I8jquN4lkak3vtIsIWCl4XIPP8ffsoyN6/+PuGXnQy8Cu8W2y9Xxh31Rq4M6wUug==", + "dev": true + }, + "node_modules/rxjs": { + "version": "6.6.7", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", + "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", + "dev": true, + "dependencies": { + "tslib": "^1.9.0" + }, + "engines": { + "npm": ">=2.0.0" + } + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "dev": true + }, + "node_modules/sass": { + "version": "1.32.8", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.32.8.tgz", + "integrity": "sha512-Sl6mIeGpzjIUZqvKnKETfMf0iDAswD9TNlv13A7aAF3XZlRPMq4VvJWBC2N2DXbp94MQVdNSFG6LfF/iOXrPHQ==", + "dependencies": { + "chokidar": ">=2.0.0 <4.0.0" + }, + "bin": { + "sass": "sass.js" + }, + "engines": { + "node": ">=8.9.0" + } + }, + "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.16.2", + "resolved": "https://registry.npmjs.org/send/-/send-0.16.2.tgz", + "integrity": "sha512-E64YFPUssFHEFBvpbbjr44NCLtI1AohxQ8ZSiJjQLskAdKuriYEP6VyGEsRDH8ScozGpkaX1BGvhanqCwkcEZw==", + "dev": true, + "dependencies": { + "debug": "2.6.9", + "depd": "~1.1.2", + "destroy": "~1.0.4", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "~1.6.2", + "mime": "1.4.1", + "ms": "2.0.0", + "on-finished": "~2.3.0", + "range-parser": "~1.2.0", + "statuses": "~1.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/send/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/send/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/send/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/send/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/send/node_modules/statuses": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz", + "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "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/serve-index/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/serve-static": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.13.2.tgz", + "integrity": "sha512-p/tdJrO4U387R9oMjb1oj7qSMaMfmOyd4j9hOFoxZe2baQszgHcSWjuya/CiT5kgZZKRudHNOA0pYXOl8rQ5nw==", + "dev": true, + "dependencies": { + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.2", + "send": "0.16.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/server-destroy": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/server-destroy/-/server-destroy-1.0.1.tgz", + "integrity": "sha512-rb+9B5YBIEzYcD6x2VKidaa+cqYBJQKnU4oe4E3ANwRRN56yk/ua1YCJT1n21NTS8w6CcOclAKNP3PhdCXKYtQ==", + "dev": true + }, + "node_modules/set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==", + "dev": true + }, + "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/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "dev": true, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/snabbdom": { + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/snabbdom/-/snabbdom-3.5.1.tgz", + "integrity": "sha512-wHMNIOjkm/YNE5EM3RCbr/+DVgPg6AqQAX1eOxO46zYNvCXjKP5Y865tqQj3EXnaMBjkxmQA5jFuDpDK/dbfiA==", + "engines": { + "node": ">=8.3.0" + } + }, + "node_modules/socket.io": { + "version": "4.7.5", + "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-4.7.5.tgz", + "integrity": "sha512-DmeAkF6cwM9jSfmp6Dr/5/mfMwb5Z5qRrSXLpo3Fq5SqyU8CMF15jIN4ZhfSwu35ksM1qmHZDQ/DK5XTccSTvA==", + "dev": true, + "dependencies": { + "accepts": "~1.3.4", + "base64id": "~2.0.0", + "cors": "~2.8.5", + "debug": "~4.3.2", + "engine.io": "~6.5.2", + "socket.io-adapter": "~2.5.2", + "socket.io-parser": "~4.2.4" + }, + "engines": { + "node": ">=10.2.0" + } + }, + "node_modules/socket.io-adapter": { + "version": "2.5.4", + "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-2.5.4.tgz", + "integrity": "sha512-wDNHGXGewWAjQPt3pyeYBtpWSq9cLE5UW1ZUPL/2eGK9jtse/FpXib7epSTsz0Q0m+6sg6Y4KtcFTlah1bdOVg==", + "dev": true, + "dependencies": { + "debug": "~4.3.4", + "ws": "~8.11.0" + } + }, + "node_modules/socket.io-adapter/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/socket.io-adapter/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/socket.io-client": { + "version": "4.7.5", + "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-4.7.5.tgz", + "integrity": "sha512-sJ/tqHOCe7Z50JCBCXrsY3I2k03iOiUe+tj1OmKeD2lXPiGH/RUCdTZFoqVyN7l1MnpIzPrGtLcijffmeouNlQ==", + "dev": true, + "dependencies": { + "@socket.io/component-emitter": "~3.1.0", + "debug": "~4.3.2", + "engine.io-client": "~6.5.2", + "socket.io-parser": "~4.2.4" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/socket.io-client/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/socket.io-client/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/socket.io-parser": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-4.2.4.tgz", + "integrity": "sha512-/GbIKmo8ioc+NIWIhwdecY0ge+qVBSMdgxGygevmdHj24bsfgtCmcUUcQ5ZzcylGFHsN3k4HB4Cgkl96KVnuew==", + "dev": true, + "dependencies": { + "@socket.io/component-emitter": "~3.1.0", + "debug": "~4.3.1" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/socket.io-parser/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/socket.io-parser/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/socket.io/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/socket.io/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/spawn-command": { + "version": "0.0.2-1", + "resolved": "https://registry.npmjs.org/spawn-command/-/spawn-command-0.0.2-1.tgz", + "integrity": "sha512-n98l9E2RMSJ9ON1AKisHzz7V42VDiBQGY6PB1BwRglz99wpVsSuGzQ+jOi6lFXBGVTCrRpltvjm+/XA+tpeJrg==", + "dev": true + }, + "node_modules/spdx-correct": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz", + "integrity": "sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==", + "dev": true, + "dependencies": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/spdx-exceptions": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.5.0.tgz", + "integrity": "sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==", + "dev": true + }, + "node_modules/spdx-expression-parse": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", + "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", + "dev": true, + "dependencies": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/spdx-license-ids": { + "version": "3.0.17", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.17.tgz", + "integrity": "sha512-sh8PWc/ftMqAAdFiBu6Fy6JUOYjqDJBJvIhpfDMyHrr0Rbp5liZqd4TjtQ/RgfLjKFZb+LMx5hpml5qOWy0qvg==", + "dev": true + }, + "node_modules/statuses": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.3.1.tgz", + "integrity": "sha512-wuTCPGlJONk/a1kqZ4fQM2+908lC7fa7nPYpTC1EhnvqLX/IICbeP1OZGDtA374trpSq68YubKUMo8oRhN46yg==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/stream-throttle": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/stream-throttle/-/stream-throttle-0.1.3.tgz", + "integrity": "sha512-889+B9vN9dq7/vLbGyuHeZ6/ctf5sNuGWsDy89uNxkFTAgzy0eK7+w5fL3KLNRTkLle7EgZGvHUphZW0Q26MnQ==", + "dev": true, + "dependencies": { + "commander": "^2.2.0", + "limiter": "^1.0.5" + }, + "bin": { + "throttleproxy": "bin/throttleproxy.js" + }, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "dev": true, + "dependencies": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/string-width-cjs": { + "name": "string-width", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width-cjs/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width-cjs/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "node_modules/string-width-cjs/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "dev": true, + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/strip-ansi-cjs": { + "name": "strip-ansi", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi-cjs/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "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/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==", + "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/tree-kill": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz", + "integrity": "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==", + "dev": true, + "bin": { + "tree-kill": "cli.js" + } + }, + "node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + }, + "node_modules/ua-parser-js": { + "version": "1.0.37", + "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-1.0.37.tgz", + "integrity": "sha512-bhTyI94tZofjo+Dn8SN6Zv8nBDvyXTymAdM3LDI/0IboIUwTu1rEhW7v2TfiVsoYWgkQ4kOVqnI8APUFbIQIFQ==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/ua-parser-js" + }, + { + "type": "paypal", + "url": "https://paypal.me/faisalman" + }, + { + "type": "github", + "url": "https://github.com/sponsors/faisalman" + } + ], + "engines": { + "node": "*" + } + }, + "node_modules/undici-types": { + "version": "5.26.5", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", + "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==", + "dev": true + }, + "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/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/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/validate-npm-package-license": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", + "dev": true, + "dependencies": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, + "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/watch": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/watch/-/watch-1.0.2.tgz", + "integrity": "sha512-1u+Z5n9Jc1E2c7qDO8SinPoZuHj7FgbgU1olSFoyaklduDvvtX7GMMtlE6OC9FTXq4KvNAOfj6Zu4vI1e9bAKA==", + "dev": true, + "dependencies": { + "exec-sh": "^0.2.0", + "minimist": "^1.2.0" + }, + "bin": { + "watch": "cli.js" + }, + "engines": { + "node": ">=0.1.95" + } + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/which-module": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.1.tgz", + "integrity": "sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ==", + "dev": true + }, + "node_modules/wrap-ansi": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs": { + "name": "wrap-ansi", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "node_modules/wrap-ansi-cjs/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi/node_modules/ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/ws": { + "version": "8.11.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.11.0.tgz", + "integrity": "sha512-HPG3wQd9sNQoT9xHyNCXoDUa+Xw/VevmY9FoHyQ+g+rrMn4j6FB4np7Z0OhdTgjx6MgQLK7jwSy1YecU1+4Asg==", + "dev": true, + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/xmlhttprequest-ssl": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-2.0.0.tgz", + "integrity": "sha512-QKxVRxiRACQcVuQEYFsI1hhkrMlrXHPegbbd1yn9UHOmRxY+si12nQYzri3vbzt8VdTTRviqcKxcyllFas5z2A==", + "dev": true, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/yargs": { + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "dev": true, + "dependencies": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "dev": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/yargs/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/yargs/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "node_modules/yargs/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/yargs/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + } + } +} diff --git a/madlib_modules/MadDocCli/package.json b/madlib_modules/MadDocCli/package.json new file mode 100644 index 0000000..9dfb626 --- /dev/null +++ b/madlib_modules/MadDocCli/package.json @@ -0,0 +1,16 @@ +{ + "name": "maddoc-cli", + "version": "0.0.11", + "description": "A Madlib tool for generating documentation!", + "bin": "build/src/maddoc-cli.js", + "dependencies": { + "sass": "^1.32.8", + "snabbdom": "^3.5.1" + }, + "devDependencies": {}, + "scripts": { + "build": "madlib compile --bundle -i src/Main.mad -o build/src/maddoc-cli.js" + }, + "author": "madlib-lang", + "license": "ISC" +} diff --git a/madlib_modules/MadDocCli/src/Build.mad b/madlib_modules/MadDocCli/src/Build.mad new file mode 100644 index 0000000..3d80d5f --- /dev/null +++ b/madlib_modules/MadDocCli/src/Build.mad @@ -0,0 +1,199 @@ +#iftarget js +import type { Wish } from "Wish" + +import type { IOUtils } from "@/IOUtils" + +import { always } from "Function" +import { dropLast, intersperse, last, nth, reduce } from "List" +import { Just, Nothing } from "Maybe" +import Process from "Process" +import String from "String" +import { join, split } from "String" +import { bad, mapRej } from "Wish" + + + +alias InputOutput = { input :: String, output :: String } + +export alias Config = { + documentationDotJson :: InputOutput, + html :: InputOutput, + madlib :: InputOutput, + sassExecutablePath :: String, + styles :: InputOutput, +} + +MADDOC_PACKAGE_FOLDER :: String +MADDOC_PACKAGE_FOLDER = "MadDoc" + +MADLIB_MODULES_FOLDER :: String +MADLIB_MODULES_FOLDER = "madlib_modules" + +JS_BUNDLE_PATH :: String +JS_BUNDLE_PATH = ".docs/bundle.js" + +CSS_TARGET_PATH :: String +CSS_TARGET_PATH = ".docs/styles/main.css" + +HTML_TARGET_PATH :: String +HTML_TARGET_PATH = ".docs/index.html" + + +parentPath :: Integer -> String -> String +parentPath = (levelsUp, path) => pipe( + split("/"), + dropLast(levelsUp), + join("/"), +)(path) + +pathToDocument :: IOUtils -> Wish String String +export pathToDocument = pipe( + .args, + nth(1), + where { + Just(path) => + of(path) + + Nothing => + bad("You must give a path to the .mad files to document!") + }, +) + + +madDocRootPath :: IOUtils -> String +export madDocRootPath = (ioUtils) => { + exePath = ioUtils.getExecutablePath() + + return pipe( + parentPath(3), + split("/"), + last, + where { + Just("madlib_modules") => + `${parentPath(3, exePath)}/${MADDOC_PACKAGE_FOLDER}` + + _ => + `${parentPath(3, exePath)}/${MADLIB_MODULES_FOLDER}/${MADDOC_PACKAGE_FOLDER}` + }, + )(exePath) +} + +sassExecutablePath :: IOUtils -> String +export sassExecutablePath = (ioUtils) => pipe( + madDocRootPath, + (rootPath) => `${parentPath(2, rootPath)}/node_modules/.bin/sass`, +)(ioUtils) + +madDocSrcPath :: IOUtils -> String +export madDocSrcPath = (ioUtils) => pipe( + madDocRootPath, + mappend($, "/src"), +)(ioUtils) + +documentationTargetPath :: IOUtils -> String +export documentationTargetPath = (ioUtils) => pipe( + madDocSrcPath, + mappend($, "/documentation.json"), +)(ioUtils) + +madDocMainPath :: IOUtils -> String +export madDocMainPath = (ioUtils) => pipe( + madDocSrcPath, + mappend($, "/Main.mad"), +)(ioUtils) + +sassPath :: IOUtils -> String +export sassPath = (ioUtils) => pipe( + madDocSrcPath, + mappend($, "/styles/main.scss"), +)(ioUtils) + +htmlSourcePath :: IOUtils -> String +export htmlSourcePath = (ioUtils) => pipe( + madDocSrcPath, + mappend($, "/index.html"), +)(ioUtils) + + +generateConfiguration :: IOUtils -> Wish String Config +export generateConfiguration = (ioUtils) => do { + input <- pathToDocument(ioUtils) + generated = { + madlib: { input: madDocMainPath(ioUtils), output: JS_BUNDLE_PATH }, + styles: { input: sassPath(ioUtils), output: CSS_TARGET_PATH }, + html: { input: htmlSourcePath(ioUtils), output: HTML_TARGET_PATH }, + sassExecutablePath: sassExecutablePath(ioUtils), + documentationDotJson: { input, output: documentationTargetPath(ioUtils) }, + } + return of(generated) +} + + +generateJson :: IOUtils -> Config -> Wish String String +export generateJson = (ioUtils, config) => pipe( + (c) => ["doc", "-i", c.documentationDotJson.input], + ioUtils.exec("madlib", $, Process.DEFAULT_COMMAND_OPTIONS), + mapRej(.stderr), + mapRej( + (err) => `An error occured while generating the docs, here is the error from madlib:\n${err}`, + ), + chain( + pipe( + .stdout, + ioUtils.writeFile(config.documentationDotJson.output), + mapRej( + always( + `documentation.json file could not be saved to ${config.documentationDotJson.output}`, + ), + ), + ), + ), + map(always(`Documentation built and saved in '${config.documentationDotJson.output}'`)), +)(config) + + +buildBundle :: IOUtils -> Config -> Wish String String +export buildBundle = (ioUtils) => pipe( + (c) => [ + "compile", + "-i", + c.madlib.input, + "--target", + "browser", + "--bundle", + "-o", + c.madlib.output, + ], + ioUtils.exec("madlib", $, Process.DEFAULT_COMMAND_OPTIONS), + mapRej(.stderr), + map(.stdout), +) + +buildSass :: IOUtils -> Config -> Wish String String +export buildSass = (ioUtils) => pipe( + (c) => ioUtils.exec( + c.sassExecutablePath, + [c.styles.input, c.styles.output], + Process.DEFAULT_COMMAND_OPTIONS, + ), + mapRej(.stderr), + map(.stdout), +) + +copyHtml :: IOUtils -> Config -> Wish String String +export copyHtml = (ioUtils) => pipe( + (c) => ioUtils.exec("cp", [c.html.input, c.html.output], Process.DEFAULT_COMMAND_OPTIONS), + mapRej(.stderr), + map(.stdout), +) + +buildDocumentation :: IOUtils -> Config -> Wish String String +export buildDocumentation = (ioUtils, config) => pipe( + buildBundle(ioUtils), + chain(() => buildSass(ioUtils, config)), + chain(() => copyHtml(ioUtils, config)), + chain(() => of(`${ioUtils.getCurrentWorkingDirectory()}/.docs`)), + map((outputPath) => `Documentation built and available in the folder '${outputPath}'`), +)(config) + +#endif diff --git a/madlib_modules/MadDocCli/src/Build.spec.mad b/madlib_modules/MadDocCli/src/Build.spec.mad new file mode 100644 index 0000000..ad86570 --- /dev/null +++ b/madlib_modules/MadDocCli/src/Build.spec.mad @@ -0,0 +1,371 @@ +#iftarget js + +import type { Wish } from "Wish" + +import type { Config } from "@/Build" +import type { IOUtils } from "@/IOUtils" + +import FilePath from "FilePath" +import { always } from "Function" +import Process from "Process" +import String from "String" +import { ErrorWithMessage, assertEquals, test } from "Test" +import { bad, chainRej, mapRej } from "Wish" + +import { + buildBundle, + buildDocumentation, + buildSass, + copyHtml, + documentationTargetPath, + generateConfiguration, + generateJson, + htmlSourcePath, + madDocMainPath, + madDocRootPath, + madDocSrcPath, + pathToDocument, + sassExecutablePath, + sassPath, +} from "@/Build" + + + +INITIAL_IOUTILS :: IOUtils +INITIAL_IOUTILS = { + args: [], + writeFile: (_, _) => of({}), + getCurrentWorkingDirectory: () => "", + getExecutablePath: () => "", + exec: (cmd, args, _) => of({ + exitCode: 0, + stderr: "", + stdout: `${cmd} ${String.join(" ", args)}`, + }), +} + +local :: String -> String +local = (str) => FilePath.joinPath([Process.getCurrentWorkingDirectory(), str]) + + +MADDOCCLI_MAIN_DOT_JS_PATH = local("build/src/Main.mjs") +FIXTURE_IOUTILS = { ...INITIAL_IOUTILS, getExecutablePath: () => MADDOCCLI_MAIN_DOT_JS_PATH } + + +DEFAULT_CONFIG :: Config +DEFAULT_CONFIG = { + madlib: { input: local("madlib_modules/MadDoc/src/Main.mad"), output: ".docs/bundle.js" }, + styles: { + input: local("madlib_modules/MadDoc/src/styles/main.scss"), + output: ".docs/styles/main.css", + }, + html: { input: local("madlib_modules/MadDoc/src/index.html"), output: ".docs/index.html" }, + sassExecutablePath: local("node_modules/.bin/sass"), + documentationDotJson: { + input: "/path/to/document", + output: local("madlib_modules/MadDoc/src/documentation.json"), + }, +} + +test( + "pathToDocument - arg is set", + () => pipe( + pathToDocument, + mapRej(() => ErrorWithMessage("pathToDocument should succeed")), + chain(assertEquals($, "/path/to/document")), + )({ ...INITIAL_IOUTILS, args: ["", "/path/to/document"] }), +) + +test( + "pathToDocument - arg is not set", + () => pipe( + pathToDocument, + map(always({})), + chainRej(assertEquals($, "You must give a path to the .mad files to document!")), + )({ ...INITIAL_IOUTILS, args: [] }), +) + +test( + "madDocRootPath - should return the root of maddoc project", + () => pipe( + madDocRootPath, + assertEquals($, local("madlib_modules/MadDoc")), + )(FIXTURE_IOUTILS), +) + +test( + "madDocRootPath - should return the root of maddoc project when installed as a dependency", + () => pipe( + madDocRootPath, + assertEquals($, "/home/madlib/my-package/madlib_modules/MadDoc"), + )({ + ...INITIAL_IOUTILS, + getExecutablePath: ( + + ) => "/home/madlib/my-package/madlib_modules/https___github_com_madlib_lang_maddoc_cli_archive_refs_heads_master_zip/.run/Main.mjs", + }), +) + +test( + "sassExecutablePath - should return the local sass install in node_modules if run locally", + () => pipe( + sassExecutablePath, + assertEquals($, local("node_modules/.bin/sass")), + )(FIXTURE_IOUTILS), +) + +test( + "sassExecutablePath - should return the local sass install in node_modules if run from a package", + () => pipe( + sassExecutablePath, + assertEquals($, "/home/madlib/my-package/node_modules/.bin/sass"), + )({ + ...INITIAL_IOUTILS, + getExecutablePath: () => "/home/madlib/my-package/madlib_modules/MadDoc/.run/Main.mjs", + }), +) + +test( + "madDocSrcPath - should return the path of the src folder from MadDoc", + () => pipe( + madDocSrcPath, + assertEquals($, local("madlib_modules/MadDoc/src")), + )(FIXTURE_IOUTILS), +) + +test( + "documentationTargetPath - should return the path for the documentation.json file", + () => pipe( + documentationTargetPath, + assertEquals($, local("madlib_modules/MadDoc/src/documentation.json")), + )(FIXTURE_IOUTILS), +) + +test( + "madDocMainPath - should return the path for the Main module of MadDoc", + () => pipe( + madDocMainPath, + assertEquals($, local("madlib_modules/MadDoc/src/Main.mad")), + )(FIXTURE_IOUTILS), +) + +test( + "sassPath - should return the path for the sass file to compile", + () => pipe( + sassPath, + assertEquals($, local("madlib_modules/MadDoc/src/styles/main.scss")), + )(FIXTURE_IOUTILS), +) + +test( + "htmlSourcePath - should return the path of index.html file to copy", + () => pipe( + htmlSourcePath, + assertEquals($, local("madlib_modules/MadDoc/src/index.html")), + )(FIXTURE_IOUTILS), +) + +test( + "generateConfiguration - should generate a correct Config with all paths", + () => { + expected = DEFAULT_CONFIG + + return pipe( + generateConfiguration, + mapRej(() => ErrorWithMessage("generateConfiguration should be success")), + chain(assertEquals($, expected)), + )({ + ...INITIAL_IOUTILS, + getExecutablePath: () => MADDOCCLI_MAIN_DOT_JS_PATH, + args: ["", "/path/to/document"], + }) + }, +) + +test( + "generateJson - should call 'madlib doc' command with correct options", + () => { + command = "" + expected = "madlib doc -i /path/to/document" + + execRecorder :: String + -> List String + -> a + -> Wish e { exitCode :: b, stderr :: String, stdout :: String } + execRecorder = (cmd, args, _) => { + command := `${cmd} ${String.join(" ", args)}` + return of({ exitCode: 0, stderr: "", stdout: "good" }) + } + + return pipe( + generateJson({ ...INITIAL_IOUTILS, exec: execRecorder }), + mapRej(() => ErrorWithMessage("generateJson should be success")), + chain(() => assertEquals(command, expected)), + )(DEFAULT_CONFIG) + }, +) + +test( + "generateJson - should reject if 'madlib doc' command fails", + () => { + expected = "An error occured while generating the docs, here is the error from madlib:\nCould not generate doc" + execRecorder = (_, _, _) => bad({ exitCode: 1, stderr: "Could not generate doc", stdout: "" }) + + return pipe( + generateJson({ ...INITIAL_IOUTILS, exec: execRecorder }), + map(always({})), + chainRej(assertEquals($, expected)), + )(DEFAULT_CONFIG) + }, +) + +test( + "buildBundle - should call the madlib compiler with correct options", + () => { + command = "" + expected = `madlib compile -i ${ + local("madlib_modules/MadDoc/src/Main.mad") + } --target browser --bundle -o .docs/bundle.js` + + execRecorder :: String + -> List String + -> a + -> Wish e { exitCode :: b, stderr :: String, stdout :: String } + execRecorder = (cmd, args, _) => { + command := `${cmd} ${String.join(" ", args)}` + return of({ exitCode: 0, stderr: "", stdout: "good" }) + } + + return pipe( + buildBundle({ ...INITIAL_IOUTILS, exec: execRecorder }), + mapRej(() => ErrorWithMessage("buildBundle should be success")), + chain(() => assertEquals(command, expected)), + )(DEFAULT_CONFIG) + }, +) + +test( + "buildBundle - should reject if 'madlib compile' command fails", + () => { + expected = "Compilation error" + execRecorder = (_, _, _) => bad({ exitCode: 1, stderr: "Compilation error", stdout: "" }) + + return pipe( + buildBundle({ ...INITIAL_IOUTILS, exec: execRecorder }), + map(always({})), + chainRej(assertEquals($, expected)), + )(DEFAULT_CONFIG) + }, +) + +test( + "buildSass - should call the sass executable with correct options", + () => { + command = "" + expected = local( + `node_modules/.bin/sass ${ + local("madlib_modules/MadDoc/src/styles/main.scss") + } .docs/styles/main.css`, + ) + + execRecorder :: String + -> List String + -> a + -> Wish e { exitCode :: b, stderr :: String, stdout :: String } + execRecorder = (cmd, args, _) => { + command := `${cmd} ${String.join(" ", args)}` + return of({ exitCode: 0, stderr: "", stdout: "good" }) + } + + return pipe( + buildSass({ ...INITIAL_IOUTILS, exec: execRecorder }), + mapRej(() => ErrorWithMessage("buildSass should be success")), + chain(() => assertEquals(command, expected)), + )(DEFAULT_CONFIG) + }, +) + +test( + "buildSass - should reject if 'sass' command fails", + () => { + expected = "Sass error" + execRecorder = (_, _, _) => bad({ exitCode: 1, stderr: "Sass error", stdout: "" }) + + return pipe( + buildSass({ ...INITIAL_IOUTILS, exec: execRecorder }), + map(always({})), + chainRej(assertEquals($, expected)), + )(DEFAULT_CONFIG) + }, +) + +test( + "copyHtml - should call 'cp' with correct options", + () => { + command = "" + expected = `cp ${local("madlib_modules/MadDoc/src/index.html")} .docs/index.html` + + execRecorder :: String + -> List String + -> a + -> Wish e { exitCode :: b, stderr :: String, stdout :: String } + execRecorder = (cmd, args, _) => { + command := `${cmd} ${String.join(" ", args)}` + return of({ exitCode: 0, stderr: "", stdout: "good" }) + } + + return pipe( + copyHtml({ ...INITIAL_IOUTILS, exec: execRecorder }), + mapRej(() => ErrorWithMessage("copyHtml should be success")), + chain(() => assertEquals(command, expected)), + )(DEFAULT_CONFIG) + }, +) + +test( + "copyHtml - should reject if 'cp' command fails", + () => { + expected = "cp error" + execRecorder = (_, _, _) => bad({ exitCode: 1, stderr: "cp error", stdout: "" }) + + return pipe( + copyHtml({ ...INITIAL_IOUTILS, exec: execRecorder }), + map(always({})), + chainRej(assertEquals($, expected)), + )(DEFAULT_CONFIG) + }, +) + +test( + "buildDocumentation", + () => { + commands = [] + expected = [ + `madlib compile -i ${ + local("madlib_modules/MadDoc/src/Main.mad") + } --target browser --bundle -o .docs/bundle.js`, + `${local("node_modules/.bin/sass")} ${ + local("madlib_modules/MadDoc/src/styles/main.scss") + } .docs/styles/main.css`, + `cp ${local("madlib_modules/MadDoc/src/index.html")} .docs/index.html`, + ] + + execRecorder :: String + -> List String + -> a + -> Wish e { exitCode :: b, stderr :: String, stdout :: String } + execRecorder = (cmd, args, _) => { + command = `${cmd} ${String.join(" ", args)}` + commands := mappend(commands, [command]) + return of({ exitCode: 0, stderr: "", stdout: "good" }) + } + + return pipe( + buildDocumentation({ ...INITIAL_IOUTILS, exec: execRecorder }), + mapRej(() => ErrorWithMessage("buildDocumentation should be success")), + chain(() => assertEquals(commands, expected)), + )(DEFAULT_CONFIG) + }, +) + +#endif diff --git a/madlib_modules/MadDocCli/src/IOUtils.mad b/madlib_modules/MadDocCli/src/IOUtils.mad new file mode 100644 index 0000000..2587e95 --- /dev/null +++ b/madlib_modules/MadDocCli/src/IOUtils.mad @@ -0,0 +1,34 @@ +#iftarget js +import type { Error } from "IO" +import type { CommandOptions, CommandResult } from "Process" +import type { Wish } from "Wish" + +import File from "File" +import IO from "IO" +import { Argv, exec, getCurrentWorkingDirectory, getExecutablePath } from "Process" +import String from "String" + + + +export alias IOUtils = { + args :: List String, + exec :: String -> List String -> CommandOptions -> Wish CommandResult CommandResult, + getCurrentWorkingDirectory :: {} -> String, + getExecutablePath :: {} -> String, + writeFile :: String -> String -> Wish Error {}, +} + + +defaultIOUtils :: IOUtils +export defaultIOUtils = { + args: Argv, + writeFile: File.write, + getCurrentWorkingDirectory, + getExecutablePath, + exec: (cmd, args, opts) => { + IO.putLine(`Running: ${cmd} ${String.join(" ", args)}...`) + return exec(cmd, args, opts) + }, +} + +#endif diff --git a/madlib_modules/MadDocCli/src/Main.mad b/madlib_modules/MadDocCli/src/Main.mad new file mode 100644 index 0000000..dda6727 --- /dev/null +++ b/madlib_modules/MadDocCli/src/Main.mad @@ -0,0 +1,42 @@ +#iftarget js + +import type { Wish } from "Wish" + +import type { Config } from "@/Build" + +import IO from "IO" +import { andDo } from "Monad" +import { fulfill } from "Wish" + +import { buildDocumentation, generateConfiguration, generateJson, pathToDocument } from "@/Build" +import { defaultIOUtils } from "@/IOUtils" + + + +run :: Config -> Wish String String +run = (config) => pipe( + generateJson(defaultIOUtils), + andDo(buildDocumentation(defaultIOUtils, config)), +)(config) + + +main :: List String -> {} +main = () => { + fulfill( + IO.log, + (path) => IO.log(`Running documentation generation for the madlib modules in '${path}'`), + pathToDocument(defaultIOUtils), + ) + + fulfill( + (e) => { + IO.trace("err", e) + }, + (x) => { + IO.trace("good", x) + }, + chain(run, generateConfiguration(defaultIOUtils)), + ) +} + +#endif diff --git a/madlib_modules/MadDocCli/src/Main.mjs b/madlib_modules/MadDocCli/src/Main.mjs new file mode 100644 index 0000000..ddc717a --- /dev/null +++ b/madlib_modules/MadDocCli/src/Main.mjs @@ -0,0 +1,1197 @@ +// file: /Users/brekk/madness/gambit/madlib_modules/MadDocCli/src/Main.mad +import {} from "./../../../__internals__.mjs" +export let _10f79_DictRBBlack = ({ __constructor: "DictRBBlack", __args: [ ] }); +export let _10f79_DictRBRed = ({ __constructor: "DictRBRed", __args: [ ] }); +export let _10f79_DictRBEmpty = ({ __constructor: "DictRBEmpty", __args: [ ] }); +export let _10f79_DictRBNode = (a => b => c => d => e => ({ __constructor: "DictRBNode", __args: [ a, b, c, d, e ] })); +export let _10f79_LT = ({ __constructor: "LT", __args: [ ] }); +export let _10f79_EQ = ({ __constructor: "EQ", __args: [ ] }); +export let _10f79_GT = ({ __constructor: "GT", __args: [ ] }); +export let _3d769_Loop = (a => ({ __constructor: "Loop", __args: [ a ] })); +export let _3d769_Done = (a => ({ __constructor: "Done", __args: [ a ] })); +export let _2e42b_Just = (a => ({ __constructor: "Just", __args: [ a ] })); +export let _2e42b_Nothing = ({ __constructor: "Nothing", __args: [ ] }); +let _1e6e4___TimerId__ = ({ __constructor: "__TimerId__", __args: [ ] }); +export let _1e6e4_Wish = (a => ({ __constructor: "Wish", __args: [ a ] })); +export let _77488_AddressAlreadyInUse = ({ __constructor: "AddressAlreadyInUse", __args: [ ] }); +export let _77488_ArgumentListToLong = ({ __constructor: "ArgumentListToLong", __args: [ ] }); +export let _77488_PermissionDenied = ({ __constructor: "PermissionDenied", __args: [ ] }); +export let _77488_UnknownError = ({ __constructor: "UnknownError", __args: [ ] }); +export let _42e19_Left = (a => ({ __constructor: "Left", __args: [ a ] })); +export let _42e19_Right = (a => ({ __constructor: "Right", __args: [ a ] })); +export let _a32d2_Loc = (a => b => c => ({ __constructor: "Loc", __args: [ a, b, c ] })); +export let _a32d2_Parser = (a => ({ __constructor: "Parser", __args: [ a ] })); +export let _a32d2_Error = (a => ({ __constructor: "Error", __args: [ a ] })); +export let _a32d2_Config = (a => ({ __constructor: "Config", __args: [ a ] })); +export let _1fda7_EmptyDoc = ({ __constructor: "EmptyDoc", __args: [ ] }); +export let _1fda7_CharDoc = (a => ({ __constructor: "CharDoc", __args: [ a ] })); +export let _1fda7_TextDoc = (a => b => ({ __constructor: "TextDoc", __args: [ a, b ] })); +export let _1fda7_LineDoc = (a => ({ __constructor: "LineDoc", __args: [ a ] })); +export let _1fda7_CatDoc = (a => b => ({ __constructor: "CatDoc", __args: [ a, b ] })); +export let _1fda7_NestDoc = (a => b => ({ __constructor: "NestDoc", __args: [ a, b ] })); +export let _1fda7_UnionDoc = (a => b => ({ __constructor: "UnionDoc", __args: [ a, b ] })); +export let _1fda7_ColumnDoc = (a => ({ __constructor: "ColumnDoc", __args: [ a ] })); +export let _1fda7_NestingDoc = (a => ({ __constructor: "NestingDoc", __args: [ a ] })); +export let _1fda7_SEmpty = ({ __constructor: "SEmpty", __args: [ ] }); +export let _1fda7_SChar = (a => b => ({ __constructor: "SChar", __args: [ a, b ] })); +export let _1fda7_SText = (a => b => c => ({ __constructor: "SText", __args: [ a, b, c ] })); +export let _1fda7_SLine = (a => b => ({ __constructor: "SLine", __args: [ a, b ] })); +let _936d2_HandlerId = ({ __constructor: "HandlerId", __args: [ ] }); +let _936d2_NormalMode = ({ __constructor: "NormalMode", __args: [ ] }); +let _936d2_RawMode = ({ __constructor: "RawMode", __args: [ ] }); +let _91e6c_Constructor = (a => b => ({ __constructor: "Constructor", __args: [ a, b ] })); +let _91e6c_Unit = ({ __constructor: "Unit", __args: [ ] }); +let _91e6c_Record = (a => ({ __constructor: "Record", __args: [ a ] })); +let _91e6c_Integer = (a => ({ __constructor: "Integer", __args: [ a ] })); +let _91e6c_Float = (a => ({ __constructor: "Float", __args: [ a ] })); +let _91e6c_Boolean = (a => ({ __constructor: "Boolean", __args: [ a ] })); +let _91e6c_Char = (a => ({ __constructor: "Char", __args: [ a ] })); +let _91e6c_Str = (a => ({ __constructor: "Str", __args: [ a ] })); +let _91e6c_DictionaryConstructor = (a => ({ __constructor: "DictionaryConstructor", __args: [ a ] })); +let _91e6c_ListConstructor = (a => ({ __constructor: "ListConstructor", __args: [ a ] })); +let _91e6c_TupleConstructor = (a => ({ __constructor: "TupleConstructor", __args: [ a ] })); +let _91e6c_Byte = (a => ({ __constructor: "Byte", __args: [ a ] })); +let _91e6c_ByteArray = (a => ({ __constructor: "ByteArray", __args: [ a ] })); +let _c8121_Handle = (a => ({ __constructor: "Handle", __args: [ a ] })); +export let _c8121_getCurrentWorkingDirectory__4 = (_ => { return process.cwd() } ); + +const buildEnvImpl = (dictFromList) => { + let list = {} + let start = list + Object.keys(process.env).forEach((key) => { + list = list.n = { v: [key, process.env[key]], n: null } + }, {}) + return dictFromList(start.n) +} +; +let _c8121_envFFI__25 = a => buildEnvImpl(a); +let _c8121__exec__35 = (command => args => options => _1e6e4_Wish((bad => good => { + let stdoutChunks = [] + let stderrChunks = [] + + const env = {}; + const envItems = __listToJSArray__(options.env); + envItems.forEach(([key, value]) => { env[key] = value; }) + + const proc = prelude_spawn( + command, + __listToJSArray__(args), + { + cwd: options.cwd, + env: { ...process.env, ...env }, + } + ) + + proc.stdout.on("data", (chunk) => { + stdoutChunks.push(Buffer.from(chunk, 'binary')); + }) + + proc.stderr.on("data", (chunk) => { + stderrChunks.push(Buffer.from(chunk, 'binary')); + }) + + proc.on('close', (code) => { + const stdoutBuffer = Buffer.concat(stdoutChunks) + const stderrBuffer = Buffer.concat(stderrChunks) + + const result = { + exitCode: code, + stdout: stdoutBuffer.toString(), + stderr: stderrBuffer.toString(), + } + + if (code === 0) { + good(result) + } else { + bad(result) + } + }); + + return () => { + proc.stdin.pause(); + proc.stderr.pause(); + proc.kill(); + } +} ))); + +const makeArgs = () => { + let list = {} + let start = list + Object.keys(process.argv.slice(0)).forEach((key) => { + list = list.n = { v: process.argv[key], n: null } + }, {}) + return { + n: start.n.n.n, + v: start.n.n.v + } +} +; +export let _c8121_Argv__2 = + makeArgs() +; +; +; +; +; + +import prelude_file_fs from "fs" +; +export let _c58c5_write__3 = (path => content => _1e6e4_Wish((bad => good => { + const abortController = new AbortController() + prelude_file_fs.writeFile(path, content, { signal: abortController.signal }, (err) => { + if (err) { + if (err.name !== "AbortError") { + bad({ __constructor: "UnknownError", __args: [] }) + } + } + else { + good(path) + } + }) + + return () => { + abortController.abort() + } + } ))); +let _b6c60_MADLIB_MODULES_FOLDER__55 = `madlib_modules`; +let _b6c60_MADDOC_PACKAGE_FOLDER__54 = `MadDoc`; +let _b6c60_JS_BUNDLE_PATH__56 = `.docs/bundle.js`; +let _b6c60_HTML_TARGET_PATH__60 = `.docs/index.html`; +let _b6c60_CSS_TARGET_PATH__58 = `.docs/styles/main.css`; + +import prelude_terminal_readline from "readline" +; + let readLineInterface = null ; +; +; +; +; + +import prelude_readline from "readline" +; +export let _9bab1_putLine__15 = (a => { console.log(a) } ); +export let _3d769_always__77 = (a => _ => a); +export let _3d769_always__74 = (a => _ => a); +export let _31104_reduceLeft__31 = (f => acc => dict => { + let $_result_; + let $_continue_ = true; + let $$f = f; + let $$acc = acc; + let $$dict = dict; + + while($_continue_) { + let $f = $$f; + let $acc = $$acc; + let $dict = $$dict; + + $_continue_ = false; + ((__x__) => { + if (__x__.__constructor === "DictRBEmpty") { + ($_result_ = $acc); + } + else if (__x__.__constructor === "DictRBNode" && true && true && true && true && true) { + let k = __x__.__args[1]; + let v = __x__.__args[2]; + let left = __x__.__args[3]; + let right = __x__.__args[4]; + ($$f = $f, $$acc = $f(k)(v)(_31104_reduceLeft__31($f)($acc)(left)), $$dict = right, $_continue_ = true); + } + else { + console.log('non exhaustive patterns for value: ', __x__.toString()); + console.trace(); + throw 'non exhaustive patterns!'; + } +})($dict) + } + return $_result_; +}); +export let _2e42b_fromMaybe__7 = (or => __W__1 => ((__x__) => { + if (__x__.__constructor === "Just" && true) { + let a = __x__.__args[0]; + return a; + } + else if (__x__.__constructor === "Nothing") { + return or; + } + else { + console.log('non exhaustive patterns for value: ', __x__.toString()); + console.trace(); + throw 'non exhaustive patterns!'; + } +})(__W__1)); +export let _1e6e4_map__85 = (f => m => _1e6e4_Wish((badCB => goodCB => ((__x__) => { + if (__x__.__constructor === "Wish" && true) { + let run = __x__.__args[0]; + return run(badCB)((x => goodCB(f(x)))); + } + else { + console.log('non exhaustive patterns for value: ', __x__.toString()); + console.trace(); + throw 'non exhaustive patterns!'; + } +})(m)))); +export let _1e6e4_map__81 = (f => m => _1e6e4_Wish((badCB => goodCB => ((__x__) => { + if (__x__.__constructor === "Wish" && true) { + let run = __x__.__args[0]; + return run(badCB)((x => goodCB(f(x)))); + } + else { + console.log('non exhaustive patterns for value: ', __x__.toString()); + console.trace(); + throw 'non exhaustive patterns!'; + } +})(m)))); +export let _1e6e4_map__78 = (f => m => _1e6e4_Wish((badCB => goodCB => ((__x__) => { + if (__x__.__constructor === "Wish" && true) { + let run = __x__.__args[0]; + return run(badCB)((x => goodCB(f(x)))); + } + else { + console.log('non exhaustive patterns for value: ', __x__.toString()); + console.trace(); + throw 'non exhaustive patterns!'; + } +})(m)))); +export let _1e6e4_mapRej__75 = (f => m => _1e6e4_Wish((badCB => goodCB => ((__x__) => { + if (__x__.__constructor === "Wish" && true) { + let run = __x__.__args[0]; + return run((x => badCB(f(x))))(goodCB); + } + else { + console.log('non exhaustive patterns for value: ', __x__.toString()); + console.trace(); + throw 'non exhaustive patterns!'; + } +})(m)))); +export let _1e6e4_mapRej__73 = (f => m => _1e6e4_Wish((badCB => goodCB => ((__x__) => { + if (__x__.__constructor === "Wish" && true) { + let run = __x__.__args[0]; + return run((x => badCB(f(x))))(goodCB); + } + else { + console.log('non exhaustive patterns for value: ', __x__.toString()); + console.trace(); + throw 'non exhaustive patterns!'; + } +})(m)))); +export let _1e6e4_mapRej__72 = (f => m => _1e6e4_Wish((badCB => goodCB => ((__x__) => { + if (__x__.__constructor === "Wish" && true) { + let run = __x__.__args[0]; + return run((x => badCB(f(x))))(goodCB); + } + else { + console.log('non exhaustive patterns for value: ', __x__.toString()); + console.trace(); + throw 'non exhaustive patterns!'; + } +})(m)))); +export let _1e6e4_good__65 = (a => _1e6e4_Wish((_ => goodCB => { + goodCB(a); + return (_ => ({ __constructor: "Unit", __args: [] })); +}))); +export let _1e6e4_pure__64 = (_ => _1e6e4_good__65); +export let _1e6e4_of__63 = (_ => _1e6e4_pure__64()); +export let _1e6e4_good__39 = (a => _1e6e4_Wish((_ => goodCB => { + goodCB(a); + return (_ => ({ __constructor: "Unit", __args: [] })); +}))); +export let _1e6e4_pure__38 = (_ => _1e6e4_good__39); +export let _1e6e4_of__37 = (_ => _1e6e4_pure__38()); +export let _1e6e4_fulfill__43 = (badCB => goodCB => m => ((__x__) => { + if (__x__.__constructor === "Wish" && true) { + let run = __x__.__args[0]; + return run(badCB)(goodCB); + } + else { + console.log('non exhaustive patterns for value: ', __x__.toString()); + console.trace(); + throw 'non exhaustive patterns!'; + } +})(m)); +export let _1e6e4_chain__87 = (f => m => _1e6e4_Wish((badCB => goodCB => ((__x__) => { + if (__x__.__constructor === "Wish" && true) { + let run = __x__.__args[0]; + return (() => { + let cancel +cancel = _2e42b_Nothing; + let r1 +r1 = run(badCB)((x => { + let r2 +r2 = ((__x__) => { + if (__x__.__constructor === "Wish" && true) { + let _run = __x__.__args[0]; + return _run(badCB)(goodCB); + } + else { + console.log('non exhaustive patterns for value: ', __x__.toString()); + console.trace(); + throw 'non exhaustive patterns!'; + } +})(f(x)); + cancel = _2e42b_Just(r2); + return ({ __constructor: "Unit", __args: [] }); +})); + (__eq__(cancel, _2e42b_Nothing) ? (() => { + cancel = _2e42b_Just(r1); + return ({ __constructor: "Unit", __args: [] }); + +})() : ({ __constructor: "Unit", __args: [] })); + return (_ => { + ((__x__) => { + if (__x__.__constructor === "Just" && true) { + let c = __x__.__args[0]; + return c(); + } + else if (__x__.__constructor === "Nothing") { + return ({ __constructor: "Unit", __args: [] }); + } + else { + console.log('non exhaustive patterns for value: ', __x__.toString()); + console.trace(); + throw 'non exhaustive patterns!'; + } +})(cancel); + return ({ __constructor: "Unit", __args: [] }); +}); + +})(); + } + else { + console.log('non exhaustive patterns for value: ', __x__.toString()); + console.trace(); + throw 'non exhaustive patterns!'; + } +})(m)))); +export let _1e6e4_chain__83 = (f => m => _1e6e4_Wish((badCB => goodCB => ((__x__) => { + if (__x__.__constructor === "Wish" && true) { + let run = __x__.__args[0]; + return (() => { + let cancel +cancel = _2e42b_Nothing; + let r1 +r1 = run(badCB)((x => { + let r2 +r2 = ((__x__) => { + if (__x__.__constructor === "Wish" && true) { + let _run = __x__.__args[0]; + return _run(badCB)(goodCB); + } + else { + console.log('non exhaustive patterns for value: ', __x__.toString()); + console.trace(); + throw 'non exhaustive patterns!'; + } +})(f(x)); + cancel = _2e42b_Just(r2); + return ({ __constructor: "Unit", __args: [] }); +})); + (__eq__(cancel, _2e42b_Nothing) ? (() => { + cancel = _2e42b_Just(r1); + return ({ __constructor: "Unit", __args: [] }); + +})() : ({ __constructor: "Unit", __args: [] })); + return (_ => { + ((__x__) => { + if (__x__.__constructor === "Just" && true) { + let c = __x__.__args[0]; + return c(); + } + else if (__x__.__constructor === "Nothing") { + return ({ __constructor: "Unit", __args: [] }); + } + else { + console.log('non exhaustive patterns for value: ', __x__.toString()); + console.trace(); + throw 'non exhaustive patterns!'; + } +})(cancel); + return ({ __constructor: "Unit", __args: [] }); +}); + +})(); + } + else { + console.log('non exhaustive patterns for value: ', __x__.toString()); + console.trace(); + throw 'non exhaustive patterns!'; + } +})(m)))); +export let _4be73_andDo__86 = (b => a => _1e6e4_chain__83((_ => b))(a)); +export let _1e6e4_chain__76 = (f => m => _1e6e4_Wish((badCB => goodCB => ((__x__) => { + if (__x__.__constructor === "Wish" && true) { + let run = __x__.__args[0]; + return (() => { + let cancel +cancel = _2e42b_Nothing; + let r1 +r1 = run(badCB)((x => { + let r2 +r2 = ((__x__) => { + if (__x__.__constructor === "Wish" && true) { + let _run = __x__.__args[0]; + return _run(badCB)(goodCB); + } + else { + console.log('non exhaustive patterns for value: ', __x__.toString()); + console.trace(); + throw 'non exhaustive patterns!'; + } +})(f(x)); + cancel = _2e42b_Just(r2); + return ({ __constructor: "Unit", __args: [] }); +})); + (__eq__(cancel, _2e42b_Nothing) ? (() => { + cancel = _2e42b_Just(r1); + return ({ __constructor: "Unit", __args: [] }); + +})() : ({ __constructor: "Unit", __args: [] })); + return (_ => { + ((__x__) => { + if (__x__.__constructor === "Just" && true) { + let c = __x__.__args[0]; + return c(); + } + else if (__x__.__constructor === "Nothing") { + return ({ __constructor: "Unit", __args: [] }); + } + else { + console.log('non exhaustive patterns for value: ', __x__.toString()); + console.trace(); + throw 'non exhaustive patterns!'; + } +})(cancel); + return ({ __constructor: "Unit", __args: [] }); +}); + +})(); + } + else { + console.log('non exhaustive patterns for value: ', __x__.toString()); + console.trace(); + throw 'non exhaustive patterns!'; + } +})(m)))); +export let _1e6e4_chain__66 = (f => m => _1e6e4_Wish((badCB => goodCB => ((__x__) => { + if (__x__.__constructor === "Wish" && true) { + let run = __x__.__args[0]; + return (() => { + let cancel +cancel = _2e42b_Nothing; + let r1 +r1 = run(badCB)((x => { + let r2 +r2 = ((__x__) => { + if (__x__.__constructor === "Wish" && true) { + let _run = __x__.__args[0]; + return _run(badCB)(goodCB); + } + else { + console.log('non exhaustive patterns for value: ', __x__.toString()); + console.trace(); + throw 'non exhaustive patterns!'; + } +})(f(x)); + cancel = _2e42b_Just(r2); + return ({ __constructor: "Unit", __args: [] }); +})); + (__eq__(cancel, _2e42b_Nothing) ? (() => { + cancel = _2e42b_Just(r1); + return ({ __constructor: "Unit", __args: [] }); + +})() : ({ __constructor: "Unit", __args: [] })); + return (_ => { + ((__x__) => { + if (__x__.__constructor === "Just" && true) { + let c = __x__.__args[0]; + return c(); + } + else if (__x__.__constructor === "Nothing") { + return ({ __constructor: "Unit", __args: [] }); + } + else { + console.log('non exhaustive patterns for value: ', __x__.toString()); + console.trace(); + throw 'non exhaustive patterns!'; + } +})(cancel); + return ({ __constructor: "Unit", __args: [] }); +}); + +})(); + } + else { + console.log('non exhaustive patterns for value: ', __x__.toString()); + console.trace(); + throw 'non exhaustive patterns!'; + } +})(m)))); +export let _1e6e4_bad__40 = (e => _1e6e4_Wish((badCB => _ => { + badCB(e); + return (_ => ({ __constructor: "Unit", __args: [] })); +}))); +export let _1dd2b_nth__6 = (i => list => { + let $_result_; + let $_continue_ = true; + let $$i = i; + let $$list = list; + + while($_continue_) { + let $i = $$i; + let $list = $$list; + + $_continue_ = false; + ((__x__) => { + if (__x__ === null) { + ($_result_ = _2e42b_Nothing); + } + else if (__x__ !== null && true && true) { + let { v: a, n: xs } = __x__; + (__eq__($i, 0) ? ($_result_ = _2e42b_Just(a)) : ($$i = ($i - 1), $$list = xs, $_continue_ = true)); + } + else { + console.log('non exhaustive patterns for value: ', __x__.toString()); + console.trace(); + throw 'non exhaustive patterns!'; + } +})($list) + } + return $_result_; +}); +export let _b6c60_pathToDocument__36 = (__P__2 => (__W__3 => ((__x__) => { + if (__x__.__constructor === "Just" && true) { + let path = __x__.__args[0]; + return _1e6e4_of__37()(path); + } + else if (__x__.__constructor === "Nothing") { + return _1e6e4_bad__40(`You must give a path to the .mad files to document!`); + } + else { + console.log('non exhaustive patterns for value: ', __x__.toString()); + console.trace(); + throw 'non exhaustive patterns!'; + } +})(__W__3))(_1dd2b_nth__6(1)((__R__ => __R__.args)(__P__2)))); +export let _c8121_getExecutablePath__5 = (_ => _2e42b_fromMaybe__7(``)(_1dd2b_nth__6(0)(_c8121_Argv__2))); +export let _1dd2b_length__52 = (list => { + let helper__0 +helper__0 = (list_ => count => { + let $_result_; + let $_continue_ = true; + let $$list_ = list_; + let $$count = count; + + while($_continue_) { + let $list_ = $$list_; + let $count = $$count; + + $_continue_ = false; + ((__x__) => { + if (__x__ === null) { + ($_result_ = $count); + } + else if (__x__ !== null && true && true) { + let { v: a, n: xs } = __x__; + ($$list_ = xs, $$count = ($count + 1), $_continue_ = true); + } + else { + console.log('non exhaustive patterns for value: ', __x__.toString()); + console.trace(); + throw 'non exhaustive patterns!'; + } +})($list_) + } + return $_result_; +}); + return helper__0(list)(0); +}); +export let _1dd2b_slice__51 = (start => end => list => { + let len +len = _1dd2b_length__52(list); + let helper__0 +helper__0 = (start_ => end_ => list_ => { + let $_result_; + let $_continue_ = true; + let $_start_ = {}; + let $_end_ = $_start_; + let $$start_ = start_; + let $$end_ = end_; + let $$list_ = list_; + + while($_continue_) { + let $start_ = $$start_; + let $end_ = $$end_; + let $list_ = $$list_; + + $_continue_ = false; + ((__x__) => { + if (__x__ === null) { + ($_end_.n = (null), $_result_ = $_start_.n); + } + else if (__x__ !== null && true && true) { + let { v: a, n: xs } = __x__; + (__eq__($start_, 0) && $end_ >= 0 ? ($_end_ = $_end_.n = { v: a }, $$start_ = 0, $$end_ = ($end_ - 1), $$list_ = xs, $_continue_ = true) : ($start_ > 0 ? ($$start_ = ($start_ - 1), $$end_ = ($end_ - 1), $$list_ = xs, $_continue_ = true) : ($_end_.n = (null), $_result_ = $_start_.n))); + } + else { + console.log('non exhaustive patterns for value: ', __x__.toString()); + console.trace(); + throw 'non exhaustive patterns!'; + } +})($list_) + } + return $_result_; +}); + let realStart +realStart = (start < 0 ? (start + len) : start); + let realEnd +realEnd = (__eq__(end, 0) ? (len - 1) : (end < 0 ? ((end + len) - 1) : end)); + return helper__0(realStart)(realEnd)(list); +}); +export let _1dd2b_last__53 = (list => { + let $_result_; + let $_continue_ = true; + let $$list = list; + + while($_continue_) { + let $list = $$list; + + $_continue_ = false; + ((__x__) => { + if (__x__ !== null && true && __x__.n === null) { + let { v: item } = __x__; + ($_result_ = _2e42b_Just(item)); + } + else if (__x__ === null) { + ($_result_ = _2e42b_Nothing); + } + else if (__x__ !== null && true && __x__.n !== null && true && true) { + let { n: { v: a, n: xs } } = __x__; + ($$list = ({ v: a, n: xs }), $_continue_ = true); + } + else { + console.log('non exhaustive patterns for value: ', __x__.toString()); + console.trace(); + throw 'non exhaustive patterns!'; + } +})($list) + } + return $_result_; +}); +; +; +; +; +; +; +; +export let _1dd2b_intersperse__9 = (a => xs => { + let $_result_; + let $_continue_ = true; + let $_start_ = {}; + let $_end_ = $_start_; + let $$a = a; + let $$xs = xs; + + while($_continue_) { + let $a = $$a; + let $xs = $$xs; + + $_continue_ = false; + ((__x__) => { + if (__x__ === null) { + ($_end_.n = (null), $_result_ = $_start_.n); + } + else if (__x__ !== null && true && __x__.n === null) { + let { v: one } = __x__; + ($_end_.n = ({ v: one, n: null }), $_result_ = $_start_.n); + } + else if (__x__ !== null && true && __x__.n !== null && true && __x__.n.n === null) { + let { v: one, n: { v: two } } = __x__; + ($_end_.n = ({ v: one, n: { v: $a, n: { v: two, n: null } } }), $_result_ = $_start_.n); + } + else if (__x__ !== null && true && true) { + let { v: one, n: rest } = __x__; + ($_end_.n = { v: one, n: { v: $a }}, $_end_ = $_end_.n.n, $$a = $a, $$xs = rest, $_continue_ = true); + } + else { + console.log('non exhaustive patterns for value: ', __x__.toString()); + console.trace(); + throw 'non exhaustive patterns!'; + } +})($xs) + } + return $_result_; +}); +export let _1dd2b_dropLast__50 = (n => list => _1dd2b_slice__51(0)(-n)(list)); +export let _10f79_show__42 = (s => `"${s.split('').map(escapeChar).join('')}"` ); +export let _9bab1_log__41 = (__P__2 => _9bab1_putLine__15(_10f79_show__42(__P__2))); +export let _9bab1_trace__88 = (v => a => { + _9bab1_putLine__15(v + ` ` + _10f79_show__42(a)); + return a; +}); +export let _10f79_reduceLeft__71 = (f => acc => list => { + let $_result_; + let $_continue_ = true; + let $$f = f; + let $$acc = acc; + let $$list = list; + + while($_continue_) { + let $f = $$f; + let $acc = $$acc; + let $list = $$list; + + $_continue_ = false; + ((__x__) => { + if (__x__ !== null && true && true) { + let { v: a, n: xs } = __x__; + ($$f = $f, $$acc = $f($acc)(a), $$list = xs, $_continue_ = true); + } + else if (__x__ === null) { + ($_result_ = $acc); + } + else { + console.log('non exhaustive patterns for value: ', __x__.toString()); + console.trace(); + throw 'non exhaustive patterns!'; + } +})($list) + } + return $_result_; +}); +export let _10f79_reduceLeft__24 = (f => acc => list => { + let $_result_; + let $_continue_ = true; + let $$f = f; + let $$acc = acc; + let $$list = list; + + while($_continue_) { + let $f = $$f; + let $acc = $$acc; + let $list = $$list; + + $_continue_ = false; + ((__x__) => { + if (__x__ !== null && true && true) { + let { v: a, n: xs } = __x__; + ($$f = $f, $$acc = $f($acc)(a), $$list = xs, $_continue_ = true); + } + else if (__x__ === null) { + ($_result_ = $acc); + } + else { + console.log('non exhaustive patterns for value: ', __x__.toString()); + console.trace(); + throw 'non exhaustive patterns!'; + } +})($list) + } + return $_result_; +}); +export let _10f79_reduceLeft__14 = (f => acc => list => { + let $_result_; + let $_continue_ = true; + let $$f = f; + let $$acc = acc; + let $$list = list; + + while($_continue_) { + let $f = $$f; + let $acc = $$acc; + let $list = $$list; + + $_continue_ = false; + ((__x__) => { + if (__x__ !== null && true && true) { + let { v: a, n: xs } = __x__; + ($$f = $f, $$acc = $f($acc)(a), $$list = xs, $_continue_ = true); + } + else if (__x__ === null) { + ($_result_ = $acc); + } + else { + console.log('non exhaustive patterns for value: ', __x__.toString()); + console.trace(); + throw 'non exhaustive patterns!'; + } +})($list) + } + return $_result_; +}); +; +export let _1dd2b_reduce__13 = _10f79_reduceLeft__14; +export let _10f79_dictReduceRight__34 = (f => acc => dict => { + let $_result_; + let $_continue_ = true; + let $$f = f; + let $$acc = acc; + let $$dict = dict; + + while($_continue_) { + let $f = $$f; + let $acc = $$acc; + let $dict = $$dict; + + $_continue_ = false; + ((__x__) => { + if (__x__.__constructor === "DictRBEmpty") { + ($_result_ = $acc); + } + else if (__x__.__constructor === "DictRBNode" && true && true && true && true && true) { + let k = __x__.__args[1]; + let v = __x__.__args[2]; + let left = __x__.__args[3]; + let right = __x__.__args[4]; + ($$f = $f, $$acc = $f(k)(v)(_10f79_dictReduceRight__34($f)($acc)(right)), $$dict = left, $_continue_ = true); + } + else { + console.log('non exhaustive patterns for value: ', __x__.toString()); + console.trace(); + throw 'non exhaustive patterns!'; + } +})($dict) + } + return $_result_; +}); +export let _10f79_dictToList__33 = (dict => _10f79_dictReduceRight__34((k => v => list => ({ v: ([k, v]), n: list })))((null))(dict)); +export let _31104_toList__32 = _10f79_dictToList__33; + +const escapeChar = (c) => { + if (c === '\\') { + return `\\\\` + } else if (c === '"') { + return `\\"` + } else if (c === '\n') { + return `\\n` + } else if (c === '\t') { + return `\\t` + } else if (c === '\r') { + return `\\r` + } else { + return c + } +} +; +let _10f79_concatString__12 = (a => b => a + b ); +export let _10f79_compare__22 = (a => b => ( a > b ? _10f79_GT : ( a === b ? _10f79_EQ : _10f79_LT))); +export let _10f79_balanceDict__30 = (color => k => v => left => right => ((__x__) => { + if (__x__.__constructor === "DictRBNode" && __x__.__args[0].__constructor === "DictRBRed" && true && true && true && true) { + let rK = __x__.__args[1]; + let rV = __x__.__args[2]; + let rLeft = __x__.__args[3]; + let rRight = __x__.__args[4]; + return ((__x__) => { + if (__x__.__constructor === "DictRBNode" && __x__.__args[0].__constructor === "DictRBRed" && true && true && true && true) { + let lK = __x__.__args[1]; + let lV = __x__.__args[2]; + let lLeft = __x__.__args[3]; + let lRight = __x__.__args[4]; + return _10f79_DictRBNode(_10f79_DictRBRed)(k)(v)(_10f79_DictRBNode(_10f79_DictRBBlack)(lK)(lV)(lLeft)(lRight))(_10f79_DictRBNode(_10f79_DictRBBlack)(rK)(rV)(rLeft)(rRight)); + } + else if (true) { + return _10f79_DictRBNode(color)(rK)(rV)(_10f79_DictRBNode(_10f79_DictRBRed)(k)(v)(left)(rLeft))(rRight); + } + else { + console.log('non exhaustive patterns for value: ', __x__.toString()); + console.trace(); + throw 'non exhaustive patterns!'; + } +})(left); + } + else if (true) { + return ((__x__) => { + if (__x__.__constructor === "DictRBNode" && __x__.__args[0].__constructor === "DictRBRed" && true && true && __x__.__args[3].__constructor === "DictRBNode" && __x__.__args[3].__args[0].__constructor === "DictRBRed" && true && true && true && true && true) { + let lK = __x__.__args[1]; + let lV = __x__.__args[2]; + let llK = __x__.__args[3].__args[1]; + let llV = __x__.__args[3].__args[2]; + let llLeft = __x__.__args[3].__args[3]; + let llRight = __x__.__args[3].__args[4]; + let lRight = __x__.__args[4]; + return _10f79_DictRBNode(_10f79_DictRBRed)(lK)(lV)(_10f79_DictRBNode(_10f79_DictRBBlack)(llK)(llV)(llLeft)(llRight))(_10f79_DictRBNode(_10f79_DictRBBlack)(k)(v)(lRight)(right)); + } + else if (true) { + return _10f79_DictRBNode(color)(k)(v)(left)(right); + } + else { + console.log('non exhaustive patterns for value: ', __x__.toString()); + console.trace(); + throw 'non exhaustive patterns!'; + } +})(left); + } + else { + console.log('non exhaustive patterns for value: ', __x__.toString()); + console.trace(); + throw 'non exhaustive patterns!'; + } +})(right)); +let _10f79_insertHelp__29 = (key => value => dict => ((__x__) => { + if (__x__.__constructor === "DictRBEmpty") { + return _10f79_DictRBNode(_10f79_DictRBRed)(key)(value)(_10f79_DictRBEmpty)(_10f79_DictRBEmpty); + } + else if (__x__.__constructor === "DictRBNode" && true && true && true && true && true) { + let nColor = __x__.__args[0]; + let nKey = __x__.__args[1]; + let nValue = __x__.__args[2]; + let nLeft = __x__.__args[3]; + let nRight = __x__.__args[4]; + return ((__x__) => { + if (__x__.__constructor === "LT") { + return _10f79_balanceDict__30(nColor)(nKey)(nValue)(_10f79_insertHelp__29(key)(value)(nLeft))(nRight); + } + else if (__x__.__constructor === "EQ") { + return _10f79_DictRBNode(nColor)(nKey)(value)(nLeft)(nRight); + } + else if (__x__.__constructor === "GT") { + return _10f79_balanceDict__30(nColor)(nKey)(nValue)(nLeft)(_10f79_insertHelp__29(key)(value)(nRight)); + } + else { + console.log('non exhaustive patterns for value: ', __x__.toString()); + console.trace(); + throw 'non exhaustive patterns!'; + } +})(_10f79_compare__22(key)(nKey)); + } + else { + console.log('non exhaustive patterns for value: ', __x__.toString()); + console.trace(); + throw 'non exhaustive patterns!'; + } +})(dict)); +export let _10f79_dictInsert__28 = (key => value => dict => ((__x__) => { + if (__x__.__constructor === "DictRBNode" && __x__.__args[0].__constructor === "DictRBRed" && true && true && true && true) { + let k = __x__.__args[1]; + let v = __x__.__args[2]; + let left = __x__.__args[3]; + let right = __x__.__args[4]; + return _10f79_DictRBNode(_10f79_DictRBBlack)(k)(v)(left)(right); + } + else if (true) { + let or = __x__; + return or; + } + else { + console.log('non exhaustive patterns for value: ', __x__.toString()); + console.trace(); + throw 'non exhaustive patterns!'; + } +})(_10f79_insertHelp__29(key)(value)(dict))); +export let _10f79_dictFromList__70 = (items => _10f79_reduceLeft__71((dict => item => ((__x__) => { + if (__x__.length === 2 && true && true) { + let [k,v] = __x__; + return _10f79_dictInsert__28(k)(v)(dict); + } + else { + console.log('non exhaustive patterns for value: ', __x__.toString()); + console.trace(); + throw 'non exhaustive patterns!'; + } +})(item)))(_10f79_DictRBEmpty)(items)); +export let _c8121_DEFAULT_COMMAND_OPTIONS__69 = ({ cwd: `./`, env: _10f79_dictFromList__70((null)) }); +export let _b6c60_buildBundle__80 = (ioUtils => __P__14 => _1e6e4_map__81((__R__ => __R__.stdout))(_1e6e4_mapRej__72((__R__ => __R__.stderr))((__$PH7__ => ioUtils.exec(`madlib`)(__$PH7__)(_c8121_DEFAULT_COMMAND_OPTIONS__69))((c => ({ v: `compile`, n: { v: `-i`, n: { v: c.madlib.input, n: { v: `--target`, n: { v: `browser`, n: { v: `--bundle`, n: { v: `-o`, n: { v: c.madlib.output, n: null } } } } } } } }))(__P__14))))); +export let _b6c60_buildSass__82 = (ioUtils => __P__15 => _1e6e4_map__81((__R__ => __R__.stdout))(_1e6e4_mapRej__72((__R__ => __R__.stderr))((c => ioUtils.exec(c.sassExecutablePath)(({ v: c.styles.input, n: { v: c.styles.output, n: null } }))(_c8121_DEFAULT_COMMAND_OPTIONS__69))(__P__15)))); +export let _b6c60_copyHtml__84 = (ioUtils => __P__16 => _1e6e4_map__81((__R__ => __R__.stdout))(_1e6e4_mapRej__72((__R__ => __R__.stderr))((c => ioUtils.exec(`cp`)(({ v: c.html.input, n: { v: c.html.output, n: null } }))(_c8121_DEFAULT_COMMAND_OPTIONS__69))(__P__16)))); +export let _b6c60_buildDocumentation__79 = (ioUtils => config => (__P__17 => _1e6e4_map__85((outputPath => `Documentation built and available in the folder '` + outputPath + `'`))(_1e6e4_chain__83((_ => _1e6e4_of__37()(ioUtils.getCurrentWorkingDirectory() + `/.docs`)))(_1e6e4_chain__83((_ => _b6c60_copyHtml__84(ioUtils)(config)))(_1e6e4_chain__83((_ => _b6c60_buildSass__82(ioUtils)(config)))(_b6c60_buildBundle__80(ioUtils)(__P__17))))))(config)); +export let _b6c60_generateJson__68 = (ioUtils => config => (__P__12 => _1e6e4_map__78(_3d769_always__77(`Documentation built and saved in '` + config.documentationDotJson.output + `'`))(_1e6e4_chain__76((__P__13 => _1e6e4_mapRej__75(_3d769_always__74(`documentation.json file could not be saved to ` + config.documentationDotJson.output))(ioUtils.writeFile(config.documentationDotJson.output)((__R__ => __R__.stdout)(__P__13)))))(_1e6e4_mapRej__73((err => `An error occured while generating the docs, here is the error from madlib:\n` + err))(_1e6e4_mapRej__72((__R__ => __R__.stderr))((__$PH6__ => ioUtils.exec(`madlib`)(__$PH6__)(_c8121_DEFAULT_COMMAND_OPTIONS__69))((c => ({ v: `doc`, n: { v: `-i`, n: { v: c.documentationDotJson.input, n: null } } }))(__P__12)))))))(config)); +export let _31104_insert__27 = _10f79_dictInsert__28; +export let _31104_merge__26 = (a => b => _31104_reduceLeft__31(_31104_insert__27)(a)(b)); +export let _10f79_balanceDict__23 = (color => k => v => left => right => ((__x__) => { + if (__x__.__constructor === "DictRBNode" && __x__.__args[0].__constructor === "DictRBRed" && true && true && true && true) { + let rK = __x__.__args[1]; + let rV = __x__.__args[2]; + let rLeft = __x__.__args[3]; + let rRight = __x__.__args[4]; + return ((__x__) => { + if (__x__.__constructor === "DictRBNode" && __x__.__args[0].__constructor === "DictRBRed" && true && true && true && true) { + let lK = __x__.__args[1]; + let lV = __x__.__args[2]; + let lLeft = __x__.__args[3]; + let lRight = __x__.__args[4]; + return _10f79_DictRBNode(_10f79_DictRBRed)(k)(v)(_10f79_DictRBNode(_10f79_DictRBBlack)(lK)(lV)(lLeft)(lRight))(_10f79_DictRBNode(_10f79_DictRBBlack)(rK)(rV)(rLeft)(rRight)); + } + else if (true) { + return _10f79_DictRBNode(color)(rK)(rV)(_10f79_DictRBNode(_10f79_DictRBRed)(k)(v)(left)(rLeft))(rRight); + } + else { + console.log('non exhaustive patterns for value: ', __x__.toString()); + console.trace(); + throw 'non exhaustive patterns!'; + } +})(left); + } + else if (true) { + return ((__x__) => { + if (__x__.__constructor === "DictRBNode" && __x__.__args[0].__constructor === "DictRBRed" && true && true && __x__.__args[3].__constructor === "DictRBNode" && __x__.__args[3].__args[0].__constructor === "DictRBRed" && true && true && true && true && true) { + let lK = __x__.__args[1]; + let lV = __x__.__args[2]; + let llK = __x__.__args[3].__args[1]; + let llV = __x__.__args[3].__args[2]; + let llLeft = __x__.__args[3].__args[3]; + let llRight = __x__.__args[3].__args[4]; + let lRight = __x__.__args[4]; + return _10f79_DictRBNode(_10f79_DictRBRed)(lK)(lV)(_10f79_DictRBNode(_10f79_DictRBBlack)(llK)(llV)(llLeft)(llRight))(_10f79_DictRBNode(_10f79_DictRBBlack)(k)(v)(lRight)(right)); + } + else if (true) { + return _10f79_DictRBNode(color)(k)(v)(left)(right); + } + else { + console.log('non exhaustive patterns for value: ', __x__.toString()); + console.trace(); + throw 'non exhaustive patterns!'; + } +})(left); + } + else { + console.log('non exhaustive patterns for value: ', __x__.toString()); + console.trace(); + throw 'non exhaustive patterns!'; + } +})(right)); +let _10f79_insertHelp__21 = (key => value => dict => ((__x__) => { + if (__x__.__constructor === "DictRBEmpty") { + return _10f79_DictRBNode(_10f79_DictRBRed)(key)(value)(_10f79_DictRBEmpty)(_10f79_DictRBEmpty); + } + else if (__x__.__constructor === "DictRBNode" && true && true && true && true && true) { + let nColor = __x__.__args[0]; + let nKey = __x__.__args[1]; + let nValue = __x__.__args[2]; + let nLeft = __x__.__args[3]; + let nRight = __x__.__args[4]; + return ((__x__) => { + if (__x__.__constructor === "LT") { + return _10f79_balanceDict__23(nColor)(nKey)(nValue)(_10f79_insertHelp__21(key)(value)(nLeft))(nRight); + } + else if (__x__.__constructor === "EQ") { + return _10f79_DictRBNode(nColor)(nKey)(value)(nLeft)(nRight); + } + else if (__x__.__constructor === "GT") { + return _10f79_balanceDict__23(nColor)(nKey)(nValue)(nLeft)(_10f79_insertHelp__21(key)(value)(nRight)); + } + else { + console.log('non exhaustive patterns for value: ', __x__.toString()); + console.trace(); + throw 'non exhaustive patterns!'; + } +})(_10f79_compare__22(key)(nKey)); + } + else { + console.log('non exhaustive patterns for value: ', __x__.toString()); + console.trace(); + throw 'non exhaustive patterns!'; + } +})(dict)); +export let _10f79_dictInsert__20 = (key => value => dict => ((__x__) => { + if (__x__.__constructor === "DictRBNode" && __x__.__args[0].__constructor === "DictRBRed" && true && true && true && true) { + let k = __x__.__args[1]; + let v = __x__.__args[2]; + let left = __x__.__args[3]; + let right = __x__.__args[4]; + return _10f79_DictRBNode(_10f79_DictRBBlack)(k)(v)(left)(right); + } + else if (true) { + let or = __x__; + return or; + } + else { + console.log('non exhaustive patterns for value: ', __x__.toString()); + console.trace(); + throw 'non exhaustive patterns!'; + } +})(_10f79_insertHelp__21(key)(value)(dict))); +export let _10f79_dictFromList__19 = (items => _10f79_reduceLeft__24((dict => item => ((__x__) => { + if (__x__.length === 2 && true && true) { + let [k,v] = __x__; + return _10f79_dictInsert__20(k)(v)(dict); + } + else { + console.log('non exhaustive patterns for value: ', __x__.toString()); + console.trace(); + throw 'non exhaustive patterns!'; + } +})(item)))(_10f79_DictRBEmpty)(items)); +export let _31104_fromList__18 = _10f79_dictFromList__19; +export let _c8121_Env__17 = _c8121_envFFI__25(_31104_fromList__18); + import { spawn as prelude_spawn } from "child_process" ; +export let _c8121_exec__16 = (command => args => options => _c8121__exec__35(command)(args)(({ cwd: options.cwd, env: _31104_toList__32(_31104_merge__26(_c8121_Env__17)(options.env)) }))); +export let _10f79_assoc__11 = (_ => _10f79_concatString__12); +export let _10f79_mappend__10 = (_ => _10f79_assoc__11()); +export let _051c8_split__49 = (separator => str => { + const items = str.split(separator) + + if (items.length === 0) { + return null + } + + let current = {} + let output = current + items.forEach((item) => { + current = current.n = {} + current.v = item + }) + current.n = null + + return output.n +} ); +export let _051c8_join__8 = (a => xs => (__P__1 => _1dd2b_reduce__13(_10f79_mappend__10())(``)(_1dd2b_intersperse__9(a)(__P__1)))(xs)); +export let _4cddf_defaultIOUtils__1 = ({ args: _c8121_Argv__2, writeFile: _c58c5_write__3, getCurrentWorkingDirectory: _c8121_getCurrentWorkingDirectory__4, getExecutablePath: _c8121_getExecutablePath__5, exec: (cmd => args => opts => { + _9bab1_putLine__15(`Running: ` + cmd + ` ` + _051c8_join__8(` `)(args) + `...`); + return _c8121_exec__16(cmd)(args)(opts); +}) }); +let _92daf_run__67 = (config => (__P__1 => _4be73_andDo__86(_b6c60_buildDocumentation__79(_4cddf_defaultIOUtils__1)(config))(_b6c60_generateJson__68(_4cddf_defaultIOUtils__1)(__P__1)))(config)); +let _b6c60_parentPath__48 = (levelsUp => path => (__P__1 => _051c8_join__8(`/`)(_1dd2b_dropLast__50(levelsUp)(_051c8_split__49(`/`)(__P__1))))(path)); +export let _b6c60_madDocRootPath__47 = (ioUtils => { + let exePath +exePath = ioUtils.getExecutablePath(); + return (__P__4 => (__W__5 => ((__x__) => { + if (__x__.__constructor === "Just" && __x__.__args[0] === "madlib_modules") { + return _b6c60_parentPath__48(3)(exePath) + `/` + _b6c60_MADDOC_PACKAGE_FOLDER__54; + } + else if (true) { + return _b6c60_parentPath__48(3)(exePath) + `/` + _b6c60_MADLIB_MODULES_FOLDER__55 + `/` + _b6c60_MADDOC_PACKAGE_FOLDER__54; + } + else { + console.log('non exhaustive patterns for value: ', __x__.toString()); + console.trace(); + throw 'non exhaustive patterns!'; + } +})(__W__5))(_1dd2b_last__53(_051c8_split__49(`/`)(_b6c60_parentPath__48(3)(__P__4)))))(exePath); +}); +export let _b6c60_madDocSrcPath__46 = (ioUtils => (__P__7 => (__$PH1__ => _10f79_mappend__10()(__$PH1__)(`/src`))(_b6c60_madDocRootPath__47(__P__7)))(ioUtils)); +export let _b6c60_documentationTargetPath__62 = (ioUtils => (__P__8 => (__$PH2__ => _10f79_mappend__10()(__$PH2__)(`/documentation.json`))(_b6c60_madDocSrcPath__46(__P__8)))(ioUtils)); +export let _b6c60_htmlSourcePath__59 = (ioUtils => (__P__11 => (__$PH5__ => _10f79_mappend__10()(__$PH5__)(`/index.html`))(_b6c60_madDocSrcPath__46(__P__11)))(ioUtils)); +export let _b6c60_madDocMainPath__45 = (ioUtils => (__P__9 => (__$PH3__ => _10f79_mappend__10()(__$PH3__)(`/Main.mad`))(_b6c60_madDocSrcPath__46(__P__9)))(ioUtils)); +export let _b6c60_sassPath__57 = (ioUtils => (__P__10 => (__$PH4__ => _10f79_mappend__10()(__$PH4__)(`/styles/main.scss`))(_b6c60_madDocSrcPath__46(__P__10)))(ioUtils)); +export let _b6c60_sassExecutablePath__61 = (ioUtils => (__P__6 => (rootPath => _b6c60_parentPath__48(2)(rootPath) + `/node_modules/.bin/sass`)(_b6c60_madDocRootPath__47(__P__6)))(ioUtils)); +export let _b6c60_generateConfiguration__44 = (ioUtils => (() => { + return _1e6e4_chain__66((input => { + let generated +generated = ({ madlib: ({ input: _b6c60_madDocMainPath__45(ioUtils), output: _b6c60_JS_BUNDLE_PATH__56 }), styles: ({ input: _b6c60_sassPath__57(ioUtils), output: _b6c60_CSS_TARGET_PATH__58 }), html: ({ input: _b6c60_htmlSourcePath__59(ioUtils), output: _b6c60_HTML_TARGET_PATH__60 }), sassExecutablePath: _b6c60_sassExecutablePath__61(ioUtils), documentationDotJson: ({ input: input, output: _b6c60_documentationTargetPath__62(ioUtils) }) }); + return _1e6e4_of__63()(generated); +}))(_b6c60_pathToDocument__36(ioUtils)); + +})()); +let _92daf_main = (_ => { + _1e6e4_fulfill__43(_9bab1_log__41)((path => _9bab1_log__41(`Running documentation generation for the madlib modules in '` + path + `'`)))(_b6c60_pathToDocument__36(_4cddf_defaultIOUtils__1)); + _1e6e4_fulfill__43((e => { + _9bab1_trace__88(`err`)(e); + return ({ __constructor: "Unit", __args: [] }); +}))((x => { + _9bab1_trace__88(`good`)(x); + return ({ __constructor: "Unit", __args: [] }); +}))(_1e6e4_chain__87(_92daf_run__67)(_b6c60_generateConfiguration__44(_4cddf_defaultIOUtils__1))); + return ({ __constructor: "Unit", __args: [] }); +}); +export default { _c8121_getCurrentWorkingDirectory__4, _c8121_Argv__2, _c58c5_write__3, _9bab1_putLine__15, _3d769_always__77, _3d769_always__74, _31104_reduceLeft__31, _2e42b_fromMaybe__7, _1e6e4_map__85, _1e6e4_map__81, _1e6e4_map__78, _1e6e4_mapRej__75, _1e6e4_mapRej__73, _1e6e4_mapRej__72, _1e6e4_good__65, _1e6e4_pure__64, _1e6e4_of__63, _1e6e4_good__39, _1e6e4_pure__38, _1e6e4_of__37, _1e6e4_fulfill__43, _1e6e4_chain__87, _1e6e4_chain__83, _4be73_andDo__86, _1e6e4_chain__76, _1e6e4_chain__66, _1e6e4_bad__40, _1dd2b_nth__6, _b6c60_pathToDocument__36, _c8121_getExecutablePath__5, _1dd2b_length__52, _1dd2b_slice__51, _1dd2b_last__53, _1dd2b_intersperse__9, _1dd2b_dropLast__50, _10f79_show__42, _9bab1_log__41, _9bab1_trace__88, _10f79_reduceLeft__71, _10f79_reduceLeft__24, _10f79_reduceLeft__14, _1dd2b_reduce__13, _10f79_dictReduceRight__34, _10f79_dictToList__33, _31104_toList__32, _10f79_compare__22, _10f79_balanceDict__30, _10f79_dictInsert__28, _10f79_dictFromList__70, _c8121_DEFAULT_COMMAND_OPTIONS__69, _b6c60_buildBundle__80, _b6c60_buildSass__82, _b6c60_copyHtml__84, _b6c60_buildDocumentation__79, _b6c60_generateJson__68, _31104_insert__27, _31104_merge__26, _10f79_balanceDict__23, _10f79_dictInsert__20, _10f79_dictFromList__19, _31104_fromList__18, _c8121_Env__17, _c8121_exec__16, _10f79_assoc__11, _10f79_mappend__10, _051c8_split__49, _051c8_join__8, _4cddf_defaultIOUtils__1, _b6c60_madDocRootPath__47, _b6c60_madDocSrcPath__46, _b6c60_documentationTargetPath__62, _b6c60_htmlSourcePath__59, _b6c60_madDocMainPath__45, _b6c60_sassPath__57, _b6c60_sassExecutablePath__61, _b6c60_generateConfiguration__44, _10f79_DictRBBlack, _10f79_DictRBRed, _10f79_DictRBEmpty, _10f79_DictRBNode, _10f79_LT, _10f79_EQ, _10f79_GT, _3d769_Loop, _3d769_Done, _2e42b_Just, _2e42b_Nothing, _1e6e4_Wish, _77488_AddressAlreadyInUse, _77488_ArgumentListToLong, _77488_PermissionDenied, _77488_UnknownError, _42e19_Left, _42e19_Right, _a32d2_Loc, _a32d2_Parser, _a32d2_Error, _a32d2_Config, _1fda7_EmptyDoc, _1fda7_CharDoc, _1fda7_TextDoc, _1fda7_LineDoc, _1fda7_CatDoc, _1fda7_NestDoc, _1fda7_UnionDoc, _1fda7_ColumnDoc, _1fda7_NestingDoc, _1fda7_SEmpty, _1fda7_SChar, _1fda7_SText, _1fda7_SLine }; +const __makeArgs = () => { + let list = {} + let start = list + Object.keys(process.argv.slice(0)).forEach((key) => { + list = list.n = { v: process.argv[key], n: null } + }, {}) + return { + n: start.n.n.n, + v: start.n.n.v + } +} +_92daf_main(__makeArgs()) diff --git a/madlib_modules/MadDocCli/src/Main.spec.mad b/madlib_modules/MadDocCli/src/Main.spec.mad new file mode 100644 index 0000000..5acbdfe --- /dev/null +++ b/madlib_modules/MadDocCli/src/Main.spec.mad @@ -0,0 +1,38 @@ +#iftarget js +import type { AssertionError } from "Test" +import type { Wish } from "Wish" + +import { exists } from "File" +import { always } from "Function" +import IO from "IO" +import { andDo } from "Monad" +import Process from "Process" +import { AssertionError, test } from "Test" +import { mapRej } from "Wish" + + + +assertFileExists :: String -> Wish AssertionError {} +assertFileExists = (filePath) => pipe( + exists, + mapRej((_) => AssertionError("OK", `${filePath} not found`)), + map(always({})), +)(filePath) + +test( + "MadDoc cli should work", + () => pipe( + mapRej( + (raw) => do { + IO.pTrace("...", raw.stderr) + return AssertionError("OK", "maddoc exited with non 0 code") + }, + ), + andDo(assertFileExists("./madlib_modules/MadDoc/src/documentation.json")), + andDo(assertFileExists(".docs/bundle.js")), + andDo(assertFileExists(".docs/index.html")), + andDo(assertFileExists(".docs/styles/main.css")), + )(Process.exec("madlib", ["run", "./src/Main.mad", "src"], Process.DEFAULT_COMMAND_OPTIONS)), +) + +#endif diff --git a/madlib_modules/MadDocCli/version.lock b/madlib_modules/MadDocCli/version.lock new file mode 100644 index 0000000..f4a454f --- /dev/null +++ b/madlib_modules/MadDocCli/version.lock @@ -0,0 +1,18 @@ +{ + "buildHash": "da7240d624ea40b9511a041c3b67e119", + "jsApi": { + "apiInstances": [], + "apiAliases": {}, + "apiInterfaces": {}, + "apiNames": {}, + "apiTypes": {} + }, + "llvmApi": { + "apiInstances": [], + "apiAliases": {}, + "apiInterfaces": {}, + "apiNames": {}, + "apiTypes": {} + }, + "versionHash": "f723810a82dbb962df96794ccedc3cc3" +} diff --git a/madlib_modules/MadMarkdownParser/.github/workflows/release.yml b/madlib_modules/MadMarkdownParser/.github/workflows/release.yml new file mode 100644 index 0000000..85856ae --- /dev/null +++ b/madlib_modules/MadMarkdownParser/.github/workflows/release.yml @@ -0,0 +1,67 @@ +name: 'Publish new version' + +on: + workflow_dispatch: + inputs: + version: + description: 'Version to publish ( ex: v0.0.1 )' + required: true + +env: + node-version: 20.x + + +jobs: + check-version: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - run: | + MADLIB_PKG_VERSION="v$(cat madlib.json | grep version | cut -d":" -f2 | cut -d"\"" -f2)" + TAG_NAME=${{ github.event.inputs.version }} + if [ "$TAG_NAME" = "$MADLIB_PKG_VERSION" ]; then + echo "Versions match" + else + echo "Versions in madlib.json is not ${TAG_NAME}" + exit 1 + fi + + release: + needs: check-version + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + + - name: Use Node.js ${{ env.node-version }} + uses: actions/setup-node@v4 + with: + node-version: ${{ env.node-version }} + + - name: "Changelog: generate changelog" + id: changelog + uses: TriPSs/conventional-changelog-action@v5.2.1 + with: + presets: "conventionalcommits" + github-token: ${{ secrets.GITHUB_TOKEN }} + skip-on-empty: false + output-file: false + tag-prefix: 'v' + skip-commit: true + skip-version-file: true + + - name: "Delete created tag from changelog" + run: | + git push --delete origin v${{ steps.changelog.outputs.version }} + git tag -d v${{ steps.changelog.outputs.version }} + + - name: "Create Release" + id: create_release + uses: actions/create-release@v1.1.4 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + with: + tag_name: ${{ github.event.inputs.version }} + release_name: Release ${{ github.event.inputs.version }} + body: ${{ steps.changelog.outputs.clean_changelog }} + draft: false + prerelease: false diff --git a/madlib_modules/MadMarkdownParser/.gitignore b/madlib_modules/MadMarkdownParser/.gitignore new file mode 100644 index 0000000..14bd743 --- /dev/null +++ b/madlib_modules/MadMarkdownParser/.gitignore @@ -0,0 +1,7 @@ +build +.run +madlib_modules +node_modules +.module_cache +src/Example.mad +.DS_Store diff --git a/madlib_modules/MadMarkdownParser/README.md b/madlib_modules/MadMarkdownParser/README.md new file mode 100644 index 0000000..9bd0e25 --- /dev/null +++ b/madlib_modules/MadMarkdownParser/README.md @@ -0,0 +1,61 @@ +# madmarkdown-parser +Parser library for markdown format for madlib + +## How to use it +Add it to the dependencies of your `madlib.json` file: +```json +{ + "dependencies": { + "MarkdownParser": "https://github.com/madlib-lang/madmarkdown-parser/archive/refs/heads/master.zip" + } +} +``` +Run `madlib install` + +```madlib +import IO from "IO" +import { parseMarkdown } from "MarkdownParser" + +yourMarkdown = ` +# Hello World +` + +where(parseMarkdown(yourMarkdown)) + is Right ast: IO.inspect(ast) + is Left err : IO.log(err) + +``` + +## Run the example +```madlib +madlib install +madlib run src/Example.mad +``` + +## Markdown syntax currently supported + +### Headings +Only the hash syntax is currently supported and stops after a line return: +```markdown +# Heading (h1) +## Heading (h2) +### Heading (h3) +#### Heading (h4) +##### Heading (h5) +###### Heading (h6) +``` + +### Paragraphs +Paragraphs are any text that is not part of another block type and is ended by a double line return: +```markdown +This is a paragraph +And here was added a line return + +This is now a new paragraph +``` + +### Blockquotes +Blockquotes start with a right chevron sign (`>`) and end after a double line return: +```markdown +> This is a blockquote +``` diff --git a/madlib_modules/MadMarkdownParser/madlib.json b/madlib_modules/MadMarkdownParser/madlib.json new file mode 100644 index 0000000..3cc08ca --- /dev/null +++ b/madlib_modules/MadMarkdownParser/madlib.json @@ -0,0 +1,10 @@ +{ + "name": "MadMarkdownParser", + "version": "0.0.5", + "madlibVersion": "0.23.14", + "main": "src/Main.mad", + "importAliases": { + ".": "src" + }, + "dependencies": [] +} diff --git a/madlib_modules/MadMarkdownParser/src/Main.mad b/madlib_modules/MadMarkdownParser/src/Main.mad new file mode 100644 index 0000000..79c3219 --- /dev/null +++ b/madlib_modules/MadMarkdownParser/src/Main.mad @@ -0,0 +1,317 @@ +import type { Either } from "Either" + +import { apL } from "Applicative" +import { mapLeft } from "Either" +import { always, equals, identity } from "Function" +import { mapL } from "Functor" +import { dropWhile, mapMaybe } from "List" +import { Just, Nothing } from "Maybe" +import P from "Parse" +import String from "String" + + + +export type ContentPart + = Text(String) + | Bold(String) + | Italic(String) + | InlineCode(String) + | Link(String, String) + | Image(String, String) + | LineReturn + +export alias Content = List ContentPart + +export type Block + = H1(Content) + | H2(Content) + | H3(Content) + | H4(Content) + | H5(Content) + | H6(Content) + | Paragraph(Content) + | Blockquote(Content) + | Code(String, String) + | UnorderedList(List Content) + +export alias Markdown = List Block + +between :: P.Parser a -> P.Parser b -> P.Parser c -> P.Parser b +between = (start, mid, end) => pipe( + mapL(identity), + ap($, mid), + apL($, end), +)(start) + +// https://stackoverflow.com/questions/1547899/which-characters-make-a-url-invalid +linkCharacter :: P.Parser Char +linkCharacter = P.choice([ + P.letter, + P.digit, + P.char('!'), + P.char('#'), + P.char('$'), + P.char('%'), + P.char('&'), + P.char('\''), + P.char('*'), + P.char('+'), + P.char(','), + P.char('-'), + P.char('.'), + P.char('/'), + P.char(':'), + P.char(';'), + P.char('='), + P.char('?'), + P.char('@'), + P.char('_'), + P.char('~'), +]) + + +bold :: P.Parser ContentPart +bold = pipe( + mapL(Bold), + ap( + $, + pipe( + (a) => P.someTill(a, P.lookAhead(P.string("**"))), + map(String.fromList), + )(P.notChar('\n')), + ), + apL($, P.string("**")), +)(P.string("**")) + +italic :: P.Parser ContentPart +italic = do { + _ <- P.char('*') + firstChar <- P.notChar(' ') + nextChars <- P.many(P.notOneOf(['*', '\n'])) + _ <- P.char('*') + + return pipe( + String.fromList, + String.prependChar(firstChar), + Italic, + of, + )([firstChar, ...nextChars]) +} + +inlineCode :: P.Parser ContentPart +inlineCode = pipe( + mapL(InlineCode), + ap( + $, + pipe( + P.many, + map(String.fromList), + )(P.notOneOf(['`', '\n'])), + ), + apL($, P.char('`')), +)(P.char('`')) + +link :: P.Parser ContentPart +link = pipe( + map(Link), + ap( + $, + between( + P.char('('), + pipe( + P.many, + map(String.fromList), + )(linkCharacter), + P.char(')'), + ), + ), +)( + between( + P.char('['), + pipe( + P.many, + map(String.fromList), + )(P.notOneOf([']', '\n'])), + P.char(']'), + ), +) + +image :: P.Parser ContentPart +image = pipe( + mapL(Image), + ap( + $, + between( + P.char('['), + pipe( + P.many, + map(String.fromList), + )(P.notOneOf([']', '\n'])), + P.char(']'), + ), + ), + ap( + $, + between( + P.char('('), + pipe( + P.many, + map(String.fromList), + )(linkCharacter), + P.char(')'), + ), + ), +)(P.char('!')) + +textTerminals :: P.Parser String +textTerminals = P.choice([ + map(always(""), bold), + map(always(""), italic), + map(always(""), inlineCode), + map(always(""), image), + map(always(""), link), + map(always(""), P.eof), + P.string("\n"), +]) + +text :: P.Parser ContentPart +text = pipe( + P.someTill($, P.lookAhead(textTerminals)), + map( + pipe( + String.fromList, + Text, + ), + ), +)(P.notChar('\n')) + +lineReturn :: P.Parser ContentPart +lineReturn = map(always(LineReturn), P.char('\n')) + +content :: P.Parser Content +content = pipe( + P.choice, + P.many, +)([bold, italic, inlineCode, image, link, text]) + +lineReturnExceptBefore :: P.Parser a -> P.Parser ContentPart +lineReturnExceptBefore = (before) => pipe( + mapL(identity), + ap($, alt(map(always(Just({})), before), pure(Nothing))), + P.lookAhead, + chain( + where { + Just(_) => + aempty + + Nothing => + lineReturn + }, + ), +)(lineReturn) + +contentWithLineReturn :: P.Parser a -> P.Parser Content +contentWithLineReturn = (delimiter) => pipe( + P.choice, + P.some, + map(dropWhile(equals(LineReturn))), +)([bold, italic, inlineCode, image, link, text, lineReturnExceptBefore(delimiter)]) + +heading :: (Content -> Block) -> String -> P.Parser Block +heading = (constructor) => pipe( + P.symbol, + mapL(constructor), + ap($, content), + apL($, singleReturnTerminal), +) + +singleReturnTerminal :: P.Parser String +singleReturnTerminal = alt(P.string("\n"), map(always(""), P.eof)) + +doubleReturnTerminal :: P.Parser String +doubleReturnTerminal = P.choice([ + P.string("\n\n"), + map(always(""), P.eof), + pipe( + ap(pure((_, _) => "")), + ap($, P.eof), + )(P.char('\n')), +]) + +code :: P.Parser Block +code = pipe( + mapL((lang, c) => Code(lang, c)), + ap($, alt(map(String.fromList, P.letters), pure(""))), + apL($, P.char('\n')), + ap($, map(String.fromList, P.manyTill(P.anyChar, P.lookAhead(P.string("\n```"))))), + apL($, P.choice([map((_) => "", apL(P.string("\n```"), P.eof)), P.string("\n```\n")])), +)(P.string("```")) + +blockquote :: P.Parser Block +blockquote = pipe( + mapL(Blockquote), + ap($, contentWithLineReturn(P.choice([P.string("\n"), P.string("```"), P.string(">")]))), + apL( + $, + P.choice([doubleReturnTerminal, P.lookAhead(P.string("\n```")), P.lookAhead(P.string("\n>"))]), + ), +)(alt(P.symbol(">"), P.string(">"))) + + +listItemStart = map( + always(""), + apL(P.many(P.char(' ')), apL(P.oneOf(['*', '-', '+']), P.some(P.char(' ')))), +) + +unorderedListItem :: P.Parser Content +unorderedListItem = pipe( + chain(always(apL(content, singleReturnTerminal))), +)(listItemStart) + +unorderedList :: P.Parser Block +unorderedList = pipe( + P.some, + map(UnorderedList), +)(unorderedListItem) + + +paragraph :: P.Parser Block +paragraph = pipe( + map(Paragraph), + apL( + $, + P.choice([ + doubleReturnTerminal, + P.lookAhead(P.string("\n```")), + P.lookAhead(P.string("\n>")), + P.lookAhead(apL(P.string("\n"), listItemStart)), + ]), + ), +)(contentWithLineReturn(P.choice([listItemStart, P.string("\n"), P.string("```"), P.string(">")]))) + +block :: P.Parser Block +block = P.choice([ + heading(H6, "######"), + heading(H5, "#####"), + heading(H4, "####"), + heading(H3, "###"), + heading(H2, "##"), + heading(H1, "#"), + unorderedList, + blockquote, + code, + paragraph, +]) + +markdownParser :: P.Parser Markdown +markdownParser = pipe( + P.choice, + P.many, + map(mapMaybe((x) => x)), +)([map(always(Nothing), P.spaces), map(Just, block)]) + +parseMarkdown :: String -> Either String Markdown +export parseMarkdown = pipe( + P.runParser(markdownParser), + mapLeft(always("Malformed markdown input")), +) diff --git a/madlib_modules/MadMarkdownParser/version.lock b/madlib_modules/MadMarkdownParser/version.lock new file mode 100644 index 0000000..4eefc7f --- /dev/null +++ b/madlib_modules/MadMarkdownParser/version.lock @@ -0,0 +1,72 @@ +{ + "buildHash": "ab8cca75a596bb1bcc10877846ce3dd2", + "jsApi": { + "apiInstances": [], + "apiAliases": { + "Markdown": "(List Block)", + "Content": "(List ContentPart)" + }, + "apiInterfaces": {}, + "apiNames": { + "parseMarkdown": "String -> Either String (List Block)" + }, + "apiTypes": { + "ContentPart": [ + "Text String", + "Bold String", + "Italic String", + "InlineCode String", + "Link String String", + "Image String String", + "LineReturn" + ], + "Block": [ + "H1 Content", + "H2 Content", + "H3 Content", + "H4 Content", + "H5 Content", + "H6 Content", + "Paragraph Content", + "Blockquote Content", + "Code String String", + "UnorderedList (List Content)" + ] + } + }, + "llvmApi": { + "apiInstances": [], + "apiAliases": { + "Markdown": "(List Block)", + "Content": "(List ContentPart)" + }, + "apiInterfaces": {}, + "apiNames": { + "parseMarkdown": "String -> Either String (List Block)" + }, + "apiTypes": { + "ContentPart": [ + "Text String", + "Bold String", + "Italic String", + "InlineCode String", + "Link String String", + "Image String String", + "LineReturn" + ], + "Block": [ + "H1 Content", + "H2 Content", + "H3 Content", + "H4 Content", + "H5 Content", + "H6 Content", + "Paragraph Content", + "Blockquote Content", + "Code String String", + "UnorderedList (List Content)" + ] + } + }, + "versionHash": "7417b617700b295682ee25ac611b0db6" +} diff --git a/madlib_modules/MadMarkdownRenderer/.github/workflows/release.yml b/madlib_modules/MadMarkdownRenderer/.github/workflows/release.yml new file mode 100644 index 0000000..c020285 --- /dev/null +++ b/madlib_modules/MadMarkdownRenderer/.github/workflows/release.yml @@ -0,0 +1,67 @@ +name: 'Publish new version' + +on: + workflow_dispatch: + inputs: + version: + description: 'Version to publish ( ex: v0.0.1 )' + required: true + +env: + node-version: 14.x + + +jobs: + check-version: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - run: | + MADLIB_PKG_VERSION="v$(cat madlib.json | grep version | cut -d":" -f2 | cut -d"\"" -f2)" + TAG_NAME=${{ github.event.inputs.version }} + if [ "$TAG_NAME" = "$MADLIB_PKG_VERSION" ]; then + echo "Versions match" + else + echo "Versions in madlib.json is not ${TAG_NAME}" + exit 1 + fi + + release: + needs: check-version + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + + - name: Use Node.js ${{ env.node-version }} + uses: actions/setup-node@v4 + with: + node-version: ${{ env.node-version }} + + - name: "Changelog: generate changelog" + id: changelog + uses: TriPSs/conventional-changelog-action@v5.2.1 + with: + presets: "conventionalcommits" + github-token: ${{ secrets.GITHUB_TOKEN }} + skip-on-empty: false + output-file: false + tag-prefix: 'v' + skip-commit: true + skip-version-file: true + + - name: "Delete created tag from changelog" + run: | + git push --delete origin v${{ steps.changelog.outputs.version }} + git tag -d v${{ steps.changelog.outputs.version }} + + - name: "Create Release" + id: create_release + uses: actions/create-release@v1.1.4 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + with: + tag_name: ${{ github.event.inputs.version }} + release_name: Release ${{ github.event.inputs.version }} + body: ${{ steps.changelog.outputs.clean_changelog }} + draft: false + prerelease: false diff --git a/madlib_modules/MadMarkdownRenderer/.gitignore b/madlib_modules/MadMarkdownRenderer/.gitignore new file mode 100644 index 0000000..808695e --- /dev/null +++ b/madlib_modules/MadMarkdownRenderer/.gitignore @@ -0,0 +1,5 @@ +node_modules +build +madlib_modules +.module_cache +.DS_Store diff --git a/madlib_modules/MadMarkdownRenderer/README.md b/madlib_modules/MadMarkdownRenderer/README.md new file mode 100644 index 0000000..f915c69 --- /dev/null +++ b/madlib_modules/MadMarkdownRenderer/README.md @@ -0,0 +1,27 @@ +# madmarkdown-renderer +Markdown renderer for [MadUI](https://github.com/madlib-lang/madui) + +## How to use it + +Add it to the dependencies of your `madlib.json` file: +```json +{ + "dependencies": { + "MarkdownRenderer": "https://github.com/madlib-lang/madmarkdown-renderer/archive/refs/heads/master.zip", + "MadUI": "https://github.com/madlib-lang/madui/archive/refs/heads/master.zip" + } +} +``` +Run `madlib install` + +```madlib +import { renderMarkdown } from "MarkdownRenderer" +import { render } from "MadUI" + +yourMarkdown = ` +# Hello World +` + +render((_) => renderMarkdown(yourMarkdown), {}, "app") + +``` diff --git a/madlib_modules/MadMarkdownRenderer/madlib.json b/madlib_modules/MadMarkdownRenderer/madlib.json new file mode 100644 index 0000000..d6a6f82 --- /dev/null +++ b/madlib_modules/MadMarkdownRenderer/madlib.json @@ -0,0 +1,21 @@ +{ + "name": "MadMarkdownRenderer", + "version": "2.0.4", + "madlibVersion": "0.23.14", + "main": "src/Main.mad", + "importAliases": { + ".": "src" + }, + "dependencies": [ + { + "minVersion": "7.0.2", + "url": "https://github.com/madlib-lang/madui/archive/refs/tags/v7.0.2.zip", + "description": "MadUI" + }, + { + "minVersion": "0.0.5", + "url": "https://github.com/madlib-lang/madmarkdown-parser/archive/refs/tags/v0.0.5.zip", + "description": "MadMarkdownParser" + } + ] +} diff --git a/madlib_modules/MadMarkdownRenderer/package-lock.json b/madlib_modules/MadMarkdownRenderer/package-lock.json new file mode 100644 index 0000000..4f3b111 --- /dev/null +++ b/madlib_modules/MadMarkdownRenderer/package-lock.json @@ -0,0 +1,5022 @@ +{ + "name": "madmarkdown-renderer", + "version": "0.0.1", + "lockfileVersion": 2, + "requires": true, + "packages": { + "": { + "name": "madmarkdown-renderer", + "version": "0.0.1", + "license": "ISC", + "dependencies": { + "madui": "file:madlib_modules/MadUI", + "sass": "^1.32.6" + }, + "devDependencies": { + "browser-sync": "^2.26.14", + "concurrently": "^5.3.0", + "copy-and-watch": "^0.1.5", + "watch": "^1.0.2" + } + }, + "madlib_modules/maddoc-cli": { + "extraneous": true, + "dependencies": { + "sass": "^1.32.8" + } + }, + "madlib_modules/MadUI": { + "name": "madui", + "version": "0.0.1", + "license": "ISC", + "dependencies": { + "snabbdom": "^3.0.1" + }, + "devDependencies": { + "@rollup/plugin-node-resolve": "^11.2.0", + "rollup": "^2.39.1" + } + }, + "node_modules/@rollup/plugin-node-resolve": { + "version": "11.2.1", + "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-11.2.1.tgz", + "integrity": "sha512-yc2n43jcqVyGE2sqV5/YCmocy9ArjVAP/BeXyTtADTBBX6V0e5UMqwO8CdQ0kzjb6zu5P1qMzsScCMRvE9OlVg==", + "dev": true, + "dependencies": { + "@rollup/pluginutils": "^3.1.0", + "@types/resolve": "1.17.1", + "builtin-modules": "^3.1.0", + "deepmerge": "^4.2.2", + "is-module": "^1.0.0", + "resolve": "^1.19.0" + }, + "engines": { + "node": ">= 10.0.0" + }, + "peerDependencies": { + "rollup": "^1.20.0||^2.0.0" + } + }, + "node_modules/@rollup/pluginutils": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-3.1.0.tgz", + "integrity": "sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg==", + "dev": true, + "dependencies": { + "@types/estree": "0.0.39", + "estree-walker": "^1.0.1", + "picomatch": "^2.2.2" + }, + "engines": { + "node": ">= 8.0.0" + }, + "peerDependencies": { + "rollup": "^1.20.0||^2.0.0" + } + }, + "node_modules/@types/estree": { + "version": "0.0.39", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.39.tgz", + "integrity": "sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==", + "dev": true + }, + "node_modules/@types/node": { + "version": "20.12.11", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.12.11.tgz", + "integrity": "sha512-vDg9PZ/zi+Nqp6boSOT7plNuthRugEKixDv5sFTIpkE89MmNtEArAShI4mxuX2+UrLEe9pxC1vm2cjm9YlWbJw==", + "dev": true, + "dependencies": { + "undici-types": "~5.26.4" + } + }, + "node_modules/@types/resolve": { + "version": "1.17.1", + "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-1.17.1.tgz", + "integrity": "sha512-yy7HuzQhj0dhGpD8RLXSZWEkLsV9ibvxvi6EiJ3bkqLAO1RGo0WbkWQiwpRlSFymTJRz0d3k5LM3kkx8ArDbLw==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/accepts": { + "version": "1.3.7", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", + "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==", + "dev": true, + "dependencies": { + "mime-types": "~2.1.24", + "negotiator": "0.6.2" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/after": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/after/-/after-0.8.2.tgz", + "integrity": "sha1-/ts5T58OAqqXaOcCvaI7UF+ufh8=", + "dev": true + }, + "node_modules/ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/anymatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", + "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/arraybuffer.slice": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/arraybuffer.slice/-/arraybuffer.slice-0.0.7.tgz", + "integrity": "sha512-wGUIVQXuehL5TCqQun8OW81jGzAWycqzFF8lFp+GOM5BXLYj3bKNsYC4daB7n6XjCqxQA/qgTJ+8ANR3acjrog==", + "dev": true + }, + "node_modules/async": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", + "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=", + "dev": true + }, + "node_modules/async-each-series": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/async-each-series/-/async-each-series-0.1.1.tgz", + "integrity": "sha1-dhfBkXQB/Yykooqtzj266Yr+tDI=", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/axios": { + "version": "0.21.1", + "resolved": "https://registry.npmjs.org/axios/-/axios-0.21.1.tgz", + "integrity": "sha512-dKQiRHxGD9PPRIUNIWvZhPTPpl1rf/OxTYKsqKUDjBwYylTvV7SjSHJb9ratfyzM6wCdLCOYLzs73qpg5c4iGA==", + "dev": true, + "dependencies": { + "follow-redirects": "^1.10.0" + } + }, + "node_modules/backo2": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/backo2/-/backo2-1.0.2.tgz", + "integrity": "sha1-MasayLEpNjRj41s+u2n038+6eUc=", + "dev": true + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true + }, + "node_modules/base64-arraybuffer": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-0.1.4.tgz", + "integrity": "sha1-mBjHngWbE1X5fgQooBfIOOkLqBI=", + "dev": true, + "engines": { + "node": ">= 0.6.0" + } + }, + "node_modules/base64id": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/base64id/-/base64id-2.0.0.tgz", + "integrity": "sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog==", + "dev": true, + "engines": { + "node": "^4.5.0 || >= 5.9" + } + }, + "node_modules/batch": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", + "integrity": "sha1-3DQxT05nkxgJP8dgJyUl+UvyXBY=", + "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==", + "engines": { + "node": ">=8" + } + }, + "node_modules/blob": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/blob/-/blob-0.0.5.tgz", + "integrity": "sha512-gaqbzQPqOoamawKg0LGVd7SzLgXS+JH61oWprSLH+P+abTczqJbhTR8CmJ2u9/bUYNmHTGJx/UEmn6doAvvuig==", + "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==", + "dependencies": { + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/browser-sync": { + "version": "2.26.14", + "resolved": "https://registry.npmjs.org/browser-sync/-/browser-sync-2.26.14.tgz", + "integrity": "sha512-3TtpsheGolJT6UFtM2CZWEcGJmI4ZEvoCKiKE2bvcDnPxRkhQT4nIGVtfiyPcoHKXGM0LwMOZmYJNWfiNfVXWA==", + "dev": true, + "dependencies": { + "browser-sync-client": "^2.26.14", + "browser-sync-ui": "^2.26.14", + "bs-recipes": "1.3.4", + "bs-snippet-injector": "^2.0.1", + "chokidar": "^3.5.1", + "connect": "3.6.6", + "connect-history-api-fallback": "^1", + "dev-ip": "^1.0.1", + "easy-extender": "^2.3.4", + "eazy-logger": "3.1.0", + "etag": "^1.8.1", + "fresh": "^0.5.2", + "fs-extra": "3.0.1", + "http-proxy": "^1.18.1", + "immutable": "^3", + "localtunnel": "^2.0.1", + "micromatch": "^4.0.2", + "opn": "5.3.0", + "portscanner": "2.1.1", + "qs": "6.2.3", + "raw-body": "^2.3.2", + "resp-modifier": "6.0.2", + "rx": "4.1.0", + "send": "0.16.2", + "serve-index": "1.9.1", + "serve-static": "1.13.2", + "server-destroy": "1.0.1", + "socket.io": "2.4.0", + "ua-parser-js": "^0.7.18", + "yargs": "^15.4.1" + }, + "bin": { + "browser-sync": "dist/bin.js" + }, + "engines": { + "node": ">= 8.0.0" + } + }, + "node_modules/browser-sync-client": { + "version": "2.26.14", + "resolved": "https://registry.npmjs.org/browser-sync-client/-/browser-sync-client-2.26.14.tgz", + "integrity": "sha512-be0m1MchmKv/26r/yyyolxXcBi052aYrmaQep5nm8YNMjFcEyzv0ZoOKn/c3WEXNlEB/KeXWaw70fAOJ+/F1zQ==", + "dev": true, + "dependencies": { + "etag": "1.8.1", + "fresh": "0.5.2", + "mitt": "^1.1.3", + "rxjs": "^5.5.6" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/browser-sync-ui": { + "version": "2.26.14", + "resolved": "https://registry.npmjs.org/browser-sync-ui/-/browser-sync-ui-2.26.14.tgz", + "integrity": "sha512-6oT1sboM4KVNnWCCJDMGbRIeTBw97toMFQ+srImvwQ6J5t9KMgizaIX8HcKLiemsUMSJkgGM9RVKIpq2UblgOA==", + "dev": true, + "dependencies": { + "async-each-series": "0.1.1", + "connect-history-api-fallback": "^1", + "immutable": "^3", + "server-destroy": "1.0.1", + "socket.io-client": "^2.4.0", + "stream-throttle": "^0.1.3" + } + }, + "node_modules/bs-recipes": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/bs-recipes/-/bs-recipes-1.3.4.tgz", + "integrity": "sha1-DS1NSKcYyMBEdp/cT4lZLci2lYU=", + "dev": true + }, + "node_modules/bs-snippet-injector": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/bs-snippet-injector/-/bs-snippet-injector-2.0.1.tgz", + "integrity": "sha1-YbU5PxH1JVntEgaTEANDtu2wTdU=", + "dev": true + }, + "node_modules/builtin-modules": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.3.0.tgz", + "integrity": "sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==", + "dev": true, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/bytes": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", + "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "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/chokidar": { + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.1.tgz", + "integrity": "sha512-9+s+Od+W0VJJzawDma/gvBNQqkTiqYTWLuZoyAsivsI4AaWTCzHG06/TMjsf1cYe9Cb97UCEhjz7HvnPk2p/tw==", + "dependencies": { + "anymatch": "~3.1.1", + "braces": "~3.0.2", + "glob-parent": "~5.1.0", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.5.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.1" + } + }, + "node_modules/cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "dev": true, + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, + "node_modules/cliui/node_modules/ansi-regex": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/cliui/node_modules/strip-ansi": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "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": "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/component-bind": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/component-bind/-/component-bind-1.0.0.tgz", + "integrity": "sha1-AMYIq33Nk4l8AAllGx06jh5zu9E=", + "dev": true + }, + "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/component-inherit": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/component-inherit/-/component-inherit-0.0.3.tgz", + "integrity": "sha1-ZF/ErfWLcrZJ1crmUTVhnbJv8UM=", + "dev": true + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "dev": true + }, + "node_modules/concurrently": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/concurrently/-/concurrently-5.3.0.tgz", + "integrity": "sha512-8MhqOB6PWlBfA2vJ8a0bSFKATOdWlHiQlk11IfmQBPaHVP8oP2gsh2MObE6UR3hqDHqvaIvLTyceNW6obVuFHQ==", + "dev": true, + "dependencies": { + "chalk": "^2.4.2", + "date-fns": "^2.0.1", + "lodash": "^4.17.15", + "read-pkg": "^4.0.1", + "rxjs": "^6.5.2", + "spawn-command": "^0.0.2-1", + "supports-color": "^6.1.0", + "tree-kill": "^1.2.2", + "yargs": "^13.3.0" + }, + "bin": { + "concurrently": "bin/concurrently.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/concurrently/node_modules/ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/concurrently/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/concurrently/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/concurrently/node_modules/chalk/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/concurrently/node_modules/cliui": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", + "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", + "dev": true, + "dependencies": { + "string-width": "^3.1.0", + "strip-ansi": "^5.2.0", + "wrap-ansi": "^5.1.0" + } + }, + "node_modules/concurrently/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/concurrently/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, + "node_modules/concurrently/node_modules/emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", + "dev": true + }, + "node_modules/concurrently/node_modules/find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "dev": true, + "dependencies": { + "locate-path": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/concurrently/node_modules/is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/concurrently/node_modules/locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "dev": true, + "dependencies": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/concurrently/node_modules/p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "dev": true, + "dependencies": { + "p-limit": "^2.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/concurrently/node_modules/path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/concurrently/node_modules/rxjs": { + "version": "6.6.7", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", + "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", + "dev": true, + "dependencies": { + "tslib": "^1.9.0" + }, + "engines": { + "npm": ">=2.0.0" + } + }, + "node_modules/concurrently/node_modules/string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "dev": true, + "dependencies": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/concurrently/node_modules/strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "dependencies": { + "ansi-regex": "^4.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/concurrently/node_modules/supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/concurrently/node_modules/wrap-ansi": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", + "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.0", + "string-width": "^3.0.0", + "strip-ansi": "^5.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/concurrently/node_modules/y18n": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", + "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", + "dev": true + }, + "node_modules/concurrently/node_modules/yargs": { + "version": "13.3.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz", + "integrity": "sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==", + "dev": true, + "dependencies": { + "cliui": "^5.0.0", + "find-up": "^3.0.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^3.0.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^13.1.2" + } + }, + "node_modules/concurrently/node_modules/yargs-parser": { + "version": "13.1.2", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz", + "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==", + "dev": true, + "dependencies": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + } + }, + "node_modules/connect": { + "version": "3.6.6", + "resolved": "https://registry.npmjs.org/connect/-/connect-3.6.6.tgz", + "integrity": "sha1-Ce/2xVr3I24TcTWnJXSFi2eG9SQ=", + "dev": true, + "dependencies": { + "debug": "2.6.9", + "finalhandler": "1.1.0", + "parseurl": "~1.3.2", + "utils-merge": "1.0.1" + }, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/connect-history-api-fallback": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-1.6.0.tgz", + "integrity": "sha512-e54B99q/OUoH64zYYRf3HBP5z24G38h5D3qXu23JGRoigpX5Ss4r9ZnDk3g0Z8uQC2x2lPaJ+UlWBc1ZWBWdLg==", + "dev": true, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/connect/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/cookie": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.1.tgz", + "integrity": "sha512-ZwrFkGJxUR3EIoXtO+yVE69Eb7KlixbaeAWfBQB9vVsNn/o+Yw69gBWSSDK825hQNdN+wF8zELf3dFNl/kxkUA==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/copy-and-watch": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/copy-and-watch/-/copy-and-watch-0.1.5.tgz", + "integrity": "sha512-DHWIPXhboSoAeWWMnG3GTetgzunjX9MLVuLb6yfLxEYzVu56C3LHZ5GNelA1wNChLWKM4Xmspg8np2yRs15Zsg==", + "dev": true, + "dependencies": { + "chokidar": "3.4.1", + "colors": "1.4.0", + "glob": "7.1.6", + "glob-parent": "5.1.1" + }, + "bin": { + "copy-and-watch": "bin/copy-and-watch" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/copy-and-watch/node_modules/chokidar": { + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.4.1.tgz", + "integrity": "sha512-TQTJyr2stihpC4Sya9hs2Xh+O2wf+igjL36Y75xx2WdHuiICcn/XJza46Jwt0eT5hVpQOzo3FpY3cj3RVYLX0g==", + "dev": true, + "dependencies": { + "anymatch": "~3.1.1", + "braces": "~3.0.2", + "glob-parent": "~5.1.0", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.4.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "optionalDependencies": { + "fsevents": "~2.1.2" + } + }, + "node_modules/copy-and-watch/node_modules/fsevents": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.1.3.tgz", + "integrity": "sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ==", + "deprecated": "\"Please update to latest v2.3 or v2.2\"", + "dev": true, + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/copy-and-watch/node_modules/glob-parent": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.1.tgz", + "integrity": "sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/copy-and-watch/node_modules/readdirp": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.4.0.tgz", + "integrity": "sha512-0xe001vZBnJEK+uKcj8qOhyAKPzIT+gStxWr3LCB0DwcXR5NZJ3IaC+yGnHCYzB/S7ov3m3EEbZI2zeNvX+hGQ==", + "dev": true, + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/date-fns": { + "version": "2.21.1", + "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-2.21.1.tgz", + "integrity": "sha512-m1WR0xGiC6j6jNFAyW4Nvh4WxAi4JF4w9jRJwSI8nBmNcyZXPcP9VUQG+6gHQXAmqaGEKDKhOqAtENDC941UkA==", + "dev": true, + "engines": { + "node": ">=0.11" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/date-fns" + } + }, + "node_modules/debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/deepmerge": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", + "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/destroy": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", + "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=", + "dev": true + }, + "node_modules/dev-ip": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/dev-ip/-/dev-ip-1.0.1.tgz", + "integrity": "sha1-p2o+0YVb56ASu4rBbLgPPADcKPA=", + "dev": true, + "bin": { + "dev-ip": "lib/dev-ip.js" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/dlv": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz", + "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==", + "dev": true + }, + "node_modules/easy-extender": { + "version": "2.3.4", + "resolved": "https://registry.npmjs.org/easy-extender/-/easy-extender-2.3.4.tgz", + "integrity": "sha512-8cAwm6md1YTiPpOvDULYJL4ZS6WfM5/cTeVVh4JsvyYZAoqlRVUpHL9Gr5Fy7HA6xcSZicUia3DeAgO3Us8E+Q==", + "dev": true, + "dependencies": { + "lodash": "^4.17.10" + }, + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/eazy-logger": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/eazy-logger/-/eazy-logger-3.1.0.tgz", + "integrity": "sha512-/snsn2JqBtUSSstEl4R0RKjkisGHAhvYj89i7r3ytNUKW12y178KDZwXLXIgwDqLW6E/VRMT9qfld7wvFae8bQ==", + "dev": true, + "dependencies": { + "tfunk": "^4.0.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=", + "dev": true + }, + "node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "node_modules/encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/engine.io": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-3.5.0.tgz", + "integrity": "sha512-21HlvPUKaitDGE4GXNtQ7PLP0Sz4aWLddMPw2VTyFz1FVZqu/kZsJUO8WNpKuE/OCL7nkfRaOui2ZCJloGznGA==", + "dev": true, + "dependencies": { + "accepts": "~1.3.4", + "base64id": "2.0.0", + "cookie": "~0.4.1", + "debug": "~4.1.0", + "engine.io-parser": "~2.2.0", + "ws": "~7.4.2" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/engine.io-client": { + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-3.5.1.tgz", + "integrity": "sha512-oVu9kBkGbcggulyVF0kz6BV3ganqUeqXvD79WOFKa+11oK692w1NyFkuEj4xrkFRpZhn92QOqTk4RQq5LiBXbQ==", + "dev": true, + "dependencies": { + "component-emitter": "~1.3.0", + "component-inherit": "0.0.3", + "debug": "~3.1.0", + "engine.io-parser": "~2.2.0", + "has-cors": "1.1.0", + "indexof": "0.0.1", + "parseqs": "0.0.6", + "parseuri": "0.0.6", + "ws": "~7.4.2", + "xmlhttprequest-ssl": "~1.5.4", + "yeast": "0.1.2" + } + }, + "node_modules/engine.io-parser": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-2.2.1.tgz", + "integrity": "sha512-x+dN/fBH8Ro8TFwJ+rkB2AmuVw9Yu2mockR/p3W8f8YtExwFgDvBDi0GWyb4ZLkpahtDGZgtr3zLovanJghPqg==", + "dev": true, + "dependencies": { + "after": "0.8.2", + "arraybuffer.slice": "~0.0.7", + "base64-arraybuffer": "0.1.4", + "blob": "0.0.5", + "has-binary2": "~1.0.2" + } + }, + "node_modules/engine.io/node_modules/debug": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", + "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "deprecated": "Debug versions >=3.2.0 <3.2.7 || >=4 <4.3.1 have a low-severity ReDos regression when used in a Node.js environment. It is recommended you upgrade to 3.2.7 or 4.3.1. (https://github.com/visionmedia/debug/issues/797)", + "dev": true, + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/engine.io/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/error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "dev": true, + "dependencies": { + "is-arrayish": "^0.2.1" + } + }, + "node_modules/escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=", + "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": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/estree-walker": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-1.0.1.tgz", + "integrity": "sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg==", + "dev": true + }, + "node_modules/etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/eventemitter3": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", + "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", + "dev": true + }, + "node_modules/exec-sh": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/exec-sh/-/exec-sh-0.2.2.tgz", + "integrity": "sha512-FIUCJz1RbuS0FKTdaAafAByGS0CPvU3R0MeHxgtl+djzCc//F8HakL8GzmVNZanasTbTAY/3DRFA0KpVqj/eAw==", + "dev": true, + "dependencies": { + "merge": "^1.2.0" + } + }, + "node_modules/fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/finalhandler": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.0.tgz", + "integrity": "sha1-zgtoVbRYU+eRsvzGgARtiCU91/U=", + "dev": true, + "dependencies": { + "debug": "2.6.9", + "encodeurl": "~1.0.1", + "escape-html": "~1.0.3", + "on-finished": "~2.3.0", + "parseurl": "~1.3.2", + "statuses": "~1.3.1", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/finalhandler/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/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/follow-redirects": { + "version": "1.13.3", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.13.3.tgz", + "integrity": "sha512-DUgl6+HDzB0iEptNQEXLx/KhTmDb8tZUHSeLqpnjpknR70H0nC2t9N73BK6fN4hOvJ84pKlIQVQ4k5FFlBedKA==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, + "node_modules/fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fs-extra": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-3.0.1.tgz", + "integrity": "sha1-N5TzeMWLNC6n27sjCVEJxLO2IpE=", + "dev": true, + "dependencies": { + "graceful-fs": "^4.1.2", + "jsonfile": "^3.0.0", + "universalify": "^0.1.0" + } + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "dev": true + }, + "node_modules/fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "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-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true, + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/glob": { + "version": "7.1.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", + "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "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==", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.6", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.6.tgz", + "integrity": "sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ==", + "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": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", + "dev": true, + "dependencies": { + "ansi-regex": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/has-binary2": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-binary2/-/has-binary2-1.0.3.tgz", + "integrity": "sha512-G1LWKhDSvhGeAQ8mPVQlqNcOB2sJdwATtZKl2pDKKHfpf/rYj24lkinxf69blJbnsvtqqNU+L3SL50vzZhXOnw==", + "dev": true, + "dependencies": { + "isarray": "2.0.1" + } + }, + "node_modules/has-cors": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-cors/-/has-cors-1.1.0.tgz", + "integrity": "sha1-XkdHk/fqmEPRu5nCPu9J/xJv/zk=", + "dev": true + }, + "node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/hosted-git-info": { + "version": "2.8.9", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", + "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", + "dev": true + }, + "node_modules/http-errors": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.3.tgz", + "integrity": "sha512-ZTTX0MWrsQ2ZAhA1cejAwDLycFsd7I7nVtnkT3Ol0aqodaKW+0CTZDQ1uBv5whptCnc8e8HeRRJxRs0kmm/Qfw==", + "dev": true, + "dependencies": { + "depd": "~1.1.2", + "inherits": "2.0.4", + "setprototypeof": "1.1.1", + "statuses": ">= 1.5.0 < 2", + "toidentifier": "1.0.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/http-errors/node_modules/statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/http-proxy": { + "version": "1.18.1", + "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz", + "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==", + "dev": true, + "dependencies": { + "eventemitter3": "^4.0.0", + "follow-redirects": "^1.0.0", + "requires-port": "^1.0.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dev": true, + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/immutable": { + "version": "3.8.2", + "resolved": "https://registry.npmjs.org/immutable/-/immutable-3.8.2.tgz", + "integrity": "sha1-wkOZUUVbs5kT2vKBN28VMOEErfM=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/indexof": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/indexof/-/indexof-0.0.1.tgz", + "integrity": "sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10=", + "dev": true + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "dev": true, + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "node_modules/is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", + "dev": true + }, + "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==", + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-core-module": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.2.0.tgz", + "integrity": "sha512-XRAfAdyyY5F5cOXn7hYQDqh2Xmii+DEfIcQGxK/uNwMHhIkPWO0g8msXcbzLe+MpGoR951MlqM/2iIlU4vKDdQ==", + "dev": true, + "dependencies": { + "has": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-glob": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", + "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-module": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz", + "integrity": "sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==", + "dev": true + }, + "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==", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-number-like": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/is-number-like/-/is-number-like-1.0.8.tgz", + "integrity": "sha512-6rZi3ezCyFcn5L71ywzz2bS5b2Igl1En3eTlZlvKjpz1n3IZLAYMbKYAIQgFmEu0GENg92ziU/faEOA/aixjbA==", + "dev": true, + "dependencies": { + "lodash.isfinite": "^3.3.2" + } + }, + "node_modules/is-wsl": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", + "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/isarray": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.1.tgz", + "integrity": "sha1-o32U7ZzaLVmGXJ92/llu4fM4dB4=", + "dev": true + }, + "node_modules/json-parse-better-errors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", + "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", + "dev": true + }, + "node_modules/jsonfile": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-3.0.1.tgz", + "integrity": "sha1-pezG9l9T9mLEQVx2daAzHQmS7GY=", + "dev": true, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/limiter": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/limiter/-/limiter-1.1.5.tgz", + "integrity": "sha512-FWWMIEOxz3GwUI4Ts/IvgVy6LPvoMPgjMdQ185nN6psJyBJ4yOpzqm695/h5umdLJg2vW3GR5iG11MAkR2AzJA==", + "dev": true + }, + "node_modules/localtunnel": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/localtunnel/-/localtunnel-2.0.1.tgz", + "integrity": "sha512-LiaI5wZdz0xFkIQpXbNI62ZnNn8IMsVhwxHmhA+h4vj8R9JG/07bQHWwQlyy7b95/5fVOCHJfIHv+a5XnkvaJA==", + "dev": true, + "dependencies": { + "axios": "0.21.1", + "debug": "4.3.1", + "openurl": "1.1.1", + "yargs": "16.2.0" + }, + "bin": { + "lt": "bin/lt.js" + }, + "engines": { + "node": ">=8.3.0" + } + }, + "node_modules/localtunnel/node_modules/debug": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", + "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/localtunnel/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/localtunnel/node_modules/yargs": { + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "dev": true, + "dependencies": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" + }, + "engines": { + "node": ">=10" + } + }, + "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.isfinite": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/lodash.isfinite/-/lodash.isfinite-3.3.2.tgz", + "integrity": "sha1-+4m2WpqAKBgz8LdHizpRBPiY67M=", + "dev": true + }, + "node_modules/madui": { + "resolved": "madlib_modules/MadUI", + "link": true + }, + "node_modules/merge": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/merge/-/merge-1.2.1.tgz", + "integrity": "sha512-VjFo4P5Whtj4vsLzsYBu5ayHhoHJ0UqNm7ibvShmbmoz7tGi0vXaoJbGdB+GmDMLUdg8DpQXEIeVDAe8MaABvQ==", + "dev": true + }, + "node_modules/micromatch": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz", + "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==", + "dev": true, + "dependencies": { + "braces": "^3.0.1", + "picomatch": "^2.2.3" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/mime": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.4.1.tgz", + "integrity": "sha512-KI1+qOZu5DcW6wayYHSzR/tXKCDC5Om4s1z2QJjDULzLcmf3DvzS7oluY4HCTrc+9FiKmWUgeNLg7W3uIQvxtQ==", + "dev": true, + "bin": { + "mime": "cli.js" + } + }, + "node_modules/mime-db": { + "version": "1.47.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.47.0.tgz", + "integrity": "sha512-QBmA/G2y+IfeS4oktet3qRZ+P5kPhCKRXxXnQEudYqUaEioAU1/Lq2us3D/t1Jfo4hE9REQPrbB7K5sOczJVIw==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.30", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.30.tgz", + "integrity": "sha512-crmjA4bLtR8m9qLpHvgxSChT+XoSlZi8J4n/aIdn3z92e/U47Z0V/yl+Wh9W046GgFVAmoNR/fmdbZYcSSIUeg==", + "dev": true, + "dependencies": { + "mime-db": "1.47.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minimist": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", + "dev": true + }, + "node_modules/mitt": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/mitt/-/mitt-1.2.0.tgz", + "integrity": "sha512-r6lj77KlwqLhIUku9UWYes7KJtsczvolZkzp8hbaDPPaE24OmWl5s539Mytlj22siEQKosZ26qCBgda2PKwoJw==", + "dev": true + }, + "node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, + "node_modules/negotiator": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", + "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/normalize-package-data": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", + "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", + "dev": true, + "dependencies": { + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" + } + }, + "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==", + "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": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", + "dev": true, + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dev": true, + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/openurl": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/openurl/-/openurl-1.1.1.tgz", + "integrity": "sha1-OHW0sO96UsFW8NtB1GCduw+Us4c=", + "dev": true + }, + "node_modules/opn": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/opn/-/opn-5.3.0.tgz", + "integrity": "sha512-bYJHo/LOmoTd+pfiYhfZDnf9zekVJrY+cnS2a5F2x+w5ppvTqObojTP7WiFG+kVZs9Inw+qQ/lw7TroWwhdd2g==", + "dev": true, + "dependencies": { + "is-wsl": "^1.1.0" + }, + "engines": { + "node": ">=4" + } + }, + "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/parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", + "dev": true, + "dependencies": { + "error-ex": "^1.3.1", + "json-parse-better-errors": "^1.0.1" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/parseqs": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/parseqs/-/parseqs-0.0.6.tgz", + "integrity": "sha512-jeAGzMDbfSHHA091hr0r31eYfTig+29g3GKKE/PPbEQ65X0lmMwlEoqmhzu0iztID5uJpZsFlUPDP8ThPL7M8w==", + "dev": true + }, + "node_modules/parseuri": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/parseuri/-/parseuri-0.0.6.tgz", + "integrity": "sha512-AUjen8sAkGgao7UyCX6Ahv0gIK2fABKmYjvP4xmy5JaKvcbTRueIqIPHLAfq30xJddqSE033IOMUSOMCcK3Sow==", + "dev": true + }, + "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/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": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-parse": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", + "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==", + "dev": true + }, + "node_modules/picomatch": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.3.tgz", + "integrity": "sha512-KpELjfwcCDUb9PeigTs2mBJzXUPzAuP2oPcA989He8Rte0+YUAjw1JVedDhuTKPkHjSYzMN3npC9luThGYEKdg==", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/portscanner": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/portscanner/-/portscanner-2.1.1.tgz", + "integrity": "sha1-6rtAnk3iSVD1oqUW01rnaTQ/u5Y=", + "dev": true, + "dependencies": { + "async": "1.5.2", + "is-number-like": "^1.0.3" + }, + "engines": { + "node": ">=0.4", + "npm": ">=1.0.0" + } + }, + "node_modules/qs": { + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.2.3.tgz", + "integrity": "sha1-HPyyXBCpsrSDBT/zn138kjOQjP4=", + "dev": true, + "engines": { + "node": ">=0.6" + } + }, + "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/raw-body": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.1.tgz", + "integrity": "sha512-9WmIKF6mkvA0SLmA2Knm9+qj89e+j1zqgyn8aXGd7+nAduPoqgI9lO57SAZNn/Byzo5P7JhXTyg9PzaJbH73bA==", + "dev": true, + "dependencies": { + "bytes": "3.1.0", + "http-errors": "1.7.3", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/read-pkg": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-4.0.1.tgz", + "integrity": "sha1-ljYlN48+HE1IyFhytabsfV0JMjc=", + "dev": true, + "dependencies": { + "normalize-package-data": "^2.3.2", + "parse-json": "^4.0.0", + "pify": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/readdirp": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.5.0.tgz", + "integrity": "sha512-cMhu7c/8rdhkHXWsY+osBhfSy0JikwpHK/5+imo+LpeasTF8ouErHrlYkwT0++njiyuDvc7OFY5T3ukvZ8qmFQ==", + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/require-main-filename": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", + "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", + "dev": true + }, + "node_modules/requires-port": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", + "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=", + "dev": true + }, + "node_modules/resolve": { + "version": "1.20.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", + "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", + "dev": true, + "dependencies": { + "is-core-module": "^2.2.0", + "path-parse": "^1.0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/resp-modifier": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/resp-modifier/-/resp-modifier-6.0.2.tgz", + "integrity": "sha1-sSTeXE+6/LpUH0j/pzlw9KpFa08=", + "dev": true, + "dependencies": { + "debug": "^2.2.0", + "minimatch": "^3.0.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/resp-modifier/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/rollup": { + "version": "2.79.1", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.79.1.tgz", + "integrity": "sha512-uKxbd0IhMZOhjAiD5oAFp7BqvkA4Dv47qpOCtaNvng4HBwdbWtdOh8f5nZNuk2rp51PMGk3bzfWu5oayNEuYnw==", + "dev": true, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=10.0.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/rx": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/rx/-/rx-4.1.0.tgz", + "integrity": "sha1-pfE/957zt0D+MKqAP7CfmIBdR4I=", + "dev": true + }, + "node_modules/rxjs": { + "version": "5.5.12", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-5.5.12.tgz", + "integrity": "sha512-xx2itnL5sBbqeeiVgNPVuQQ1nC8Jp2WfNJhXWHmElW9YmrpS9UVnNzhP3EH3HFqexO5Tlp8GhYY+WEcqcVMvGw==", + "dev": true, + "dependencies": { + "symbol-observable": "1.0.1" + }, + "engines": { + "npm": ">=2.0.0" + } + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "dev": true + }, + "node_modules/sass": { + "version": "1.32.11", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.32.11.tgz", + "integrity": "sha512-O9tRcob/fegUVSIV1ihLLZcftIOh0AF1VpKgusUfLqnb2jQ0GLDwI5ivv1FYWivGv8eZ/AwntTyTzjcHu0c/qw==", + "dependencies": { + "chokidar": ">=3.0.0 <4.0.0" + }, + "bin": { + "sass": "sass.js" + }, + "engines": { + "node": ">=8.9.0" + } + }, + "node_modules/semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true, + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/send": { + "version": "0.16.2", + "resolved": "https://registry.npmjs.org/send/-/send-0.16.2.tgz", + "integrity": "sha512-E64YFPUssFHEFBvpbbjr44NCLtI1AohxQ8ZSiJjQLskAdKuriYEP6VyGEsRDH8ScozGpkaX1BGvhanqCwkcEZw==", + "dev": true, + "dependencies": { + "debug": "2.6.9", + "depd": "~1.1.2", + "destroy": "~1.0.4", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "~1.6.2", + "mime": "1.4.1", + "ms": "2.0.0", + "on-finished": "~2.3.0", + "range-parser": "~1.2.0", + "statuses": "~1.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/send/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/send/node_modules/http-errors": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", + "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=", + "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/send/node_modules/inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", + "dev": true + }, + "node_modules/send/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/send/node_modules/statuses": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz", + "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/serve-index": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz", + "integrity": "sha1-03aNabHn2C5c4FD/9bRTvqEqkjk=", + "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/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/serve-index/node_modules/http-errors": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", + "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=", + "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": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", + "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/serve-index/node_modules/statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/serve-static": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.13.2.tgz", + "integrity": "sha512-p/tdJrO4U387R9oMjb1oj7qSMaMfmOyd4j9hOFoxZe2baQszgHcSWjuya/CiT5kgZZKRudHNOA0pYXOl8rQ5nw==", + "dev": true, + "dependencies": { + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.2", + "send": "0.16.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/server-destroy": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/server-destroy/-/server-destroy-1.0.1.tgz", + "integrity": "sha1-8Tv5KOQrnD55OD5hzDmYtdFObN0=", + "dev": true + }, + "node_modules/set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", + "dev": true + }, + "node_modules/setprototypeof": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", + "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==", + "dev": true + }, + "node_modules/snabbdom": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/snabbdom/-/snabbdom-3.6.2.tgz", + "integrity": "sha512-ig5qOnCDbugFntKi6c7Xlib8bA6xiJVk8O+WdFrV3wxbMqeHO0hXFQC4nAhPVWfZfi8255lcZkNhtIBINCc4+Q==", + "engines": { + "node": ">=12.17.0" + } + }, + "node_modules/socket.io": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-2.4.0.tgz", + "integrity": "sha512-9UPJ1UTvKayuQfVv2IQ3k7tCQC/fboDyIK62i99dAQIyHKaBsNdTpwHLgKJ6guRWxRtC9H+138UwpaGuQO9uWQ==", + "dev": true, + "dependencies": { + "debug": "~4.1.0", + "engine.io": "~3.5.0", + "has-binary2": "~1.0.2", + "socket.io-adapter": "~1.1.0", + "socket.io-client": "2.4.0", + "socket.io-parser": "~3.4.0" + } + }, + "node_modules/socket.io-adapter": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-1.1.2.tgz", + "integrity": "sha512-WzZRUj1kUjrTIrUKpZLEzFZ1OLj5FwLlAFQs9kuZJzJi5DKdU7FsWc36SNmA8iDOtwBQyT8FkrriRM8vXLYz8g==", + "dev": true + }, + "node_modules/socket.io-client": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-2.4.0.tgz", + "integrity": "sha512-M6xhnKQHuuZd4Ba9vltCLT9oa+YvTsP8j9NcEiLElfIg8KeYPyhWOes6x4t+LTAC8enQbE/995AdTem2uNyKKQ==", + "dev": true, + "dependencies": { + "backo2": "1.0.2", + "component-bind": "1.0.0", + "component-emitter": "~1.3.0", + "debug": "~3.1.0", + "engine.io-client": "~3.5.0", + "has-binary2": "~1.0.2", + "indexof": "0.0.1", + "parseqs": "0.0.6", + "parseuri": "0.0.6", + "socket.io-parser": "~3.3.0", + "to-array": "0.1.4" + } + }, + "node_modules/socket.io-parser": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-3.3.2.tgz", + "integrity": "sha512-FJvDBuOALxdCI9qwRrO/Rfp9yfndRtc1jSgVgV8FDraihmSP/MLGD5PEuJrNfjALvcQ+vMDM/33AWOYP/JSjDg==", + "dev": true, + "dependencies": { + "component-emitter": "~1.3.0", + "debug": "~3.1.0", + "isarray": "2.0.1" + } + }, + "node_modules/socket.io/node_modules/component-emitter": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz", + "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=", + "dev": true + }, + "node_modules/socket.io/node_modules/debug": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", + "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "deprecated": "Debug versions >=3.2.0 <3.2.7 || >=4 <4.3.1 have a low-severity ReDos regression when used in a Node.js environment. It is recommended you upgrade to 3.2.7 or 4.3.1. (https://github.com/visionmedia/debug/issues/797)", + "dev": true, + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/socket.io/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/socket.io/node_modules/socket.io-parser": { + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-3.4.1.tgz", + "integrity": "sha512-11hMgzL+WCLWf1uFtHSNvliI++tcRUWdoeYuwIl+Axvwy9z2gQM+7nJyN3STj1tLj5JyIUH8/gpDGxzAlDdi0A==", + "dev": true, + "dependencies": { + "component-emitter": "1.2.1", + "debug": "~4.1.0", + "isarray": "2.0.1" + } + }, + "node_modules/spawn-command": { + "version": "0.0.2-1", + "resolved": "https://registry.npmjs.org/spawn-command/-/spawn-command-0.0.2-1.tgz", + "integrity": "sha1-YvXpRmmBwbeW3Fkpk34RycaSG9A=", + "dev": true + }, + "node_modules/spdx-correct": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz", + "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==", + "dev": true, + "dependencies": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/spdx-exceptions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", + "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", + "dev": true + }, + "node_modules/spdx-expression-parse": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", + "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", + "dev": true, + "dependencies": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/spdx-license-ids": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.7.tgz", + "integrity": "sha512-U+MTEOO0AiDzxwFvoa4JVnMV6mZlJKk2sBLt90s7G0Gd0Mlknc7kxEn3nuDPNZRta7O2uy8oLcZLVT+4sqNZHQ==", + "dev": true + }, + "node_modules/statuses": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.3.1.tgz", + "integrity": "sha1-+vUbnrdKrvOzrPStX2Gr8ky3uT4=", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/stream-throttle": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/stream-throttle/-/stream-throttle-0.1.3.tgz", + "integrity": "sha1-rdV8jXzHOoFjDTHNVdOWHPr7qcM=", + "dev": true, + "dependencies": { + "commander": "^2.2.0", + "limiter": "^1.0.5" + }, + "bin": { + "throttleproxy": "bin/throttleproxy.js" + }, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/string-width": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz", + "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width/node_modules/ansi-regex": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width/node_modules/strip-ansi": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dev": true, + "dependencies": { + "ansi-regex": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/symbol-observable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-1.0.1.tgz", + "integrity": "sha1-g0D8RwLDEi310iKI+IKD9RPT/dQ=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/tfunk": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/tfunk/-/tfunk-4.0.0.tgz", + "integrity": "sha512-eJQ0dGfDIzWNiFNYFVjJ+Ezl/GmwHaFTBTjrtqNPW0S7cuVDBrZrmzUz6VkMeCR4DZFqhd4YtLwsw3i2wYHswQ==", + "dev": true, + "dependencies": { + "chalk": "^1.1.3", + "dlv": "^1.1.3" + } + }, + "node_modules/to-array": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/to-array/-/to-array-0.1.4.tgz", + "integrity": "sha1-F+bBH3PdTz10zaek/zI46a2b+JA=", + "dev": true + }, + "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==", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/toidentifier": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", + "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==", + "dev": true, + "engines": { + "node": ">=0.6" + } + }, + "node_modules/tree-kill": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz", + "integrity": "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==", + "dev": true, + "bin": { + "tree-kill": "cli.js" + } + }, + "node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + }, + "node_modules/ua-parser-js": { + "version": "0.7.28", + "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.28.tgz", + "integrity": "sha512-6Gurc1n//gjp9eQNXjD9O3M/sMwVtN5S8Lv9bvOYBfKfDNiIIhqiyi01vMBO45u4zkDE420w/e0se7Vs+sIg+g==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/ua-parser-js" + }, + { + "type": "paypal", + "url": "https://paypal.me/faisalman" + } + ], + "engines": { + "node": "*" + } + }, + "node_modules/undici-types": { + "version": "5.26.5", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", + "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==", + "dev": true + }, + "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/unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=", + "dev": true, + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/validate-npm-package-license": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", + "dev": true, + "dependencies": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, + "node_modules/watch": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/watch/-/watch-1.0.2.tgz", + "integrity": "sha1-NApxe952Vyb6CqB9ch4BR6VR3ww=", + "dev": true, + "dependencies": { + "exec-sh": "^0.2.0", + "minimist": "^1.2.0" + }, + "bin": { + "watch": "cli.js" + }, + "engines": { + "node": ">=0.1.95" + } + }, + "node_modules/which-module": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", + "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", + "dev": true + }, + "node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi/node_modules/ansi-regex": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi/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/wrap-ansi/node_modules/strip-ansi": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "dev": true + }, + "node_modules/ws": { + "version": "7.4.5", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.5.tgz", + "integrity": "sha512-xzyu3hFvomRfXKH8vOFMU3OguG6oOvhXMo3xsGy3xWExqaM2dxBbVxuD99O7m3ZUFMvvscsZDqxfgMaRr/Nr1g==", + "dev": true, + "engines": { + "node": ">=8.3.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/xmlhttprequest-ssl": { + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.5.5.tgz", + "integrity": "sha1-wodrBhaKrcQOV9l+gRkayPQ5iz4=", + "dev": true, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/yargs": { + "version": "15.4.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", + "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", + "dev": true, + "dependencies": { + "cliui": "^6.0.0", + "decamelize": "^1.2.0", + "find-up": "^4.1.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^4.2.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^18.1.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/yargs-parser": { + "version": "20.2.7", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.7.tgz", + "integrity": "sha512-FiNkvbeHzB/syOjIUxFDCnhSfzAL8R5vs40MgLFBorXACCOAEaWu0gRZl14vG8MR9AOJIZbmkjhusqBYZ3HTHw==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/yargs/node_modules/ansi-regex": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/yargs/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/yargs/node_modules/cliui": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", + "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", + "dev": true, + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^6.2.0" + } + }, + "node_modules/yargs/node_modules/strip-ansi": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/yargs/node_modules/wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/yargs/node_modules/y18n": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", + "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", + "dev": true + }, + "node_modules/yargs/node_modules/yargs-parser": { + "version": "18.1.3", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", + "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", + "dev": true, + "dependencies": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/yeast": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/yeast/-/yeast-0.1.2.tgz", + "integrity": "sha1-AI4G2AlDIMNy28L47XagymyKxBk=", + "dev": true + } + }, + "dependencies": { + "@rollup/plugin-node-resolve": { + "version": "11.2.1", + "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-11.2.1.tgz", + "integrity": "sha512-yc2n43jcqVyGE2sqV5/YCmocy9ArjVAP/BeXyTtADTBBX6V0e5UMqwO8CdQ0kzjb6zu5P1qMzsScCMRvE9OlVg==", + "dev": true, + "requires": { + "@rollup/pluginutils": "^3.1.0", + "@types/resolve": "1.17.1", + "builtin-modules": "^3.1.0", + "deepmerge": "^4.2.2", + "is-module": "^1.0.0", + "resolve": "^1.19.0" + } + }, + "@rollup/pluginutils": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-3.1.0.tgz", + "integrity": "sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg==", + "dev": true, + "requires": { + "@types/estree": "0.0.39", + "estree-walker": "^1.0.1", + "picomatch": "^2.2.2" + } + }, + "@types/estree": { + "version": "0.0.39", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.39.tgz", + "integrity": "sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==", + "dev": true + }, + "@types/node": { + "version": "20.12.11", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.12.11.tgz", + "integrity": "sha512-vDg9PZ/zi+Nqp6boSOT7plNuthRugEKixDv5sFTIpkE89MmNtEArAShI4mxuX2+UrLEe9pxC1vm2cjm9YlWbJw==", + "dev": true, + "requires": { + "undici-types": "~5.26.4" + } + }, + "@types/resolve": { + "version": "1.17.1", + "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-1.17.1.tgz", + "integrity": "sha512-yy7HuzQhj0dhGpD8RLXSZWEkLsV9ibvxvi6EiJ3bkqLAO1RGo0WbkWQiwpRlSFymTJRz0d3k5LM3kkx8ArDbLw==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "accepts": { + "version": "1.3.7", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", + "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==", + "dev": true, + "requires": { + "mime-types": "~2.1.24", + "negotiator": "0.6.2" + } + }, + "after": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/after/-/after-0.8.2.tgz", + "integrity": "sha1-/ts5T58OAqqXaOcCvaI7UF+ufh8=", + "dev": true + }, + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true + }, + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + }, + "anymatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", + "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", + "requires": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + } + }, + "arraybuffer.slice": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/arraybuffer.slice/-/arraybuffer.slice-0.0.7.tgz", + "integrity": "sha512-wGUIVQXuehL5TCqQun8OW81jGzAWycqzFF8lFp+GOM5BXLYj3bKNsYC4daB7n6XjCqxQA/qgTJ+8ANR3acjrog==", + "dev": true + }, + "async": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", + "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=", + "dev": true + }, + "async-each-series": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/async-each-series/-/async-each-series-0.1.1.tgz", + "integrity": "sha1-dhfBkXQB/Yykooqtzj266Yr+tDI=", + "dev": true + }, + "axios": { + "version": "0.21.1", + "resolved": "https://registry.npmjs.org/axios/-/axios-0.21.1.tgz", + "integrity": "sha512-dKQiRHxGD9PPRIUNIWvZhPTPpl1rf/OxTYKsqKUDjBwYylTvV7SjSHJb9ratfyzM6wCdLCOYLzs73qpg5c4iGA==", + "dev": true, + "requires": { + "follow-redirects": "^1.10.0" + } + }, + "backo2": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/backo2/-/backo2-1.0.2.tgz", + "integrity": "sha1-MasayLEpNjRj41s+u2n038+6eUc=", + "dev": true + }, + "balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true + }, + "base64-arraybuffer": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-0.1.4.tgz", + "integrity": "sha1-mBjHngWbE1X5fgQooBfIOOkLqBI=", + "dev": true + }, + "base64id": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/base64id/-/base64id-2.0.0.tgz", + "integrity": "sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog==", + "dev": true + }, + "batch": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", + "integrity": "sha1-3DQxT05nkxgJP8dgJyUl+UvyXBY=", + "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==" + }, + "blob": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/blob/-/blob-0.0.5.tgz", + "integrity": "sha512-gaqbzQPqOoamawKg0LGVd7SzLgXS+JH61oWprSLH+P+abTczqJbhTR8CmJ2u9/bUYNmHTGJx/UEmn6doAvvuig==", + "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==", + "requires": { + "fill-range": "^7.0.1" + } + }, + "browser-sync": { + "version": "2.26.14", + "resolved": "https://registry.npmjs.org/browser-sync/-/browser-sync-2.26.14.tgz", + "integrity": "sha512-3TtpsheGolJT6UFtM2CZWEcGJmI4ZEvoCKiKE2bvcDnPxRkhQT4nIGVtfiyPcoHKXGM0LwMOZmYJNWfiNfVXWA==", + "dev": true, + "requires": { + "browser-sync-client": "^2.26.14", + "browser-sync-ui": "^2.26.14", + "bs-recipes": "1.3.4", + "bs-snippet-injector": "^2.0.1", + "chokidar": "^3.5.1", + "connect": "3.6.6", + "connect-history-api-fallback": "^1", + "dev-ip": "^1.0.1", + "easy-extender": "^2.3.4", + "eazy-logger": "3.1.0", + "etag": "^1.8.1", + "fresh": "^0.5.2", + "fs-extra": "3.0.1", + "http-proxy": "^1.18.1", + "immutable": "^3", + "localtunnel": "^2.0.1", + "micromatch": "^4.0.2", + "opn": "5.3.0", + "portscanner": "2.1.1", + "qs": "6.2.3", + "raw-body": "^2.3.2", + "resp-modifier": "6.0.2", + "rx": "4.1.0", + "send": "0.16.2", + "serve-index": "1.9.1", + "serve-static": "1.13.2", + "server-destroy": "1.0.1", + "socket.io": "2.4.0", + "ua-parser-js": "^0.7.18", + "yargs": "^15.4.1" + } + }, + "browser-sync-client": { + "version": "2.26.14", + "resolved": "https://registry.npmjs.org/browser-sync-client/-/browser-sync-client-2.26.14.tgz", + "integrity": "sha512-be0m1MchmKv/26r/yyyolxXcBi052aYrmaQep5nm8YNMjFcEyzv0ZoOKn/c3WEXNlEB/KeXWaw70fAOJ+/F1zQ==", + "dev": true, + "requires": { + "etag": "1.8.1", + "fresh": "0.5.2", + "mitt": "^1.1.3", + "rxjs": "^5.5.6" + } + }, + "browser-sync-ui": { + "version": "2.26.14", + "resolved": "https://registry.npmjs.org/browser-sync-ui/-/browser-sync-ui-2.26.14.tgz", + "integrity": "sha512-6oT1sboM4KVNnWCCJDMGbRIeTBw97toMFQ+srImvwQ6J5t9KMgizaIX8HcKLiemsUMSJkgGM9RVKIpq2UblgOA==", + "dev": true, + "requires": { + "async-each-series": "0.1.1", + "connect-history-api-fallback": "^1", + "immutable": "^3", + "server-destroy": "1.0.1", + "socket.io-client": "^2.4.0", + "stream-throttle": "^0.1.3" + } + }, + "bs-recipes": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/bs-recipes/-/bs-recipes-1.3.4.tgz", + "integrity": "sha1-DS1NSKcYyMBEdp/cT4lZLci2lYU=", + "dev": true + }, + "bs-snippet-injector": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/bs-snippet-injector/-/bs-snippet-injector-2.0.1.tgz", + "integrity": "sha1-YbU5PxH1JVntEgaTEANDtu2wTdU=", + "dev": true + }, + "builtin-modules": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.3.0.tgz", + "integrity": "sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==", + "dev": true + }, + "bytes": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", + "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==", + "dev": true + }, + "camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true + }, + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "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" + } + }, + "chokidar": { + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.1.tgz", + "integrity": "sha512-9+s+Od+W0VJJzawDma/gvBNQqkTiqYTWLuZoyAsivsI4AaWTCzHG06/TMjsf1cYe9Cb97UCEhjz7HvnPk2p/tw==", + "requires": { + "anymatch": "~3.1.1", + "braces": "~3.0.2", + "fsevents": "~2.3.1", + "glob-parent": "~5.1.0", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.5.0" + } + }, + "cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "dev": true, + "requires": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "dev": true + }, + "strip-ansi": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "dev": true, + "requires": { + "ansi-regex": "^5.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": "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 + }, + "component-bind": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/component-bind/-/component-bind-1.0.0.tgz", + "integrity": "sha1-AMYIq33Nk4l8AAllGx06jh5zu9E=", + "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 + }, + "component-inherit": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/component-inherit/-/component-inherit-0.0.3.tgz", + "integrity": "sha1-ZF/ErfWLcrZJ1crmUTVhnbJv8UM=", + "dev": true + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "dev": true + }, + "concurrently": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/concurrently/-/concurrently-5.3.0.tgz", + "integrity": "sha512-8MhqOB6PWlBfA2vJ8a0bSFKATOdWlHiQlk11IfmQBPaHVP8oP2gsh2MObE6UR3hqDHqvaIvLTyceNW6obVuFHQ==", + "dev": true, + "requires": { + "chalk": "^2.4.2", + "date-fns": "^2.0.1", + "lodash": "^4.17.15", + "read-pkg": "^4.0.1", + "rxjs": "^6.5.2", + "spawn-command": "^0.0.2-1", + "supports-color": "^6.1.0", + "tree-kill": "^1.2.2", + "yargs": "^13.3.0" + }, + "dependencies": { + "ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "dev": true + }, + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "dependencies": { + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "cliui": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", + "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", + "dev": true, + "requires": { + "string-width": "^3.1.0", + "strip-ansi": "^5.2.0", + "wrap-ansi": "^5.1.0" + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, + "emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", + "dev": true + }, + "find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "dev": true, + "requires": { + "locate-path": "^3.0.0" + } + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true + }, + "locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "dev": true, + "requires": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + } + }, + "p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "dev": true, + "requires": { + "p-limit": "^2.0.0" + } + }, + "path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", + "dev": true + }, + "rxjs": { + "version": "6.6.7", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", + "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", + "dev": true, + "requires": { + "tslib": "^1.9.0" + } + }, + "string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "dev": true, + "requires": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + } + }, + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "requires": { + "ansi-regex": "^4.1.0" + } + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + }, + "wrap-ansi": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", + "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.0", + "string-width": "^3.0.0", + "strip-ansi": "^5.0.0" + } + }, + "y18n": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", + "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", + "dev": true + }, + "yargs": { + "version": "13.3.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz", + "integrity": "sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==", + "dev": true, + "requires": { + "cliui": "^5.0.0", + "find-up": "^3.0.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^3.0.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^13.1.2" + } + }, + "yargs-parser": { + "version": "13.1.2", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz", + "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==", + "dev": true, + "requires": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + } + } + } + }, + "connect": { + "version": "3.6.6", + "resolved": "https://registry.npmjs.org/connect/-/connect-3.6.6.tgz", + "integrity": "sha1-Ce/2xVr3I24TcTWnJXSFi2eG9SQ=", + "dev": true, + "requires": { + "debug": "2.6.9", + "finalhandler": "1.1.0", + "parseurl": "~1.3.2", + "utils-merge": "1.0.1" + }, + "dependencies": { + "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" + } + } + } + }, + "connect-history-api-fallback": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-1.6.0.tgz", + "integrity": "sha512-e54B99q/OUoH64zYYRf3HBP5z24G38h5D3qXu23JGRoigpX5Ss4r9ZnDk3g0Z8uQC2x2lPaJ+UlWBc1ZWBWdLg==", + "dev": true + }, + "cookie": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.1.tgz", + "integrity": "sha512-ZwrFkGJxUR3EIoXtO+yVE69Eb7KlixbaeAWfBQB9vVsNn/o+Yw69gBWSSDK825hQNdN+wF8zELf3dFNl/kxkUA==", + "dev": true + }, + "copy-and-watch": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/copy-and-watch/-/copy-and-watch-0.1.5.tgz", + "integrity": "sha512-DHWIPXhboSoAeWWMnG3GTetgzunjX9MLVuLb6yfLxEYzVu56C3LHZ5GNelA1wNChLWKM4Xmspg8np2yRs15Zsg==", + "dev": true, + "requires": { + "chokidar": "3.4.1", + "colors": "1.4.0", + "glob": "7.1.6", + "glob-parent": "5.1.1" + }, + "dependencies": { + "chokidar": { + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.4.1.tgz", + "integrity": "sha512-TQTJyr2stihpC4Sya9hs2Xh+O2wf+igjL36Y75xx2WdHuiICcn/XJza46Jwt0eT5hVpQOzo3FpY3cj3RVYLX0g==", + "dev": true, + "requires": { + "anymatch": "~3.1.1", + "braces": "~3.0.2", + "fsevents": "~2.1.2", + "glob-parent": "~5.1.0", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.4.0" + } + }, + "fsevents": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.1.3.tgz", + "integrity": "sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ==", + "dev": true, + "optional": true + }, + "glob-parent": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.1.tgz", + "integrity": "sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ==", + "dev": true, + "requires": { + "is-glob": "^4.0.1" + } + }, + "readdirp": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.4.0.tgz", + "integrity": "sha512-0xe001vZBnJEK+uKcj8qOhyAKPzIT+gStxWr3LCB0DwcXR5NZJ3IaC+yGnHCYzB/S7ov3m3EEbZI2zeNvX+hGQ==", + "dev": true, + "requires": { + "picomatch": "^2.2.1" + } + } + } + }, + "date-fns": { + "version": "2.21.1", + "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-2.21.1.tgz", + "integrity": "sha512-m1WR0xGiC6j6jNFAyW4Nvh4WxAi4JF4w9jRJwSI8nBmNcyZXPcP9VUQG+6gHQXAmqaGEKDKhOqAtENDC941UkA==", + "dev": true + }, + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", + "dev": true + }, + "deepmerge": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", + "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", + "dev": true + }, + "depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=", + "dev": true + }, + "destroy": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", + "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=", + "dev": true + }, + "dev-ip": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/dev-ip/-/dev-ip-1.0.1.tgz", + "integrity": "sha1-p2o+0YVb56ASu4rBbLgPPADcKPA=", + "dev": true + }, + "dlv": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz", + "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==", + "dev": true + }, + "easy-extender": { + "version": "2.3.4", + "resolved": "https://registry.npmjs.org/easy-extender/-/easy-extender-2.3.4.tgz", + "integrity": "sha512-8cAwm6md1YTiPpOvDULYJL4ZS6WfM5/cTeVVh4JsvyYZAoqlRVUpHL9Gr5Fy7HA6xcSZicUia3DeAgO3Us8E+Q==", + "dev": true, + "requires": { + "lodash": "^4.17.10" + } + }, + "eazy-logger": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/eazy-logger/-/eazy-logger-3.1.0.tgz", + "integrity": "sha512-/snsn2JqBtUSSstEl4R0RKjkisGHAhvYj89i7r3ytNUKW12y178KDZwXLXIgwDqLW6E/VRMT9qfld7wvFae8bQ==", + "dev": true, + "requires": { + "tfunk": "^4.0.0" + } + }, + "ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=", + "dev": true + }, + "emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=", + "dev": true + }, + "engine.io": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-3.5.0.tgz", + "integrity": "sha512-21HlvPUKaitDGE4GXNtQ7PLP0Sz4aWLddMPw2VTyFz1FVZqu/kZsJUO8WNpKuE/OCL7nkfRaOui2ZCJloGznGA==", + "dev": true, + "requires": { + "accepts": "~1.3.4", + "base64id": "2.0.0", + "cookie": "~0.4.1", + "debug": "~4.1.0", + "engine.io-parser": "~2.2.0", + "ws": "~7.4.2" + }, + "dependencies": { + "debug": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", + "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + }, + "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 + } + } + }, + "engine.io-client": { + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-3.5.1.tgz", + "integrity": "sha512-oVu9kBkGbcggulyVF0kz6BV3ganqUeqXvD79WOFKa+11oK692w1NyFkuEj4xrkFRpZhn92QOqTk4RQq5LiBXbQ==", + "dev": true, + "requires": { + "component-emitter": "~1.3.0", + "component-inherit": "0.0.3", + "debug": "~3.1.0", + "engine.io-parser": "~2.2.0", + "has-cors": "1.1.0", + "indexof": "0.0.1", + "parseqs": "0.0.6", + "parseuri": "0.0.6", + "ws": "~7.4.2", + "xmlhttprequest-ssl": "~1.5.4", + "yeast": "0.1.2" + } + }, + "engine.io-parser": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-2.2.1.tgz", + "integrity": "sha512-x+dN/fBH8Ro8TFwJ+rkB2AmuVw9Yu2mockR/p3W8f8YtExwFgDvBDi0GWyb4ZLkpahtDGZgtr3zLovanJghPqg==", + "dev": true, + "requires": { + "after": "0.8.2", + "arraybuffer.slice": "~0.0.7", + "base64-arraybuffer": "0.1.4", + "blob": "0.0.5", + "has-binary2": "~1.0.2" + } + }, + "error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "dev": true, + "requires": { + "is-arrayish": "^0.2.1" + } + }, + "escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "dev": true + }, + "escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=", + "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": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true + }, + "estree-walker": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-1.0.1.tgz", + "integrity": "sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg==", + "dev": true + }, + "etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=", + "dev": true + }, + "eventemitter3": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", + "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", + "dev": true + }, + "exec-sh": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/exec-sh/-/exec-sh-0.2.2.tgz", + "integrity": "sha512-FIUCJz1RbuS0FKTdaAafAByGS0CPvU3R0MeHxgtl+djzCc//F8HakL8GzmVNZanasTbTAY/3DRFA0KpVqj/eAw==", + "dev": true, + "requires": { + "merge": "^1.2.0" + } + }, + "fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "finalhandler": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.0.tgz", + "integrity": "sha1-zgtoVbRYU+eRsvzGgARtiCU91/U=", + "dev": true, + "requires": { + "debug": "2.6.9", + "encodeurl": "~1.0.1", + "escape-html": "~1.0.3", + "on-finished": "~2.3.0", + "parseurl": "~1.3.2", + "statuses": "~1.3.1", + "unpipe": "~1.0.0" + }, + "dependencies": { + "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" + } + } + } + }, + "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" + } + }, + "follow-redirects": { + "version": "1.13.3", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.13.3.tgz", + "integrity": "sha512-DUgl6+HDzB0iEptNQEXLx/KhTmDb8tZUHSeLqpnjpknR70H0nC2t9N73BK6fN4hOvJ84pKlIQVQ4k5FFlBedKA==", + "dev": true + }, + "fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=", + "dev": true + }, + "fs-extra": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-3.0.1.tgz", + "integrity": "sha1-N5TzeMWLNC6n27sjCVEJxLO2IpE=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "jsonfile": "^3.0.0", + "universalify": "^0.1.0" + } + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "dev": true + }, + "fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "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-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true + }, + "glob": { + "version": "7.1.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", + "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "requires": { + "is-glob": "^4.0.1" + } + }, + "graceful-fs": { + "version": "4.2.6", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.6.tgz", + "integrity": "sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ==", + "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": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "has-binary2": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-binary2/-/has-binary2-1.0.3.tgz", + "integrity": "sha512-G1LWKhDSvhGeAQ8mPVQlqNcOB2sJdwATtZKl2pDKKHfpf/rYj24lkinxf69blJbnsvtqqNU+L3SL50vzZhXOnw==", + "dev": true, + "requires": { + "isarray": "2.0.1" + } + }, + "has-cors": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-cors/-/has-cors-1.1.0.tgz", + "integrity": "sha1-XkdHk/fqmEPRu5nCPu9J/xJv/zk=", + "dev": true + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + }, + "hosted-git-info": { + "version": "2.8.9", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", + "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", + "dev": true + }, + "http-errors": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.3.tgz", + "integrity": "sha512-ZTTX0MWrsQ2ZAhA1cejAwDLycFsd7I7nVtnkT3Ol0aqodaKW+0CTZDQ1uBv5whptCnc8e8HeRRJxRs0kmm/Qfw==", + "dev": true, + "requires": { + "depd": "~1.1.2", + "inherits": "2.0.4", + "setprototypeof": "1.1.1", + "statuses": ">= 1.5.0 < 2", + "toidentifier": "1.0.0" + }, + "dependencies": { + "statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=", + "dev": true + } + } + }, + "http-proxy": { + "version": "1.18.1", + "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz", + "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==", + "dev": true, + "requires": { + "eventemitter3": "^4.0.0", + "follow-redirects": "^1.0.0", + "requires-port": "^1.0.0" + } + }, + "iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dev": true, + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + }, + "immutable": { + "version": "3.8.2", + "resolved": "https://registry.npmjs.org/immutable/-/immutable-3.8.2.tgz", + "integrity": "sha1-wkOZUUVbs5kT2vKBN28VMOEErfM=", + "dev": true + }, + "indexof": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/indexof/-/indexof-0.0.1.tgz", + "integrity": "sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10=", + "dev": true + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "dev": true, + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", + "dev": true + }, + "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==", + "requires": { + "binary-extensions": "^2.0.0" + } + }, + "is-core-module": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.2.0.tgz", + "integrity": "sha512-XRAfAdyyY5F5cOXn7hYQDqh2Xmii+DEfIcQGxK/uNwMHhIkPWO0g8msXcbzLe+MpGoR951MlqM/2iIlU4vKDdQ==", + "dev": true, + "requires": { + "has": "^1.0.3" + } + }, + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=" + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true + }, + "is-glob": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", + "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", + "requires": { + "is-extglob": "^2.1.1" + } + }, + "is-module": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz", + "integrity": "sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==", + "dev": true + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==" + }, + "is-number-like": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/is-number-like/-/is-number-like-1.0.8.tgz", + "integrity": "sha512-6rZi3ezCyFcn5L71ywzz2bS5b2Igl1En3eTlZlvKjpz1n3IZLAYMbKYAIQgFmEu0GENg92ziU/faEOA/aixjbA==", + "dev": true, + "requires": { + "lodash.isfinite": "^3.3.2" + } + }, + "is-wsl": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", + "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=", + "dev": true + }, + "isarray": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.1.tgz", + "integrity": "sha1-o32U7ZzaLVmGXJ92/llu4fM4dB4=", + "dev": true + }, + "json-parse-better-errors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", + "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", + "dev": true + }, + "jsonfile": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-3.0.1.tgz", + "integrity": "sha1-pezG9l9T9mLEQVx2daAzHQmS7GY=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.6" + } + }, + "limiter": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/limiter/-/limiter-1.1.5.tgz", + "integrity": "sha512-FWWMIEOxz3GwUI4Ts/IvgVy6LPvoMPgjMdQ185nN6psJyBJ4yOpzqm695/h5umdLJg2vW3GR5iG11MAkR2AzJA==", + "dev": true + }, + "localtunnel": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/localtunnel/-/localtunnel-2.0.1.tgz", + "integrity": "sha512-LiaI5wZdz0xFkIQpXbNI62ZnNn8IMsVhwxHmhA+h4vj8R9JG/07bQHWwQlyy7b95/5fVOCHJfIHv+a5XnkvaJA==", + "dev": true, + "requires": { + "axios": "0.21.1", + "debug": "4.3.1", + "openurl": "1.1.1", + "yargs": "16.2.0" + }, + "dependencies": { + "debug": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", + "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", + "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 + }, + "yargs": { + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "dev": true, + "requires": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" + } + } + } + }, + "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.isfinite": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/lodash.isfinite/-/lodash.isfinite-3.3.2.tgz", + "integrity": "sha1-+4m2WpqAKBgz8LdHizpRBPiY67M=", + "dev": true + }, + "madui": { + "version": "file:madlib_modules/MadUI", + "requires": { + "@rollup/plugin-node-resolve": "^11.2.0", + "rollup": "^2.39.1", + "snabbdom": "^3.0.1" + } + }, + "merge": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/merge/-/merge-1.2.1.tgz", + "integrity": "sha512-VjFo4P5Whtj4vsLzsYBu5ayHhoHJ0UqNm7ibvShmbmoz7tGi0vXaoJbGdB+GmDMLUdg8DpQXEIeVDAe8MaABvQ==", + "dev": true + }, + "micromatch": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz", + "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==", + "dev": true, + "requires": { + "braces": "^3.0.1", + "picomatch": "^2.2.3" + } + }, + "mime": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.4.1.tgz", + "integrity": "sha512-KI1+qOZu5DcW6wayYHSzR/tXKCDC5Om4s1z2QJjDULzLcmf3DvzS7oluY4HCTrc+9FiKmWUgeNLg7W3uIQvxtQ==", + "dev": true + }, + "mime-db": { + "version": "1.47.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.47.0.tgz", + "integrity": "sha512-QBmA/G2y+IfeS4oktet3qRZ+P5kPhCKRXxXnQEudYqUaEioAU1/Lq2us3D/t1Jfo4hE9REQPrbB7K5sOczJVIw==", + "dev": true + }, + "mime-types": { + "version": "2.1.30", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.30.tgz", + "integrity": "sha512-crmjA4bLtR8m9qLpHvgxSChT+XoSlZi8J4n/aIdn3z92e/U47Z0V/yl+Wh9W046GgFVAmoNR/fmdbZYcSSIUeg==", + "dev": true, + "requires": { + "mime-db": "1.47.0" + } + }, + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minimist": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", + "dev": true + }, + "mitt": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/mitt/-/mitt-1.2.0.tgz", + "integrity": "sha512-r6lj77KlwqLhIUku9UWYes7KJtsczvolZkzp8hbaDPPaE24OmWl5s539Mytlj22siEQKosZ26qCBgda2PKwoJw==", + "dev": true + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, + "negotiator": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", + "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==", + "dev": true + }, + "normalize-package-data": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", + "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", + "dev": true, + "requires": { + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" + } + }, + "normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==" + }, + "on-finished": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", + "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", + "dev": true, + "requires": { + "ee-first": "1.1.1" + } + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dev": true, + "requires": { + "wrappy": "1" + } + }, + "openurl": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/openurl/-/openurl-1.1.1.tgz", + "integrity": "sha1-OHW0sO96UsFW8NtB1GCduw+Us4c=", + "dev": true + }, + "opn": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/opn/-/opn-5.3.0.tgz", + "integrity": "sha512-bYJHo/LOmoTd+pfiYhfZDnf9zekVJrY+cnS2a5F2x+w5ppvTqObojTP7WiFG+kVZs9Inw+qQ/lw7TroWwhdd2g==", + "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 + }, + "parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", + "dev": true, + "requires": { + "error-ex": "^1.3.1", + "json-parse-better-errors": "^1.0.1" + } + }, + "parseqs": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/parseqs/-/parseqs-0.0.6.tgz", + "integrity": "sha512-jeAGzMDbfSHHA091hr0r31eYfTig+29g3GKKE/PPbEQ65X0lmMwlEoqmhzu0iztID5uJpZsFlUPDP8ThPL7M8w==", + "dev": true + }, + "parseuri": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/parseuri/-/parseuri-0.0.6.tgz", + "integrity": "sha512-AUjen8sAkGgao7UyCX6Ahv0gIK2fABKmYjvP4xmy5JaKvcbTRueIqIPHLAfq30xJddqSE033IOMUSOMCcK3Sow==", + "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 + }, + "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": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "dev": true + }, + "path-parse": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", + "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==", + "dev": true + }, + "picomatch": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.3.tgz", + "integrity": "sha512-KpELjfwcCDUb9PeigTs2mBJzXUPzAuP2oPcA989He8Rte0+YUAjw1JVedDhuTKPkHjSYzMN3npC9luThGYEKdg==" + }, + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "dev": true + }, + "portscanner": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/portscanner/-/portscanner-2.1.1.tgz", + "integrity": "sha1-6rtAnk3iSVD1oqUW01rnaTQ/u5Y=", + "dev": true, + "requires": { + "async": "1.5.2", + "is-number-like": "^1.0.3" + } + }, + "qs": { + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.2.3.tgz", + "integrity": "sha1-HPyyXBCpsrSDBT/zn138kjOQjP4=", + "dev": true + }, + "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 + }, + "raw-body": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.1.tgz", + "integrity": "sha512-9WmIKF6mkvA0SLmA2Knm9+qj89e+j1zqgyn8aXGd7+nAduPoqgI9lO57SAZNn/Byzo5P7JhXTyg9PzaJbH73bA==", + "dev": true, + "requires": { + "bytes": "3.1.0", + "http-errors": "1.7.3", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + } + }, + "read-pkg": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-4.0.1.tgz", + "integrity": "sha1-ljYlN48+HE1IyFhytabsfV0JMjc=", + "dev": true, + "requires": { + "normalize-package-data": "^2.3.2", + "parse-json": "^4.0.0", + "pify": "^3.0.0" + } + }, + "readdirp": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.5.0.tgz", + "integrity": "sha512-cMhu7c/8rdhkHXWsY+osBhfSy0JikwpHK/5+imo+LpeasTF8ouErHrlYkwT0++njiyuDvc7OFY5T3ukvZ8qmFQ==", + "requires": { + "picomatch": "^2.2.1" + } + }, + "require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", + "dev": true + }, + "require-main-filename": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", + "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", + "dev": true + }, + "requires-port": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", + "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=", + "dev": true + }, + "resolve": { + "version": "1.20.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", + "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", + "dev": true, + "requires": { + "is-core-module": "^2.2.0", + "path-parse": "^1.0.6" + } + }, + "resp-modifier": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/resp-modifier/-/resp-modifier-6.0.2.tgz", + "integrity": "sha1-sSTeXE+6/LpUH0j/pzlw9KpFa08=", + "dev": true, + "requires": { + "debug": "^2.2.0", + "minimatch": "^3.0.2" + }, + "dependencies": { + "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" + } + } + } + }, + "rollup": { + "version": "2.79.1", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.79.1.tgz", + "integrity": "sha512-uKxbd0IhMZOhjAiD5oAFp7BqvkA4Dv47qpOCtaNvng4HBwdbWtdOh8f5nZNuk2rp51PMGk3bzfWu5oayNEuYnw==", + "dev": true, + "requires": { + "fsevents": "~2.3.2" + } + }, + "rx": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/rx/-/rx-4.1.0.tgz", + "integrity": "sha1-pfE/957zt0D+MKqAP7CfmIBdR4I=", + "dev": true + }, + "rxjs": { + "version": "5.5.12", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-5.5.12.tgz", + "integrity": "sha512-xx2itnL5sBbqeeiVgNPVuQQ1nC8Jp2WfNJhXWHmElW9YmrpS9UVnNzhP3EH3HFqexO5Tlp8GhYY+WEcqcVMvGw==", + "dev": true, + "requires": { + "symbol-observable": "1.0.1" + } + }, + "safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "dev": true + }, + "sass": { + "version": "1.32.11", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.32.11.tgz", + "integrity": "sha512-O9tRcob/fegUVSIV1ihLLZcftIOh0AF1VpKgusUfLqnb2jQ0GLDwI5ivv1FYWivGv8eZ/AwntTyTzjcHu0c/qw==", + "requires": { + "chokidar": ">=3.0.0 <4.0.0" + } + }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true + }, + "send": { + "version": "0.16.2", + "resolved": "https://registry.npmjs.org/send/-/send-0.16.2.tgz", + "integrity": "sha512-E64YFPUssFHEFBvpbbjr44NCLtI1AohxQ8ZSiJjQLskAdKuriYEP6VyGEsRDH8ScozGpkaX1BGvhanqCwkcEZw==", + "dev": true, + "requires": { + "debug": "2.6.9", + "depd": "~1.1.2", + "destroy": "~1.0.4", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "~1.6.2", + "mime": "1.4.1", + "ms": "2.0.0", + "on-finished": "~2.3.0", + "range-parser": "~1.2.0", + "statuses": "~1.4.0" + }, + "dependencies": { + "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" + } + }, + "http-errors": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", + "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=", + "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": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", + "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 + }, + "statuses": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz", + "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew==", + "dev": true + } + } + }, + "serve-index": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz", + "integrity": "sha1-03aNabHn2C5c4FD/9bRTvqEqkjk=", + "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": { + "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" + } + }, + "http-errors": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", + "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=", + "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": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", + "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 + }, + "statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=", + "dev": true + } + } + }, + "serve-static": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.13.2.tgz", + "integrity": "sha512-p/tdJrO4U387R9oMjb1oj7qSMaMfmOyd4j9hOFoxZe2baQszgHcSWjuya/CiT5kgZZKRudHNOA0pYXOl8rQ5nw==", + "dev": true, + "requires": { + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.2", + "send": "0.16.2" + } + }, + "server-destroy": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/server-destroy/-/server-destroy-1.0.1.tgz", + "integrity": "sha1-8Tv5KOQrnD55OD5hzDmYtdFObN0=", + "dev": true + }, + "set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", + "dev": true + }, + "setprototypeof": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", + "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==", + "dev": true + }, + "snabbdom": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/snabbdom/-/snabbdom-3.6.2.tgz", + "integrity": "sha512-ig5qOnCDbugFntKi6c7Xlib8bA6xiJVk8O+WdFrV3wxbMqeHO0hXFQC4nAhPVWfZfi8255lcZkNhtIBINCc4+Q==" + }, + "socket.io": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-2.4.0.tgz", + "integrity": "sha512-9UPJ1UTvKayuQfVv2IQ3k7tCQC/fboDyIK62i99dAQIyHKaBsNdTpwHLgKJ6guRWxRtC9H+138UwpaGuQO9uWQ==", + "dev": true, + "requires": { + "debug": "~4.1.0", + "engine.io": "~3.5.0", + "has-binary2": "~1.0.2", + "socket.io-adapter": "~1.1.0", + "socket.io-client": "2.4.0", + "socket.io-parser": "~3.4.0" + }, + "dependencies": { + "component-emitter": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz", + "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=", + "dev": true + }, + "debug": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", + "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + }, + "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 + }, + "socket.io-parser": { + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-3.4.1.tgz", + "integrity": "sha512-11hMgzL+WCLWf1uFtHSNvliI++tcRUWdoeYuwIl+Axvwy9z2gQM+7nJyN3STj1tLj5JyIUH8/gpDGxzAlDdi0A==", + "dev": true, + "requires": { + "component-emitter": "1.2.1", + "debug": "~4.1.0", + "isarray": "2.0.1" + } + } + } + }, + "socket.io-adapter": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-1.1.2.tgz", + "integrity": "sha512-WzZRUj1kUjrTIrUKpZLEzFZ1OLj5FwLlAFQs9kuZJzJi5DKdU7FsWc36SNmA8iDOtwBQyT8FkrriRM8vXLYz8g==", + "dev": true + }, + "socket.io-client": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-2.4.0.tgz", + "integrity": "sha512-M6xhnKQHuuZd4Ba9vltCLT9oa+YvTsP8j9NcEiLElfIg8KeYPyhWOes6x4t+LTAC8enQbE/995AdTem2uNyKKQ==", + "dev": true, + "requires": { + "backo2": "1.0.2", + "component-bind": "1.0.0", + "component-emitter": "~1.3.0", + "debug": "~3.1.0", + "engine.io-client": "~3.5.0", + "has-binary2": "~1.0.2", + "indexof": "0.0.1", + "parseqs": "0.0.6", + "parseuri": "0.0.6", + "socket.io-parser": "~3.3.0", + "to-array": "0.1.4" + } + }, + "socket.io-parser": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-3.3.2.tgz", + "integrity": "sha512-FJvDBuOALxdCI9qwRrO/Rfp9yfndRtc1jSgVgV8FDraihmSP/MLGD5PEuJrNfjALvcQ+vMDM/33AWOYP/JSjDg==", + "dev": true, + "requires": { + "component-emitter": "~1.3.0", + "debug": "~3.1.0", + "isarray": "2.0.1" + } + }, + "spawn-command": { + "version": "0.0.2-1", + "resolved": "https://registry.npmjs.org/spawn-command/-/spawn-command-0.0.2-1.tgz", + "integrity": "sha1-YvXpRmmBwbeW3Fkpk34RycaSG9A=", + "dev": true + }, + "spdx-correct": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz", + "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==", + "dev": true, + "requires": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "spdx-exceptions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", + "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", + "dev": true + }, + "spdx-expression-parse": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", + "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", + "dev": true, + "requires": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "spdx-license-ids": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.7.tgz", + "integrity": "sha512-U+MTEOO0AiDzxwFvoa4JVnMV6mZlJKk2sBLt90s7G0Gd0Mlknc7kxEn3nuDPNZRta7O2uy8oLcZLVT+4sqNZHQ==", + "dev": true + }, + "statuses": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.3.1.tgz", + "integrity": "sha1-+vUbnrdKrvOzrPStX2Gr8ky3uT4=", + "dev": true + }, + "stream-throttle": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/stream-throttle/-/stream-throttle-0.1.3.tgz", + "integrity": "sha1-rdV8jXzHOoFjDTHNVdOWHPr7qcM=", + "dev": true, + "requires": { + "commander": "^2.2.0", + "limiter": "^1.0.5" + } + }, + "string-width": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz", + "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==", + "dev": true, + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "dev": true + }, + "strip-ansi": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "dev": true, + "requires": { + "ansi-regex": "^5.0.0" + } + } + } + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + }, + "symbol-observable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-1.0.1.tgz", + "integrity": "sha1-g0D8RwLDEi310iKI+IKD9RPT/dQ=", + "dev": true + }, + "tfunk": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/tfunk/-/tfunk-4.0.0.tgz", + "integrity": "sha512-eJQ0dGfDIzWNiFNYFVjJ+Ezl/GmwHaFTBTjrtqNPW0S7cuVDBrZrmzUz6VkMeCR4DZFqhd4YtLwsw3i2wYHswQ==", + "dev": true, + "requires": { + "chalk": "^1.1.3", + "dlv": "^1.1.3" + } + }, + "to-array": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/to-array/-/to-array-0.1.4.tgz", + "integrity": "sha1-F+bBH3PdTz10zaek/zI46a2b+JA=", + "dev": true + }, + "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==", + "requires": { + "is-number": "^7.0.0" + } + }, + "toidentifier": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", + "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==", + "dev": true + }, + "tree-kill": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz", + "integrity": "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==", + "dev": true + }, + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + }, + "ua-parser-js": { + "version": "0.7.28", + "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.28.tgz", + "integrity": "sha512-6Gurc1n//gjp9eQNXjD9O3M/sMwVtN5S8Lv9bvOYBfKfDNiIIhqiyi01vMBO45u4zkDE420w/e0se7Vs+sIg+g==", + "dev": true + }, + "undici-types": { + "version": "5.26.5", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", + "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==", + "dev": true + }, + "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 + }, + "unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=", + "dev": true + }, + "utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=", + "dev": true + }, + "validate-npm-package-license": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", + "dev": true, + "requires": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, + "watch": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/watch/-/watch-1.0.2.tgz", + "integrity": "sha1-NApxe952Vyb6CqB9ch4BR6VR3ww=", + "dev": true, + "requires": { + "exec-sh": "^0.2.0", + "minimist": "^1.2.0" + } + }, + "which-module": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", + "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", + "dev": true + }, + "wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "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" + } + }, + "strip-ansi": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "dev": true, + "requires": { + "ansi-regex": "^5.0.0" + } + } + } + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "dev": true + }, + "ws": { + "version": "7.4.5", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.5.tgz", + "integrity": "sha512-xzyu3hFvomRfXKH8vOFMU3OguG6oOvhXMo3xsGy3xWExqaM2dxBbVxuD99O7m3ZUFMvvscsZDqxfgMaRr/Nr1g==", + "dev": true, + "requires": {} + }, + "xmlhttprequest-ssl": { + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.5.5.tgz", + "integrity": "sha1-wodrBhaKrcQOV9l+gRkayPQ5iz4=", + "dev": true + }, + "y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true + }, + "yargs": { + "version": "15.4.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", + "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", + "dev": true, + "requires": { + "cliui": "^6.0.0", + "decamelize": "^1.2.0", + "find-up": "^4.1.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^4.2.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^18.1.2" + }, + "dependencies": { + "ansi-regex": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "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" + } + }, + "cliui": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", + "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", + "dev": true, + "requires": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^6.2.0" + } + }, + "strip-ansi": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "dev": true, + "requires": { + "ansi-regex": "^5.0.0" + } + }, + "wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "dev": true, + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + } + }, + "y18n": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", + "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", + "dev": true + }, + "yargs-parser": { + "version": "18.1.3", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", + "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", + "dev": true, + "requires": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + } + } + } + }, + "yargs-parser": { + "version": "20.2.7", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.7.tgz", + "integrity": "sha512-FiNkvbeHzB/syOjIUxFDCnhSfzAL8R5vs40MgLFBorXACCOAEaWu0gRZl14vG8MR9AOJIZbmkjhusqBYZ3HTHw==", + "dev": true + }, + "yeast": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/yeast/-/yeast-0.1.2.tgz", + "integrity": "sha1-AI4G2AlDIMNy28L47XagymyKxBk=", + "dev": true + } + } +} diff --git a/madlib_modules/MadMarkdownRenderer/package.json b/madlib_modules/MadMarkdownRenderer/package.json new file mode 100644 index 0000000..e8bfa07 --- /dev/null +++ b/madlib_modules/MadMarkdownRenderer/package.json @@ -0,0 +1,33 @@ +{ + "name": "madmarkdown-renderer", + "version": "0.0.1", + "description": "", + "main": "index.js", + "dependencies": { + "sass": "^1.32.6" + }, + "devDependencies": { + "browser-sync": "^2.26.14", + "concurrently": "^5.3.0", + "copy-and-watch": "^0.1.5", + "watch": "^1.0.2" + }, + "scripts": { + "info": "madlib --version", + "build:bundle": "madlib compile -i src/Example.mad --target browser --bundle -o build/bundle.js", + "build:sass": "sass src/styles/main.scss build/styles/main.css", + "build:html": "copy-and-watch src/**/*.{html,png} build/", + "dev": "concurrently \"browser-sync start --server build --files build/**\" \"sass --watch src/styles/main.scss build/styles/main.css\" \"copy-and-watch --watch src/**/*.{html,png} build/\" \"copy-and-watch --watch src/assets/* build/assets/\" \"watch 'npm run build:bundle' src\"", + "test": "echo \"Error: no test specified\" && exit 1" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/madlib-lang/madui-examples.git" + }, + "author": "", + "license": "ISC", + "bugs": { + "url": "https://github.com/madlib-lang/madui-examples/issues" + }, + "homepage": "https://github.com/madlib-lang/madui-examples#readme" +} diff --git a/madlib_modules/MadMarkdownRenderer/src/Config.mad b/madlib_modules/MadMarkdownRenderer/src/Config.mad new file mode 100644 index 0000000..4ecfa0f --- /dev/null +++ b/madlib_modules/MadMarkdownRenderer/src/Config.mad @@ -0,0 +1,22 @@ +import type { Element } from "MadUI" + +import { a, code, href, text } from "MadUI" + + + +export alias Config a = { + codeView :: String -> String -> Element a, + linkView :: String -> String -> Element a, +} + +defaultConfig :: Config a +export defaultConfig = { + linkView: (name, url) => {name}, + codeView: (_, content) => {content}, +} + +setLinkView :: (String -> String -> Element a) -> Config a -> Config a +export setLinkView = (linkView, config) => ({ ...config, linkView }) + +setCodeView :: (String -> String -> Element a) -> Config a -> Config a +export setCodeView = (codeView, config) => ({ ...config, codeView }) diff --git a/madlib_modules/MadMarkdownRenderer/src/Example.mad b/madlib_modules/MadMarkdownRenderer/src/Example.mad new file mode 100644 index 0000000..9160d25 --- /dev/null +++ b/madlib_modules/MadMarkdownRenderer/src/Example.mad @@ -0,0 +1,30 @@ +import { render } from "MadUI" +import { renderMarkdown } from "./Main" + +markdown = ` +# Title +### subtitle + +This is a **paragraph** +and the *next* line + +> blockquote! +**hehe** + +\`\`\` +Some code! +\`\`\` + + - list item + - **list** \`item\` + - list *item* + - [link](https://www.google.com) + + +![madlib logo](./madlib-logo.png) + +` + +main = () => { + render((_) => renderMarkdown(markdown), {}, "app") +} diff --git a/madlib_modules/MadMarkdownRenderer/src/Main.mad b/madlib_modules/MadMarkdownRenderer/src/Main.mad new file mode 100644 index 0000000..8f66636 --- /dev/null +++ b/madlib_modules/MadMarkdownRenderer/src/Main.mad @@ -0,0 +1,174 @@ +import type { Block, Content, ContentPart, Markdown } from "MadMarkdownParser" +import type { Element } from "MadUI" + +import type { Config } from "@/Config" + +import { Left, Right } from "Either" +import { + Blockquote, + Bold, + Code, + H1, + H2, + H3, + H4, + H5, + H6, + Image, + InlineCode, + Italic, + LineReturn, + Link, + Paragraph, + Text, + UnorderedList, + parseMarkdown, +} from "MadMarkdownParser" +import { + altAttribute, + blockquote, + br, + className, + div, + h1, + h2, + h3, + h4, + h5, + h6, + i, + img, + li, + p, + span, + src, + strong, + text, + ul, +} from "MadUI" + +import { defaultConfig, setCodeView, setLinkView } from "@/Config" + + + +doRender :: Config a -> Markdown -> Element a +doRender = (config, markdown) => +
    + {...map(renderBlock(config), markdown)} +
    + +renderBlock :: Config a -> Block -> Element a +renderBlock = (config) => where { + H1(content) => +

    + {...renderContent(config, content)} +

    + + H2(content) => +

    + {...renderContent(config, content)} +

    + + H3(content) => +

    + {...renderContent(config, content)} +

    + + H4(content) => +

    + {...renderContent(config, content)} +

    + + H5(content) => +
    + {...renderContent(config, content)} +
    + + H6(content) => +
    + {...renderContent(config, content)} +
    + + Paragraph(content) => +

    + {...renderContent(config, content)} +

    + + Blockquote(content) => +
    + {...renderContent(config, content)} +
    + + Code(lang, content) => + config.codeView(lang, content) + + UnorderedList(items) => +
      + {...map((item) =>
    • {...renderContent(config, item)}
    • , items)} +
    +} + +renderContentPart :: Config a -> ContentPart -> Element a +renderContentPart = (config) => where { + Text(t) => + + {t} + + + Bold(t) => + + {t} + + + Italic(t) => + + {t} + + + InlineCode(t) => + + {t} + + + Link(t, l) => + config.linkView(t, l) + + Image(alt_, s) => + + + LineReturn => +
    +} + +renderContent :: Config a -> Content -> List (Element a) +renderContent = (config) => map(renderContentPart(config)) + + +renderMarkdownWithConfig :: Config a -> String -> Element a +export renderMarkdownWithConfig = (config) => pipe( + parseMarkdown, + where { + Right(ast) => + doRender(config, ast) + + Left(_) => +

    + Error processing the given markdown +

    + }, +) + +/** + * Returns an Element from a given markdown String + * + * @since 0.0.1 + * @example + * renderMarkdown(`# Hello world`) + */ +renderMarkdown :: String -> Element a +export renderMarkdown = renderMarkdownWithConfig(defaultConfig) + +export defaultConfig +export setCodeView +export setLinkView +export type Config diff --git a/madlib_modules/MadMarkdownRenderer/src/index.html b/madlib_modules/MadMarkdownRenderer/src/index.html new file mode 100644 index 0000000..9b16492 --- /dev/null +++ b/madlib_modules/MadMarkdownRenderer/src/index.html @@ -0,0 +1,12 @@ + + + + Madlib Markdown Renderer + + + + +
    + + + \ No newline at end of file diff --git a/madlib_modules/MadMarkdownRenderer/src/madlib-logo.png b/madlib_modules/MadMarkdownRenderer/src/madlib-logo.png new file mode 100644 index 0000000000000000000000000000000000000000..1e7535ad24db7ca7bf5c0190c58702a3e4323120 GIT binary patch literal 12052 zcmeHttF zJ@b41ig&H|`7mG3T64~QU+3KW+IycJqoF4MjEIT|3k&O+qJpdz78Z8$e?LMT%*gYV zqFgL29;BkIw2p7y-+Z*!R%>eH;c~-6E}3)#v%MOws=T>3ZW*(^2#z-CaN>J!+;rw- zny}x5C5i9z2yG{U2bONfgE)lA5oeO!{^I0>!Rt0f8WsO8yRonsNEr;ULajs1v9VII z!||{b@Chlf7%2a5@c-k2ToqP|VPRzz+@=+?!vHtOTk>F=y1F`bb#?7aW&Ciw9siL86d#*4k@7n3Q^mUz5hdx+-Ch4GDBWdhZ{g!e(eg$4UUo zhihHk-2`Z5zV&__^Dd|&P3~gQ!@a~93FTJSt`B) z0%0erRb8@*-brftI_I^r;d*q#jkO;8O*jh%KsmEbdbkkGdw0-o8wQ0we-hgEzCMOH zN(SL2ox=|_BA~#15=to@Bf{XH8GL)Sv68ST3dOA6lLiB1%ip39btVYS&ULtk&d%1> zmj#K#&+nmF3a>SDeQC;k-&b%0$TNy66u~xr1yvz-tDZNYooYQ2fa^=Xwjx0Axnmlb zL5+U2O|9@uP#65BV_|0R?B>#C=fYAcefRp&2=3@Kdy>J|KiO$#C?v z6ET2lPu%Q*{mQNBy)o25g8zK>z*IGLK-Ut`{0LdOyOPGBr+7GOg79*2anYRoU=|LD zEe4G7nsproB`z_mm(QS3PBZVi?(o*N?2+>$yrzhz%1TqIM!cI?>il#6ajNCdEzU?m zRc*vM$z%?A&e5iuX3XVO+^j}#Xlv@60)2S{)yIDC-^#NO`ozvdLHE?G*@|R~4Ij34 zh#s}v&uv}U$A0(3SfI9YZ(_HhRN#iM*$TM4^AT)w;RLGD+gJBb;AbjIrwu*(76FJc zII&xba;u{i8n_nV*VSFDD}`_#Ulp^9vxe3mz7&-Da^||S=#b7ByGCpg>A2|5((x;h9_;g#GkU}9ol(?FajVkMExzf`7FRe(ml;TfU zMgs<*t)+#CK&}nQ1W`MuLMg5E;S3_a(#yhHYY}q&@7zgO_pQ)4Ru)#$5>blU@83O+ zIX{r+WCKUXl47S40;<}&8FIZGDQ-s=VO3VFI~h)6GW^wK9!y3@acsi*YGd2(4T~D7 zyEMd6nVFfSefF3Y-x#0v$hw=i*=A%5_P3)JvvuH|ox*pqlO(FRicZ+QI2=H-Cu5b1 zVc2Q?cyXWCyi8h*d1Oi}lCW`~uzacNSPE#ojFc3id{P@kLCNUzYU&`fpEp&BQtbl|Kah+l@!nlDd>a4|P2a3w*{Sm^Tn1qyd~&8jlGBnAtw$6KePI zL6dC?g!D#-cG}l*bi`>4g4M{hUuq?$ZIs29z4pCEA$a2~_`@G@>EI=-%9HKOk^t;j zocFzceH{G}f*oyDDO7-zskzN#?QJ3H>g-g&)Exwtkd!nG7XI%~i?gfcZ^d)sv3p?~ z5LH7yuUA~J42TH5Odd4nC=)mo&{`TC}xiYIxZBGdi!o)cT0-W&_J zJHQyzI6;&+q`g+ZYVOL=H6TFw(EEC%=k0-aM=eTHQnK|Ix!m#H%_R(Qm+sH1cms%E zUpkbKD<-bi#2aIl7$zKeTX##R3${U>`*YSM&pbLY(wCqi#(;ds%0#34t-hzftmq&vCwok~^{P-CrVA%JQba~@6rpG@Z z;E6j^$}uiiYNiU~MtZ z{jI1LRdKAUwgw)w1g616$)9|cTbMyEe-aGd(Jk2B5{7<^Go)g~ae7CfcgQA^>L-vo zBN6$?i7=&E^sQQX+6>9FO(iSS1`OB>er^DCbaZ%_RF-(&92`tkj_>Z;m2Zi}fK{7Z z6)~$`n?EI(_dQ!YDY#l}@iHMpN)=AZX|_%v^1wZN`6)b|4mpFC7SExcXc0MP z3qJykyy4U`eVLXOHDJtZdkawZhP~v(wx~P7e`=H)x*jtvXDqg5ZCd{U_e~{>^ZAMO-I$`Xur)CdB+0v2-D_9kn6s9 zDN>DAtq*f_XQweOZPjVywA0yW$J{?Cs7cDLe!nk?Ug{5q-5Ix^EoJ`+-~M+(OH9C) zmMY9$ZkLN;XZi>6qVE1a=(wQ+k9!Mddt&+Gx7{hB-pjbHJZcRYUTkKMk9XSr>t3tn`?#CO_}F%@kv)>$YhArw zMGD&yfG<_-Fh{peEbxkhwa$_nI$Hg;m15q$ImkumBVS$Kze)buh#FhY7q=4~f`252 zj)zrHmrL=@=+6-}25IG|==OvA```$&!I#xj(_a>fT;`28FVJW5}PRB>tqqh&c7u zg5H$dGs_n~+0!95N$Ev51*Q3(bd&@#ii(=#af8Lq$SK&r^RA)VUQZdKW&FcV@M=Y= z2J*moOJod&X;uz7=l(Ta$XcPO-j5Vq!@m*XU`2@5$42PRdJoljCza%v3dsJ&g`nf6 zEjPJ#pFq~cO&W?6cgv0-LC-6Elh~{dfsqj2Ge55r_eq;qfRQ>aY1V`1 zJFYr|)sWG-U<`yfBj>#&oNEpZD8MMuDstv7Bsy{u+Bwekye?slpv@u2tUFls2LJ40 z`CQYq?NJ=1k_{;M`eaZbzcIqP?`kf3`k-qeP)j%C4R?(}I+E8@1iv2F>4dOad@^S5 z83yChn+NAA_kc=^k})E)=Q$ZeL3xDL>u&gd1q}`+Jwe@$^tX~5U?&UMn}a?JC0br_ zS7FQqG*1Rk7AY-F2ffW-%GIxYE*GeNoql#&n{;w{xE7r6cBkf>RJFQWHQ%x8J!9LT z`7)a>TScCVl#X80S&Xw@2B-gpG6sC#&Pomf#{SgnJL-uiP0ZMloN96vPqa_S-mcyk zvm4WD9j9I#L)N8&Z<<8Bu6edJ$(Nu|C%n_2{aOn^+14JWJ-8XG4Qsb#<%eM%BskCEb6@ z_uF~XmA}mg{*aWMv$YGdwe%Ft4}Q2Gzjy0hDzTvmFD1U}ez-^8{Czaem6Vwz>~6r1 zkNDw7mAvv9!zdnih5e8*4Y;J^%WC#_A~=0!L~LF;G$*n`(r8xpI^ekuWqWtG`tS^S z5_`D722W?$PKNw$4CX}!hAOvLK4VyW{%5tLk{~)6I6zssFgxJ*;NbJR@FAQ#DJiL! ztzk(_a5?PFqN*XU@N6vb$rGpH{^SXPU!AcCKmVcE7=1)cc?c$jP-}f#h7$&o253PDq^MN$8y*7WTBrDdh;F9%cqfE=N_-AF_>5Ic= zXJ#)tEb7`XGjw!&!bFi>f9T3^2is5(fVaMmuCDYx;hDG5fPhgW?VKdcXd5_c`Ni|` zUVo0v++#BDL)}hTWi6MUmq|!qAXEduu~_RvB=i_@-iv8b0~I1P#ExyMZcV=-(FO0-y3TcYEPf+$+A zJ)PM}ul{DU!S`72N$w?%E`g&zpGJH(^_wM7YhQSZRryv2y7|)S_|yW!88KuUV{B9I z_s6#EE~-QSVEl^R`tDbuBb1y54G_epwJAuHx3nul4V#bb{`JXLG5f`h#NAc@#u3IT zm`d^)m0a~&X>nQmqwEVPA#?DL5cdGU7VgaX!l4Xyh3h)3U%0692*s zHJ=sha?L4Yc#h-9i?<9oSobm@@UJq)ieRp^5T%Y*;D;DJjF*}zIET0n6uiD_Y;c*C zfeXR_R*bwzb-k*Wd41+Av!DVve-+hn5@_Qb^8ns*7>w=zg+Ha)e>u6^5M*1Ea7AA~ zX3jqfYt%70A^d^ggY7(5w|c!|S+8NH7igkgj=)oi8TVc(%oVjDs>ET^)vY}IgQ?}6 z{!+Y|ijgO1ercZm{n# z%3Dez3wLH7kD|2Verh)Q%!2F=mHOy@3HOP1-*Ib4hxP+uK=3_uUrA0=TtWgwY&9a+ z*d-?@k$!)5d|c$bdwi@ZdWDgm>4b<`LM$2074!h^%xW3sx8(nPHNZfnvr*S+Wv$bc z@xDnaYP^N9XvI>O{Hte{wURQB=jdrDdj-!^|J!o!CPFcyFW>yX`r48zhW<_CMJv_P zqG2&5@>;`jRC4i6uSoEm|I%xEHo6&*RBvQ$;%BKSB(h*U!ATF@^PDn^jlCspd$hn@ zI#`X<>uQO{;IS)^qE7HO>B`8t4=`ZiFanEr_C!le(`}a!C2T(_Qp1-+f{b$Bcj!wy z%e&huQpM7EG;HzD_vs8p%v?~Rsp;FsIC>>CZg=Ji<_5an(%H~q^h+(ZP58D%SEtsV^zpiIo;!N zlSL$u9X_Gkpl}Da$5T#l*Vxv2H&b#GI?(XeW~ohGliUWxLlIZzfU!tH;9wDnMyt?; zSv>iKSZ{4)GbG$8Q?K;qqsT{DF5u>|q04uUXjv0wP5Ok3$4WyL+B(O%EctkqcXmVp z)64;xasOFoV5-`oEw?7asesZTvpo+{w2)LyQ}m!^ubngMJm;C*%{mxFWYb+#`~VSIaQ!+Pr8+Zpc-2hczpQ=T zLm^i*j$3o?S0z=>f}@>O54dm|=i0M%L|8Y~RHEVypGR_5?nkJ>i7r%AMXg4|25V8i z;!IU*>ChyLzkB{*8`T*D7;&XA_b>ZL-(u)|YQETVb{C+`HGGcT8%U3W*pEfIl z&QNNxZ!!dZ77G|!k12f0!3}UrZv9Ya&IwmMo5Tg;t zcJ#C_pPtSyr?C<-5CiJ-f}CKLr_yPRWsnBUjCL^%7@OYZ$>HN=1FQaN{2GMQIc4GG zE=CNkoF9aF!}FqNi1O!gzwrh+9)3BLb21Dy6VzGfu%;0rt2k2HI)$>r(|0D4s!C<4Fk zwK~13LCcL}-6Dk1D$!APep*dAZM*CgrG;cg^W^V^T0QS4nzY56Lu(}ge%}57_4Kmj}#s6B>4B z+i-n#wSe}H>MufxcE2@Dr2wk^clCk7Xp*-i7`y|Q&Qx{>-$CxD(vb?A7Z-YWTPRf3 zg?Sl6x%z@xton)g!~LBYbvCA#ZmKs5ZFq{-XMZ!v4HSdHx5#rkj2Topv{y{w~-H;b}+*ywGhtOYln8tr39}{ zY(r&vfqeE=Pqrj6x0}QzR<}&ph@+nK`w^0v+7XiPrmffbJ~wC4F5c`(9S&P^oeOS< z9u6Ll6%N}SHh(N--YYD2{)hzL5GXT!cE8B>l%^fomyL0k!OZA?{uVtQb@5_WP}k(U z3wWC6AqM=NiPK8DYdy>JqcA7b}mMBU&KfDP%sn*+)I#S|3*b4tpV& zlylldZ051>q7G2ey3YLkfWA>)1eo#aLAxWuI{RPD&g+$A&7pGd*Htx@Nuir=`bog? z_}Rql5><5WKWJl`aLpvrlqF`(0R6o&L{{z*jRW-#4t0xkL6k!ikK>=%k@ds7qJR0B zDlZXox-}V&q6YsgtMZEoXewJWTRG$yh87FX+~RD*%f;5!-K9fzA_V|uUm0A+iQE@0&}Mw#jk`D4eZ^VXTu zN&Bs$5-XKB!E{i~6@#xBfLKjJYZPZVr7N6};@QXKO50?9g?6bK;^`^_`=YD+6XTVqW+;6 zS{{UlF4tRAcB9b(Z?I1pmDQKG7jrC0|I{4%vvO73WXTS)X*|pwVP#q+aVU~OrZ0UP z!Rsx15-1_7tGhYTE<-bl2R z`{|!?B^%l~_K#aR0Yyd7Tg7-^nXB=`aShwpSBsxp0-L$cdtWeCZ1ZbPOvGge;{J(S zvv5mr_$69C!135khz7VA+U%m`WVodxHl^(XyC{LX9kFgCt3mQBAa?JX%80;u*?G4AOKx0{d`r)`rhfkA6!evxJ8G!w2qw1IxKf z^Nm6vIIg0Y%6Aj~xh7g|m+DG^(F-g5?g!%()i{4=5w zGQi-)qnQq6P?fEMm8qA9ygv!f;b0 z5tQLefnMXjNHJ-c*!3`MyVVYt*c$o1^e2En+=>c+Kjnf@W(K$v`n;xI=5KC^(^6Su zSs16xS=V{wY*kJ6{A|g+5q@`TGsA(amPy3)UKVT4C%Y81ch$M|IYpo<8*P~TeGHf|kPtV#gMB7OUtXxI5(W#|pXjA;N;NFRv`;NJq(od(p{4F)PS zYf!OTHrgG}BmhbaqN9;>R@NU`Lm}H*Hx)yYWkTs+guszq;vkS5^=4#^lO-!Ya=Oj5 zF1HK>pr{5Rj@UPk_s2xTg?dvTD~pN1Dqfm+=*q+w%Pw&|-+pa5&ZAr_?Us^=EGV1P zT_sEtyx9@s5QFd^!vMMQf&skUx~sk8=4Ph2*J~ACMs$VD$I*cO58E zJ*Nm$)(DxvLc!dGvrN*R@})@!OgB{W!1z(%RJNtDWwiG`r7nG%r!q*BsY#%6I(~ll z3X{7ymRc10h$O4T(Bfg%X}8T7k&i@FK089&FO9E3~;lHezU6qy5RElY6A^t z9PoNHYLf%|uHn9==r{~u-m%qtzQZG^EJ-n92{R*%np9DZ%;lJmSycV>(mndzdZ>{o z>`h;G>Ta80Fk2)tn(o`T@i*jNUx?i}@?pVB*?+QGv~(!_Puf-?WPyFicL@%D7I4$J zmX%F8t+i*$ZqJSr=e)RSM+DE>#4C~wENP*#!cHX{RC~0=Prw(d`ztI!+?lvBplZ5~ z4qAIf@!}TzG_77{B!SI;(Knr}CElNRev=iE({A|u+q~x}thyFe=CI#h&^(*Lz6@En zjB%ZhClmG;r`tQM;JCJXIu5h*_jq>l?di#CP#ic}LEys&B-M?0y3L3@^WjIAleT7O zZfD07+|O{+$+oisVX3(Trhyk5%aj&Qi8E1SzfYnycgA3=hd?_`>J;3ug0)nO?BeNd zb=k%-Kq6G6i=;}qds4~Y!+6%kknhQA0s+IKM&AIHUpeGqnp3JlQE0!eJVGjRh(l*luD}1<7~jhzsU4Kwtip&PM!rtJ!I(tF8Dy|=6gGxs0TgG z)pJdKk2af)6&&DkG}+BvK~_sr;)U$4ddUTM_}n{HmqD4w946_PqWSjQZan7MX2wq_ z3hU0au7k9DadA0LZJ1`O%*Y2Fn@%c-*t)6#)HKwSOQGKx>uJ-w>J_6#0G3vfse+~f zA(6`#HHIdUQ;a$K#l7q%do~NH`qJV<5Mh29KbeJt;yK6C8rYacfY?H_Gdj}Q5-ueQ z?+CmKnvYC6IZ_+Bx7_$p|0TE4XNwTNUSb;NAX&#n&}7L0)f0M0wQ41-?IkBL}TnF{#_9B4hy%OxKuv z-O)pB?f<6hFae)}-M?$W&nOCy9x%vef~X(p5HCE$+%*jU{j~d^)cF49@_3ukHr<3L zvwVhQjDN4e4LA}Wa(`Q?dR}kLQ-|gfU=2|T@aIwaOK;W{Xz@TOd@OQD58x6(0G#riNz$pk%9DkZvu?A!B}Wl-Z;n5sHmv&^76fQ$`{SlF(DNgOB{o`W~{!+ z;&Pfgx=n^P#!pUZlH~OW%~k5ky(M2e=;m&-+I@{%U`30_vN;OPS4vyIz3jy%!MfmR zaM2PeoK&4r5%3(U{#(M?DnB0!&BC_E8_+z6-E5@%WM^cIs zRP)8(YsR;eyc%Yid^bPQGY9;z&R#|Cw5BsW&feUiaTmaXO?ztWDf?Z0S%cf_<*Br* z*8nmnZTH$A-dujk{KCP)2*r`x&(wb5rtpJd=gYd%?E`43yGAbLHS_uX?g81-dt7B`XPjok^O7ARa&=F6RY4)(h;ySP(!}(2btlrP=E^(~yo0Mv&Gv`^o@cLX#H>-NQDsGRY z_<;33_381JFM{CA`Z)=f{LNu|}|Zaj;k({ommK%LO^=#%$rkLrfyZ9O?J& R!fYp&qMVv+?FaMl{{eAw0R#X5 literal 0 HcmV?d00001 diff --git a/madlib_modules/MadMarkdownRenderer/src/styles/main.scss b/madlib_modules/MadMarkdownRenderer/src/styles/main.scss new file mode 100644 index 0000000..e69de29 diff --git a/madlib_modules/MadMarkdownRenderer/version.lock b/madlib_modules/MadMarkdownRenderer/version.lock new file mode 100644 index 0000000..115b037 --- /dev/null +++ b/madlib_modules/MadMarkdownRenderer/version.lock @@ -0,0 +1,30 @@ +{ + "buildHash": "94be44f7f23efa0d17b007a74debea6d", + "jsApi": { + "apiInstances": [], + "apiAliases": {}, + "apiInterfaces": {}, + "apiNames": { + "renderMarkdownWithConfig": "{ codeView :: String -> String -> Element a, linkView :: String -> String -> Element a } -> String -> Element a", + "setLinkView": "(String -> String -> Element a) -> { codeView :: String -> String -> Element a, linkView :: String -> String -> Element a } -> { codeView :: String -> String -> Element a, linkView :: String -> String -> Element a }", + "renderMarkdown": "String -> Element a", + "setCodeView": "(String -> String -> Element a) -> { codeView :: String -> String -> Element a, linkView :: String -> String -> Element a } -> { codeView :: String -> String -> Element a, linkView :: String -> String -> Element a }", + "defaultConfig": "{ codeView :: String -> String -> Element a, linkView :: String -> String -> Element a }" + }, + "apiTypes": {} + }, + "llvmApi": { + "apiInstances": [], + "apiAliases": {}, + "apiInterfaces": {}, + "apiNames": { + "renderMarkdownWithConfig": "{ codeView :: String -> String -> Element a, linkView :: String -> String -> Element a } -> String -> Element a", + "setLinkView": "(String -> String -> Element a) -> { codeView :: String -> String -> Element a, linkView :: String -> String -> Element a } -> { codeView :: String -> String -> Element a, linkView :: String -> String -> Element a }", + "renderMarkdown": "String -> Element a", + "setCodeView": "(String -> String -> Element a) -> { codeView :: String -> String -> Element a, linkView :: String -> String -> Element a } -> { codeView :: String -> String -> Element a, linkView :: String -> String -> Element a }", + "defaultConfig": "{ codeView :: String -> String -> Element a, linkView :: String -> String -> Element a }" + }, + "apiTypes": {} + }, + "versionHash": "47354877541923135499c38a6606138a" +} diff --git a/madlib_modules/MadUI/.github/workflows/release.yml b/madlib_modules/MadUI/.github/workflows/release.yml new file mode 100644 index 0000000..85856ae --- /dev/null +++ b/madlib_modules/MadUI/.github/workflows/release.yml @@ -0,0 +1,67 @@ +name: 'Publish new version' + +on: + workflow_dispatch: + inputs: + version: + description: 'Version to publish ( ex: v0.0.1 )' + required: true + +env: + node-version: 20.x + + +jobs: + check-version: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - run: | + MADLIB_PKG_VERSION="v$(cat madlib.json | grep version | cut -d":" -f2 | cut -d"\"" -f2)" + TAG_NAME=${{ github.event.inputs.version }} + if [ "$TAG_NAME" = "$MADLIB_PKG_VERSION" ]; then + echo "Versions match" + else + echo "Versions in madlib.json is not ${TAG_NAME}" + exit 1 + fi + + release: + needs: check-version + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + + - name: Use Node.js ${{ env.node-version }} + uses: actions/setup-node@v4 + with: + node-version: ${{ env.node-version }} + + - name: "Changelog: generate changelog" + id: changelog + uses: TriPSs/conventional-changelog-action@v5.2.1 + with: + presets: "conventionalcommits" + github-token: ${{ secrets.GITHUB_TOKEN }} + skip-on-empty: false + output-file: false + tag-prefix: 'v' + skip-commit: true + skip-version-file: true + + - name: "Delete created tag from changelog" + run: | + git push --delete origin v${{ steps.changelog.outputs.version }} + git tag -d v${{ steps.changelog.outputs.version }} + + - name: "Create Release" + id: create_release + uses: actions/create-release@v1.1.4 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + with: + tag_name: ${{ github.event.inputs.version }} + release_name: Release ${{ github.event.inputs.version }} + body: ${{ steps.changelog.outputs.clean_changelog }} + draft: false + prerelease: false diff --git a/madlib_modules/MadUI/.gitignore b/madlib_modules/MadUI/.gitignore new file mode 100644 index 0000000..f8ca7a7 --- /dev/null +++ b/madlib_modules/MadUI/.gitignore @@ -0,0 +1,7 @@ +build +node_modules +/index.html +/src/Example.mad +/src/Todo.mad +/src/ShareState.mad +.DS_Store diff --git a/madlib_modules/MadUI/.madlibignore b/madlib_modules/MadUI/.madlibignore new file mode 100644 index 0000000..313f48d --- /dev/null +++ b/madlib_modules/MadUI/.madlibignore @@ -0,0 +1,6 @@ +/index.html +/src/Example.mad +/src/Todo.mad +/src/ShareState.mad +.DS_Store + diff --git a/madlib_modules/MadUI/README.md b/madlib_modules/MadUI/README.md new file mode 100644 index 0000000..a63e93e --- /dev/null +++ b/madlib_modules/MadUI/README.md @@ -0,0 +1,65 @@ +# MadUI +MadUI is a client library to build web applications. + +## How to install it +- Add the repository's zip to your madlib.json +- Run `madlib install` to locally install it + +## How to use it + +### View +There's no real concept of components in MadUI. Instead you have one main render function that +you can compose and is a function of the State. The state can be any user-defined madlib type +such as `String`, `Number`, a tuple, or any data type, alias or record you need to model the +state of your app. To render your view you simply call `render` that has the following signature: +```madlib +render :: View state -> state -> String -> () +``` +So understand, it takes a view function ( State -> Element ) that you define, an initial state, and +the id of the element it should render into in your html document. + +### Elements +This package exports render functions that follow the html tags such as: +- div +- span +- p +- h1...6 +And more. +These functions all have the same signature: + +```madlib +List Attribute -> List Element -> Element +``` + +### Attributes +An attribute is mainly created through exported functions such as: +- `id :: String -> Attribute` +- `className :: String -> Attribute` +- `onClick :: (Action a) -> Attribute` + +### Event handlers +In the case of event handlers, an action is defined like this: +```madlib +export alias Action state = state -> Event -> List (Wish (state -> state) (state -> state)) +``` + +An action is a function of the State. A lot happens here but the gist is that you receive as parameters +the current state at the time the event was emitted as well as the event object. You must then return a `List` +of `Wish` that must contain a function `(state -> state)`. This function ( for bad or good handlers ) will be +run, whenever your computation finishes. So you could do an http call and when that http call returns you would map +the result to that function so that it runs with the latest state ( or current ) by the time the async computation +is finished. A quick example: + +```madlib +handleClick :: Action MyState +handleClick = (state, event) => pipe( + getUserId, // retrieves the user id from the state + buildUserProfileUrl, // generates a URL to fetch a user profile + Http.get, // fetch the data + chain((profile) => ((state) => ({ ...state, profile: profile })), + List.singleton // remember, it must return a list, because you may well want to generate other side effects based on that event +)(state) +``` + +### Examples +You can find full examples in this repository: [https://github.com/madlib-lang/madui-examples](https://github.com/madlib-lang/madui-examples) diff --git a/madlib_modules/MadUI/madlib.json b/madlib_modules/MadUI/madlib.json new file mode 100644 index 0000000..13790e4 --- /dev/null +++ b/madlib_modules/MadUI/madlib.json @@ -0,0 +1,9 @@ +{ + "name": "MadUI", + "version": "7.0.2", + "madlibVersion": "0.23.14", + "main": "src/Main.mad", + "importAliases": { + ".": "src" + } +} diff --git a/madlib_modules/MadUI/package-lock.json b/madlib_modules/MadUI/package-lock.json new file mode 100644 index 0000000..0e142e1 --- /dev/null +++ b/madlib_modules/MadUI/package-lock.json @@ -0,0 +1,348 @@ +{ + "name": "madui", + "version": "0.0.1", + "lockfileVersion": 2, + "requires": true, + "packages": { + "": { + "name": "madui", + "version": "0.0.1", + "license": "ISC", + "dependencies": { + "snabbdom": "^3.0.1" + }, + "devDependencies": { + "@rollup/plugin-node-resolve": "^11.2.0", + "rollup": "^2.39.1" + } + }, + "node_modules/@rollup/plugin-node-resolve": { + "version": "11.2.0", + "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-11.2.0.tgz", + "integrity": "sha512-qHjNIKYt5pCcn+5RUBQxK8krhRvf1HnyVgUCcFFcweDS7fhkOLZeYh0mhHK6Ery8/bb9tvN/ubPzmfF0qjDCTA==", + "dev": true, + "dependencies": { + "@rollup/pluginutils": "^3.1.0", + "@types/resolve": "1.17.1", + "builtin-modules": "^3.1.0", + "deepmerge": "^4.2.2", + "is-module": "^1.0.0", + "resolve": "^1.19.0" + }, + "engines": { + "node": ">= 10.0.0" + }, + "peerDependencies": { + "rollup": "^1.20.0||^2.0.0" + } + }, + "node_modules/@rollup/pluginutils": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-3.1.0.tgz", + "integrity": "sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg==", + "dev": true, + "dependencies": { + "@types/estree": "0.0.39", + "estree-walker": "^1.0.1", + "picomatch": "^2.2.2" + }, + "engines": { + "node": ">= 8.0.0" + }, + "peerDependencies": { + "rollup": "^1.20.0||^2.0.0" + } + }, + "node_modules/@types/estree": { + "version": "0.0.39", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.39.tgz", + "integrity": "sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==", + "dev": true + }, + "node_modules/@types/node": { + "version": "14.14.31", + "resolved": "https://registry.npmjs.org/@types/node/-/node-14.14.31.tgz", + "integrity": "sha512-vFHy/ezP5qI0rFgJ7aQnjDXwAMrG0KqqIH7tQG5PPv3BWBayOPIQNBjVc/P6hhdZfMx51REc6tfDNXHUio893g==", + "dev": true + }, + "node_modules/@types/resolve": { + "version": "1.17.1", + "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-1.17.1.tgz", + "integrity": "sha512-yy7HuzQhj0dhGpD8RLXSZWEkLsV9ibvxvi6EiJ3bkqLAO1RGo0WbkWQiwpRlSFymTJRz0d3k5LM3kkx8ArDbLw==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/builtin-modules": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.2.0.tgz", + "integrity": "sha512-lGzLKcioL90C7wMczpkY0n/oART3MbBa8R9OFGE1rJxoVI86u4WAGfEk8Wjv10eKSyTHVGkSo3bvBylCEtk7LA==", + "dev": true, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/deepmerge": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz", + "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/estree-walker": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-1.0.1.tgz", + "integrity": "sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg==", + "dev": true + }, + "node_modules/fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "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/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/is-core-module": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.2.0.tgz", + "integrity": "sha512-XRAfAdyyY5F5cOXn7hYQDqh2Xmii+DEfIcQGxK/uNwMHhIkPWO0g8msXcbzLe+MpGoR951MlqM/2iIlU4vKDdQ==", + "dev": true, + "dependencies": { + "has": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-module": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz", + "integrity": "sha1-Mlj7afeMFNW4FdZkM2tM/7ZEFZE=", + "dev": true + }, + "node_modules/path-parse": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", + "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==", + "dev": true + }, + "node_modules/picomatch": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.2.tgz", + "integrity": "sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg==", + "dev": true, + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/resolve": { + "version": "1.20.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", + "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", + "dev": true, + "dependencies": { + "is-core-module": "^2.2.0", + "path-parse": "^1.0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/rollup": { + "version": "2.39.1", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.39.1.tgz", + "integrity": "sha512-9rfr0Z6j+vE+eayfNVFr1KZ+k+jiUl2+0e4quZafy1x6SFCjzFspfRSO2ZZQeWeX9noeDTUDgg6eCENiEPFvQg==", + "dev": true, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=10.0.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.1" + } + }, + "node_modules/snabbdom": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/snabbdom/-/snabbdom-3.0.1.tgz", + "integrity": "sha512-H4gKokDT1HPe3dlGyTihNw0NtEH9FxZy55MXp3ODM4O30NBRe+11veox1wf/CP9NfGcbStDM3BmO1DFC9/5wRw==", + "engines": { + "node": ">=8.3.0" + } + } + }, + "dependencies": { + "@rollup/plugin-node-resolve": { + "version": "11.2.0", + "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-11.2.0.tgz", + "integrity": "sha512-qHjNIKYt5pCcn+5RUBQxK8krhRvf1HnyVgUCcFFcweDS7fhkOLZeYh0mhHK6Ery8/bb9tvN/ubPzmfF0qjDCTA==", + "dev": true, + "requires": { + "@rollup/pluginutils": "^3.1.0", + "@types/resolve": "1.17.1", + "builtin-modules": "^3.1.0", + "deepmerge": "^4.2.2", + "is-module": "^1.0.0", + "resolve": "^1.19.0" + } + }, + "@rollup/pluginutils": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-3.1.0.tgz", + "integrity": "sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg==", + "dev": true, + "requires": { + "@types/estree": "0.0.39", + "estree-walker": "^1.0.1", + "picomatch": "^2.2.2" + } + }, + "@types/estree": { + "version": "0.0.39", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.39.tgz", + "integrity": "sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==", + "dev": true + }, + "@types/node": { + "version": "14.14.31", + "resolved": "https://registry.npmjs.org/@types/node/-/node-14.14.31.tgz", + "integrity": "sha512-vFHy/ezP5qI0rFgJ7aQnjDXwAMrG0KqqIH7tQG5PPv3BWBayOPIQNBjVc/P6hhdZfMx51REc6tfDNXHUio893g==", + "dev": true + }, + "@types/resolve": { + "version": "1.17.1", + "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-1.17.1.tgz", + "integrity": "sha512-yy7HuzQhj0dhGpD8RLXSZWEkLsV9ibvxvi6EiJ3bkqLAO1RGo0WbkWQiwpRlSFymTJRz0d3k5LM3kkx8ArDbLw==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "builtin-modules": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.2.0.tgz", + "integrity": "sha512-lGzLKcioL90C7wMczpkY0n/oART3MbBa8R9OFGE1rJxoVI86u4WAGfEk8Wjv10eKSyTHVGkSo3bvBylCEtk7LA==", + "dev": true + }, + "deepmerge": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz", + "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==", + "dev": true + }, + "estree-walker": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-1.0.1.tgz", + "integrity": "sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg==", + "dev": true + }, + "fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "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 + }, + "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" + } + }, + "is-core-module": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.2.0.tgz", + "integrity": "sha512-XRAfAdyyY5F5cOXn7hYQDqh2Xmii+DEfIcQGxK/uNwMHhIkPWO0g8msXcbzLe+MpGoR951MlqM/2iIlU4vKDdQ==", + "dev": true, + "requires": { + "has": "^1.0.3" + } + }, + "is-module": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz", + "integrity": "sha1-Mlj7afeMFNW4FdZkM2tM/7ZEFZE=", + "dev": true + }, + "path-parse": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", + "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==", + "dev": true + }, + "picomatch": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.2.tgz", + "integrity": "sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg==", + "dev": true + }, + "resolve": { + "version": "1.20.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", + "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", + "dev": true, + "requires": { + "is-core-module": "^2.2.0", + "path-parse": "^1.0.6" + } + }, + "rollup": { + "version": "2.39.1", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.39.1.tgz", + "integrity": "sha512-9rfr0Z6j+vE+eayfNVFr1KZ+k+jiUl2+0e4quZafy1x6SFCjzFspfRSO2ZZQeWeX9noeDTUDgg6eCENiEPFvQg==", + "dev": true, + "requires": { + "fsevents": "~2.3.1" + } + }, + "snabbdom": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/snabbdom/-/snabbdom-3.0.1.tgz", + "integrity": "sha512-H4gKokDT1HPe3dlGyTihNw0NtEH9FxZy55MXp3ODM4O30NBRe+11veox1wf/CP9NfGcbStDM3BmO1DFC9/5wRw==" + } + } +} diff --git a/madlib_modules/MadUI/package.json b/madlib_modules/MadUI/package.json new file mode 100644 index 0000000..248c236 --- /dev/null +++ b/madlib_modules/MadUI/package.json @@ -0,0 +1,18 @@ +{ + "name": "madui", + "version": "0.0.1", + "description": "You just created a new madlib project, if it's your first project you should read the following. ### Notes on Madlib Madlib is a general purpose programming language that compiles to Javascript. It means that you need to have [Nodejs](https://nodejs.org/) installed and configured in order to make it work. Madlib can target nodejs or browser, by default it will compile for nodejs. ### How to run it First, you need to compile the program: ```shell madlib compile -i src/Main.mad ``` Then, you can run it like this: ```shell node build/Main.mjs ```", + "main": "index.js", + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1" + }, + "author": "", + "license": "ISC", + "dependencies": { + "snabbdom": "^3.0.1" + }, + "devDependencies": { + "@rollup/plugin-node-resolve": "^11.2.0", + "rollup": "^2.39.1" + } +} diff --git a/madlib_modules/MadUI/src/Action.mad b/madlib_modules/MadUI/src/Action.mad new file mode 100644 index 0000000..c785b24 --- /dev/null +++ b/madlib_modules/MadUI/src/Action.mad @@ -0,0 +1,67 @@ +import type { Wish } from "Wish" + +import type { Event } from "@/Event" + +import {} from "Wish" + + + +export alias Action a = a -> Event -> List (Wish (a -> a) (a -> a)) + +export type GlobalAction a = GlobalAction(String, Action a) + +syncAction :: (a -> Event -> a) -> Action a +export syncAction = (stateUpdate) => ((_, event) => [of((state) => stateUpdate(state, event))]) + +throttleAction :: Integer -> Action a -> Action a +export throttleAction = (amount, action) => { + #- let timestamp = new Date().getTime() -# + return (state, event) => #-{ + const currentTime = new Date().getTime() + if (timestamp + amount > currentTime) { + return null; + } + + timestamp = currentTime + return action(state)(event) + }-# +} + +onAfterPrint :: Action a -> GlobalAction a +export onAfterPrint = GlobalAction("afterprint") + +onBeforePrint :: Action a -> GlobalAction a +export onBeforePrint = GlobalAction("beforeprint") + +onBeforeUnload :: Action a -> GlobalAction a +export onBeforeUnload = GlobalAction("beforeunload") + +onDocumentLoad :: Action a -> GlobalAction a +export onDocumentLoad = GlobalAction("load") + +onPageHide :: Action a -> GlobalAction a +export onPageHide = GlobalAction("pagehide") + +onPageShow :: Action a -> GlobalAction a +export onPageShow = GlobalAction("pageshow") + +onOffline :: Action a -> GlobalAction a +export onOffline = GlobalAction("offline") + +onOnline :: Action a -> GlobalAction a +export onOnline = GlobalAction("online") + +onResize :: Action a -> GlobalAction a +export onResize = GlobalAction("resize") + +onBodyScroll :: Action a -> GlobalAction a +export onBodyScroll = GlobalAction("scroll") + +onStorage :: Action a -> GlobalAction a +export onStorage = GlobalAction("storage") + +onUnload :: Action a -> GlobalAction a +export onUnload = GlobalAction("unload") + +onUrlChanged :: Action a -> GlobalAction a +export onUrlChanged = GlobalAction("popstate") diff --git a/madlib_modules/MadUI/src/Attribute.mad b/madlib_modules/MadUI/src/Attribute.mad new file mode 100644 index 0000000..749cc75 --- /dev/null +++ b/madlib_modules/MadUI/src/Attribute.mad @@ -0,0 +1,685 @@ +import type { Method } from "Http" + +import type { Action } from "@/Action" + +import { CONNECT, DELETE, GET, HEAD, OPTIONS, PATCH, POST, PUT, TRACE } from "Http" + + + +// TODO: Check what to do with body attributes like +// onoffline, ononline, onpagehide, onpopstate + +// https://www.w3schools.com/tags/ref_attributes.asp +// https://www.w3schools.com/tags/ref_standardattributes.asp + +export type Attribute a + = StringAttribute(#[String, String]) + | AttributeAccept(String) + | AttributeAcceptCharset(String) + | AttributeAccessKey(String) + | AttributeAction(String) + | AttributeAlt(String) + | AttributeAsync(Boolean) + | AttributeAutoComplete(String) + | AttributeAutoFocus(Boolean) + | AttributeAutoPlay(Boolean) + | AttributeChecked(Boolean) + | AttributeCite(String) + | AttributeClass(String) + | AttributeCols(Integer) + | AttributeColSpan(Integer) + | AttributeContentEditable(Boolean) + | AttributeControls(Boolean) + | AttributeCoords(String) + | AttributeData(String) + | AttributeDateTime(String) + | AttributeDefault(Boolean) + | AttributeDefer(Boolean) + | AttributeDir(String) + | AttributeDirName(String) + | AttributeDisabled(Boolean) + | AttributeDownload(Boolean) + | AttributeDraggable(Boolean) + | AttributeEncType(String) + | AttributeFor(String) + | AttributeForm(String) + | AttributeFormAction(String) + | AttributeHeaders(String) + | AttributeHeight(Integer) + | AttributeHidden(Boolean) + | AttributeHigh(Integer) + | AttributeHref(String) + | AttributeHrefLang(String) + | AttributeId(String) + | AttributeInnerHTML(String) + | AttributeInnerText(String) + | AttributeIsMap(Boolean) + | AttributeKey(String) + | AttributeKind(String) + | AttributeLang(String) + | AttributeLabel(String) + | AttributeList(String) + | AttributeLoop(Boolean) + | AttributeLow(Integer) + | AttributeMax(Integer) + | AttributeMaxLength(Integer) + | AttributeMedia(String) + | AttributeMethod(String) + | AttributeMin(Integer) + | AttributeMultiple(Boolean) + | AttributeMuted(Boolean) + | AttributeName(String) + | AttributeNoValidate(Boolean) + | AttributeOnAbort(Action a) + | AttributeOnBlur(Action a) + | AttributeOnCanPlay(Action a) + | AttributeOnCanPlayThrough(Action a) + | AttributeOnChange(Action a) + | AttributeOnClick(Action a) + | AttributeOnContextMenu(Action a) + | AttributeOnCopy(Action a) + | AttributeOnCueChange(Action a) + | AttributeOnCut(Action a) + | AttributeOnDblClick(Action a) + | AttributeOnDrag(Action a) + | AttributeOnDragEnd(Action a) + | AttributeOnDragEnter(Action a) + | AttributeOnDragLeave(Action a) + | AttributeOnDragOver(Action a) + | AttributeOnDragStart(Action a) + | AttributeOnDrop(Action a) + | AttributeOnDurationChange(Action a) + | AttributeOnEmptied(Action a) + | AttributeOnEnded(Action a) + | AttributeOnError(Action a) + | AttributeOnFocus(Action a) + | AttributeOnInput(Action a) + | AttributeOnInvalid(Action a) + | AttributeOnKeyPress(Action a) + | AttributeOnKeyDown(Action a) + | AttributeOnKeyUp(Action a) + | AttributeOnLoad(Action a) + | AttributeOnLoadedData(Action a) + | AttributeOnLoadedMetaData(Action a) + | AttributeOnLoadStart(Action a) + | AttributeOnMouseDown(Action a) + | AttributeOnMouseEnter(Action a) + | AttributeOnMouseLeave(Action a) + | AttributeOnMouseMove(Action a) + | AttributeOnMouseUp(Action a) + | AttributeOnMouseWheel(Action a) + | AttributeOnMouseOver(Action a) + | AttributeOnMouseOut(Action a) + | AttributeOnPaste(Action a) + | AttributeOnPause(Action a) + | AttributeOnPlay(Action a) + | AttributeOnPlaying(Action a) + | AttributeOnProgress(Action a) + | AttributeOnRateChange(Action a) + | AttributeOnReset(Action a) + | AttributeOnScroll(Action a) + | AttributeOnSearch(Action a) + | AttributeOnSeeked(Action a) + | AttributeOnSeeking(Action a) + | AttributeOnSelect(Action a) + | AttributeOnStalled(Action a) + | AttributeOnSubmit(Action a) + | AttributeOnSuspend(Action a) + | AttributeOnTimeUpdate(Action a) + | AttributeOnToggle(Action a) + | AttributeOnTransitionCancel(Action a) + | AttributeOnTransitionEnd(Action a) + | AttributeOnTransitionRun(Action a) + | AttributeOnTransitionStart(Action a) + | AttributeOnVolumeChange(Action a) + | AttributeOnWaiting(Action a) + | AttributeOnWheel(Action a) + | AttributeOpen(Boolean) + | AttributeOptimum(Integer) + | AttributePattern(String) + | AttributePlaceholder(String) + | AttributePoster(String) + | AttributePreload(String) + | AttributeReadOnly(Boolean) + | AttributeRel(String) + | AttributeRequired(Boolean) + | AttributeReversed(Boolean) + | AttributeRows(Integer) + | AttributeRowSpan(Integer) + | AttributeSandBox(Boolean) + | AttributeScope(String) + | AttributeSelected(Boolean) + | AttributeShape(String) + | AttributeSize(Integer) + | AttributeSizes(String) + | AttributeSpan(Integer) + | AttributeSpellCheck(String) + | AttributeSrc(String) + | AttributeSrcDoc(String) + | AttributeSrcLang(String) + | AttributeSrcSet(String) + | AttributeStart(Integer) + | AttributeStep(Integer) + | AttributeStyle(Dictionary String String) + | AttributeTabIndex(Integer) + | AttributeTarget(String) + | AttributeTitle(String) + | AttributeTo(String) + | AttributeTranslate(String) + | AttributeType(String) + | AttributeUseMap(String) + | AttributeValue(String) + | AttributeWidth(Integer) + | AttributeWrap(String) + + +stringAttribute :: #[String, String] -> Attribute a +export stringAttribute = StringAttribute + + +accept :: String -> Attribute a +export accept = AttributeAccept + +acceptCharset :: String -> Attribute a +export acceptCharset = AttributeAcceptCharset + +accessKey :: String -> Attribute a +export accessKey = AttributeAccessKey + +action :: String -> Attribute a +export action = AttributeAction + +altAttribute :: String -> Attribute a +export altAttribute = AttributeAlt + +async :: Boolean -> Attribute a +export async = AttributeAsync + +autocomplete :: Boolean -> Attribute a +export autocomplete = (on) => on ? AttributeAutoComplete("on") : AttributeAutoComplete("off") + +autofocus :: Boolean -> Attribute a +export autofocus = AttributeAutoFocus + +autoplay :: Boolean -> Attribute a +export autoplay = AttributeAutoPlay + +checked :: Boolean -> Attribute a +export checked = AttributeChecked + +citeAttr :: String -> Attribute a +export citeAttr = AttributeCite + +className :: String -> Attribute a +export className = AttributeClass + +cols :: Integer -> Attribute a +export cols = AttributeCols + +colspan :: Integer -> Attribute a +export colspan = AttributeColSpan + +contenteditable :: Boolean -> Attribute a +export contenteditable = AttributeContentEditable + +controls :: Boolean -> Attribute a +export controls = AttributeControls + +coords :: String -> Attribute a +export coords = AttributeCoords + +dataAttr :: String -> Attribute a +export dataAttr = AttributeData + +datetime :: String -> Attribute a +export datetime = AttributeDateTime + +default :: Boolean -> Attribute a +export default = AttributeDefault + +defer :: Boolean -> Attribute a +export defer = AttributeDefer + +dir :: String -> Attribute a +export dir = AttributeDir + +dirname :: String -> Attribute a +export dirname = AttributeDirName + +disabled :: Boolean -> Attribute a +export disabled = AttributeDisabled + +download :: Boolean -> Attribute a +export download = AttributeDownload + +draggable :: Boolean -> Attribute a +export draggable = (canDrag) => canDrag + ? StringAttribute(#["draggable", "true"]) + : StringAttribute(#["draggable", "false"]) + +enctype :: String -> Attribute a +export enctype = AttributeEncType + +for :: String -> Attribute a +export for = AttributeFor + +formAttr :: String -> Attribute a +export formAttr = AttributeForm + +formaction :: String -> Attribute a +export formaction = AttributeFormAction + +headers :: String -> Attribute a +export headers = AttributeHeaders + +height :: Integer -> Attribute a +export height = AttributeHeight + +hidden :: Boolean -> Attribute a +export hidden = AttributeHidden + +high :: Integer -> Attribute a +export high = AttributeHigh + +href :: String -> Attribute a +export href = AttributeHref + +hreflang :: String -> Attribute a +export hreflang = AttributeHrefLang + +id :: String -> Attribute a +export id = AttributeId + +innerHTML :: String -> Attribute a +export innerHTML = AttributeInnerHTML + +innerText :: String -> Attribute a +export innerText = AttributeInnerText + +inputType :: String -> Attribute a +export inputType = AttributeType + +ismap :: Boolean -> Attribute a +export ismap = AttributeIsMap + +key :: String -> Attribute a +export key = AttributeKey + +kind :: String -> Attribute a +export kind = AttributeKind + +labelAttr :: String -> Attribute a +export labelAttr = AttributeLabel + +// TODO: That String should be a LanguageCode instead +// ref: https://www.w3schools.com/tags/ref_language_codes.asp +lang :: String -> Attribute a +export lang = AttributeLang + +list :: String -> Attribute a +export list = AttributeList + +loop :: Boolean -> Attribute a +export loop = AttributeLoop + +low :: Integer -> Attribute a +export low = AttributeLow + +max :: Integer -> Attribute a +export max = AttributeMax + +maxlength :: Integer -> Attribute a +export maxlength = AttributeMaxLength + +media :: String -> Attribute a +export media = AttributeMedia + +method :: Method -> Attribute a +export method = where { + GET => + AttributeMethod("get") + + POST => + AttributeMethod("post") + + PUT => + AttributeMethod("put") + + DELETE => + AttributeMethod("delete") + + PATCH => + AttributeMethod("patch") + + HEAD => + AttributeMethod("head") + + OPTIONS => + AttributeMethod("options") + + CONNECT => + AttributeMethod("connect") + + TRACE => + AttributeMethod("trace") +} + +min :: Integer -> Attribute a +export min = AttributeMin + +multiple :: Boolean -> Attribute a +export multiple = AttributeMultiple + +muted :: Boolean -> Attribute a +export muted = AttributeMuted + +name :: String -> Attribute a +export name = AttributeName + +novalidate :: Boolean -> Attribute a +export novalidate = AttributeNoValidate + +onAbort :: Action a -> Attribute a +export onAbort = AttributeOnAbort + +onBlur :: Action a -> Attribute a +export onBlur = AttributeOnBlur + +onCanPlay :: Action a -> Attribute a +export onCanPlay = AttributeOnCanPlay + +onCanPlayThrough :: Action a -> Attribute a +export onCanPlayThrough = AttributeOnCanPlayThrough + +onChange :: Action a -> Attribute a +export onChange = AttributeOnChange + +onClick :: Action a -> Attribute a +export onClick = AttributeOnClick + +onContextMenu :: Action a -> Attribute a +export onContextMenu = AttributeOnContextMenu + +onCopy :: Action a -> Attribute a +export onCopy = AttributeOnCopy + +onCueChange :: Action a -> Attribute a +export onCueChange = AttributeOnCueChange + +onCut :: Action a -> Attribute a +export onCut = AttributeOnCut + +onDblClick :: Action a -> Attribute a +export onDblClick = AttributeOnDblClick + +onDrag :: Action a -> Attribute a +export onDrag = AttributeOnDrag + +onDragEnd :: Action a -> Attribute a +export onDragEnd = AttributeOnDragEnd + +onDragEnter :: Action a -> Attribute a +export onDragEnter = AttributeOnDragEnter + +onDragLeave :: Action a -> Attribute a +export onDragLeave = AttributeOnDragLeave + +onDragOver :: Action a -> Attribute a +export onDragOver = AttributeOnDragOver + +onDragStart :: Action a -> Attribute a +export onDragStart = AttributeOnDragStart + +onDrop :: Action a -> Attribute a +export onDrop = AttributeOnDrop + +onDurationChange :: Action a -> Attribute a +export onDurationChange = AttributeOnDurationChange + +onEmptied :: Action a -> Attribute a +export onEmptied = AttributeOnEmptied + +onEnded :: Action a -> Attribute a +export onEnded = AttributeOnEnded + +onError :: Action a -> Attribute a +export onError = AttributeOnError + +onFocus :: Action a -> Attribute a +export onFocus = AttributeOnFocus + +onInput :: Action a -> Attribute a +export onInput = AttributeOnInput + +onInvalid :: Action a -> Attribute a +export onInvalid = AttributeOnInvalid + +onKeyPress :: Action a -> Attribute a +export onKeyPress = AttributeOnKeyPress + +onKeyDown :: Action a -> Attribute a +export onKeyDown = AttributeOnKeyDown + +onKeyUp :: Action a -> Attribute a +export onKeyUp = AttributeOnKeyUp + +onLoad :: Action a -> Attribute a +export onLoad = AttributeOnLoad + +onLoadedData :: Action a -> Attribute a +export onLoadedData = AttributeOnLoadedData + +onLoadedMetaData :: Action a -> Attribute a +export onLoadedMetaData = AttributeOnLoadedMetaData + +onLoadStart :: Action a -> Attribute a +export onLoadStart = AttributeOnLoadStart + +onMouseDown :: Action a -> Attribute a +export onMouseDown = AttributeOnMouseDown + +onMouseEnter :: Action a -> Attribute a +export onMouseEnter = AttributeOnMouseEnter + +onMouseLeave :: Action a -> Attribute a +export onMouseLeave = AttributeOnMouseLeave + +onMouseMove :: Action a -> Attribute a +export onMouseMove = AttributeOnMouseMove + +onMouseOut :: Action a -> Attribute a +export onMouseOut = AttributeOnMouseOut + +onMouseOver :: Action a -> Attribute a +export onMouseOver = AttributeOnMouseOver + +onMouseUp :: Action a -> Attribute a +export onMouseUp = AttributeOnMouseUp + +onMouseWheel :: Action a -> Attribute a +export onMouseWheel = AttributeOnMouseWheel + +onPaste :: Action a -> Attribute a +export onPaste = AttributeOnPaste + +onPause :: Action a -> Attribute a +export onPause = AttributeOnPause + +onPlay :: Action a -> Attribute a +export onPlay = AttributeOnPlay + +onPlaying :: Action a -> Attribute a +export onPlaying = AttributeOnPlaying + +onProgress :: Action a -> Attribute a +export onProgress = AttributeOnProgress + +onRateChange :: Action a -> Attribute a +export onRateChange = AttributeOnRateChange + +onReset :: Action a -> Attribute a +export onReset = AttributeOnReset + +onScroll :: Action a -> Attribute a +export onScroll = AttributeOnScroll + +onSearch :: Action a -> Attribute a +export onSearch = AttributeOnSearch + +onSeeked :: Action a -> Attribute a +export onSeeked = AttributeOnSeeked + +onSeeking :: Action a -> Attribute a +export onSeeking = AttributeOnSeeking + +onSelect :: Action a -> Attribute a +export onSelect = AttributeOnSelect + +onStalled :: Action a -> Attribute a +export onStalled = AttributeOnStalled + +onSubmit :: Action a -> Attribute a +export onSubmit = AttributeOnSubmit + +onSuspend :: Action a -> Attribute a +export onSuspend = AttributeOnSuspend + +onTimeUpdate :: Action a -> Attribute a +export onTimeUpdate = AttributeOnTimeUpdate + +onToggle :: Action a -> Attribute a +export onToggle = AttributeOnToggle + +onTransitionCancel :: Action a -> Attribute a +export onTransitionCancel = AttributeOnTransitionCancel + +onTransitionEnd :: Action a -> Attribute a +export onTransitionEnd = AttributeOnTransitionEnd + +onTransitionRun :: Action a -> Attribute a +export onTransitionRun = AttributeOnTransitionRun + +onTransitionStart :: Action a -> Attribute a +export onTransitionStart = AttributeOnTransitionStart + +onVolumeChange :: Action a -> Attribute a +export onVolumeChange = AttributeOnVolumeChange + +onWaiting :: Action a -> Attribute a +export onWaiting = AttributeOnWaiting + +onWheel :: Action a -> Attribute a +export onWheel = AttributeOnWheel + +open :: Boolean -> Attribute a +export open = AttributeOpen + +optimum :: Integer -> Attribute a +export optimum = AttributeOptimum + +pattern :: String -> Attribute a +export pattern = AttributePattern + +placeholder :: String -> Attribute a +export placeholder = AttributePlaceholder + +poster :: String -> Attribute a +export poster = AttributePoster + +// TODO: make a type for this: preload="auto|metadata|none" +preload :: String -> Attribute a +export preload = AttributePreload + +readonly :: Boolean -> Attribute a +export readonly = AttributeReadOnly + +rel :: String -> Attribute a +export rel = AttributeRel + +required :: Boolean -> Attribute a +export required = AttributeRequired + +reversed :: Boolean -> Attribute a +export reversed = AttributeReversed + +rows :: Integer -> Attribute a +export rows = AttributeRows + +rowspan :: Integer -> Attribute a +export rowspan = AttributeRowSpan + +sandbox :: Boolean -> Attribute a +export sandbox = AttributeSandBox + +// TODO: make a type for this: scope="col|row|colgroup|rowgroup" +scope :: String -> Attribute a +export scope = AttributeScope + +selected :: Boolean -> Attribute a +export selected = AttributeSelected + +// TODO: make a type for this: shape="default|rect|circle|poly" +shape :: String -> Attribute a +export shape = AttributeShape + +size :: Integer -> Attribute a +export size = AttributeSize + +// TODO: see if we should make this a List Size or something +sizes :: String -> Attribute a +export sizes = AttributeSizes + +spanAttr :: Integer -> Attribute a +export spanAttr = AttributeSpan + +spellcheck :: Boolean -> Attribute a +export spellcheck = (truthy) => truthy ? AttributeSpellCheck("true") : AttributeSpellCheck("false") + +src :: String -> Attribute a +export src = AttributeSrc + +srcdoc :: String -> Attribute a +export srcdoc = AttributeSrcDoc + +srclang :: String -> Attribute a +export srclang = AttributeSrcLang + +srcset :: String -> Attribute a +export srcset = AttributeSrcSet + +start :: Integer -> Attribute a +export start = AttributeStart + +step :: Integer -> Attribute a +export step = AttributeStep + +style :: Dictionary String String -> Attribute a +export style = AttributeStyle + +tabindex :: Integer -> Attribute a +export tabindex = AttributeTabIndex + +target :: String -> Attribute a +export target = AttributeTarget + +titleAttr :: String -> Attribute a +export titleAttr = AttributeTitle + +to :: String -> Attribute a +export to = AttributeTo + +translate :: Boolean -> Attribute a +export translate = (yes) => yes ? AttributeTranslate("yes") : AttributeTranslate("no") + +usemap :: String -> Attribute a +export usemap = AttributeUseMap + +value :: String -> Attribute a +export value = AttributeValue + +width :: Integer -> Attribute a +export width = AttributeWidth + +// wrap="soft|hard" +wrap :: String -> Attribute a +export wrap = AttributeWrap diff --git a/madlib_modules/MadUI/src/Config.mad b/madlib_modules/MadUI/src/Config.mad new file mode 100644 index 0000000..feb3dcf --- /dev/null +++ b/madlib_modules/MadUI/src/Config.mad @@ -0,0 +1,27 @@ +import type { GlobalAction } from "@/Action" +import type { Subscription } from "@/Subscription" + +import { append } from "List" + + + +export type RoutingKind = HashRouting | BasicRouting + +export alias Config a = { + globalEventHandlers :: List (GlobalAction a), + routingKind :: RoutingKind, + subscriptions :: List (Subscription a), +} + +DEFAULT_CONFIG :: Config a +export DEFAULT_CONFIG = { subscriptions: [], globalEventHandlers: [], routingKind: BasicRouting } + +addGlobalEventHandler :: GlobalAction a -> Config a -> Config a +export addGlobalEventHandler = (action, config) => ( + { ...config, globalEventHandlers: append(action, config.globalEventHandlers) } +) + +addSubscription :: Subscription a -> Config a -> Config a +export addSubscription = (action, config) => ( + { ...config, subscriptions: append(action, config.subscriptions) } +) diff --git a/madlib_modules/MadUI/src/Core.mad b/madlib_modules/MadUI/src/Core.mad new file mode 100644 index 0000000..d65f67a --- /dev/null +++ b/madlib_modules/MadUI/src/Core.mad @@ -0,0 +1,118 @@ +import type { Config } from "@/Config" +import type { Element } from "@/Element" + +import { get } from "Dictionary" +import {} from "Number" + +import { DEFAULT_CONFIG } from "@/Config" +import { runAction, wrapEventHandler } from "@/CoreUtils" +import { EventConstructors } from "@/Event" + + + +#- +import { + attributesModule as madui_attributesModule, + init as madui_init, + propsModule as madui_propsModule, + eventListenersModule as madui_eventListenersModule, + styleModule as madui_styleModule +} from "snabbdom" +-# + + + +getUrl :: a -> String +export getUrl = () => #- document.location.href || "" -# + + +getPathName :: a -> String +export getPathName = () => #- document.location.pathname || "" -# + + + +#- +const startGlobalEventHandlers = (env, globalActions) => { + const keysForWindowEvents = []; + while (globalActions !== null) { + keysForWindowEvents.push(({ + eventName: globalActions.v.__args[0], + eventHandler: globalActions.v.__args[1], + })) + globalActions = globalActions.n + } + + keysForWindowEvents.forEach(ga => { + const handler = wrapEventHandler(env, EventConstructors[ga.eventName], ga.eventHandler) + window.addEventListener(ga.eventName, handler) + + if (ga.eventName === "popstate") { + handler({}) + } + }) +} +-# + + +#- +const hashFixModule = () => { + let triggered = false + history.scrollRestoration = "manual" + return { + post: () => { + if (!triggered) { + const element = document.getElementById(window.location.hash.substr(1)) + if (element) { + const top = element.offsetTop + window.scrollTo(0, top) + } + } + triggered = true + }, + } +} +-# + +_renderWithConfig :: w -> Config a -> (a -> Element a) -> a -> String -> {} +export _renderWithConfig = (_runAction, config, view, initialState, containerId) => { + #- + window.env = { + routingKind: config.routingKind.__constructor, + patch: null, + currentElement: null, + currentState: null, + rootView: null, + } + -# + initialElement = view(initialState) + #- + const patch = madui_init([madui_attributesModule, madui_propsModule, madui_eventListenersModule, madui_styleModule, hashFixModule()]) + patch(document.getElementById(containerId), initialElement) + + window.env.patch = patch + window.env.currentElement = initialElement + window.env.rootView = view + window.env.currentState = initialState + + startGlobalEventHandlers(window.env, config.globalEventHandlers) + // needed to make the router work + window.addEventListener("popstate", () => { _runAction(window.env)(x => x) }) + + let subs = config.subscriptions + while (subs !== null) { + subs.v(_runAction(window.env)) + subs = subs.n + } + -# + + return {} +} + +renderWithConfig :: Config a -> (a -> Element a) -> a -> String -> {} +export renderWithConfig = _renderWithConfig(runAction) + +/** + * render - boostraps the app and takes a component, and an initial state as parameters + */ +render :: (a -> Element a) -> a -> String -> {} +export render = renderWithConfig(DEFAULT_CONFIG) diff --git a/madlib_modules/MadUI/src/CoreUtils.mad b/madlib_modules/MadUI/src/CoreUtils.mad new file mode 100644 index 0000000..8bc7809 --- /dev/null +++ b/madlib_modules/MadUI/src/CoreUtils.mad @@ -0,0 +1,28 @@ +import { fulfill } from "Wish" + + + +export runAction = #- env => updater => { + env.currentState = updater(env.currentState) + window.env = env + const newElement = env.rootView(env.currentState) + env.patch(env.currentElement, newElement) + env.currentElement = newElement +} -# + + +_wrapEventHandler = (_fulfill, _runAction) => #- (env, ctor, handler) => { + return event => { + event.eventType = event.type + + // Calling an event handler gives us a list of wishes + let wishes = handler(env.currentState)(ctor(event)) + + while (wishes !== null) { + _fulfill(_runAction(env))(_runAction(env))(wishes.v) + wishes = wishes.n + } + } +} -# + +export wrapEventHandler = _wrapEventHandler(fulfill, runAction) diff --git a/madlib_modules/MadUI/src/Element.mad b/madlib_modules/MadUI/src/Element.mad new file mode 100644 index 0000000..ab13630 --- /dev/null +++ b/madlib_modules/MadUI/src/Element.mad @@ -0,0 +1,356 @@ +#- +import { h as madui_h } from "snabbdom" +-# + +import type { Attribute } from "@/Attribute" + +import { fromList } from "Dictionary" +import { reduce } from "List" + +import { wrapEventHandler } from "@/CoreUtils" +import { EventConstructors } from "@/Event" + + + +export type Element a = Element + +alias RouteInfo = { + searchParams :: Dictionary String String, + urlParams :: Dictionary String String, +} + + +#- +const __getAttributeTuple = attr => + [attr.__constructor.substr(9).toLowerCase(), attr.__args[0]] + + +const PROP_NAMES = [ + "value", + "innerhtml", + "innertext", +] + +-# + +_objectifyAttrs = (_reduce, _wrapEventHandler, _EventConstructors) => #- { + return (env, attrs) => _reduce(obj => attr => { + const [attrName, attrValue] = __getAttributeTuple(attr) + + if (attr.__constructor == "AttributeStyle") { + const items = attr.__args[0].__args[0] + const styleObj = _reduce(obj => ([key, value]) => ({ + ...obj, + [key]: value, + }))({})(items) + return { ...obj, style: styleObj } + } else if (attr.__constructor == "StringAttribute") { + return { ...obj, attrs: { ...obj.attrs, [attr.__args[0][0]]: attr.__args[0][1] }} + } else if (attrName === "key") { + return { ...obj, key: attrValue } + } else if (PROP_NAMES.includes(attrName)) { + let realAttr = attrName; + if (attrName === "innerhtml") { + realAttr = "innerHTML" + } + if (attrName === "innertext") { + realAttr = "innerText" + } + + return { ...obj, props: { ...obj.props, [realAttr]: attrValue }} + } else if (attrName.substr(0, 2) === "on") { + const eventName = attrName.substr(2) + const ctor = _EventConstructors[eventName] + return { ...obj, on: { ...obj.on, [eventName]: _wrapEventHandler(env, ctor, attrValue) }} + } else { + return { ...obj, attrs: { ...obj.attrs, [attrName]: attrValue }} + } + })({})(attrs) +} -# + + +_tag :: b -> String -> List (Attribute a) -> List (Element a) -> Element a +export _tag = (objectifyAttrs, tagName, attrs, children) => #- { + return madui_h(tagName, objectifyAttrs(window.env, attrs), __listToJSArray__(children)) +} -# + +tag :: String -> List (Attribute a) -> List (Element a) -> Element a +export tag = (tagName, attrs, children) => _tag( + _objectifyAttrs(reduce, wrapEventHandler, EventConstructors), + tagName, + attrs, + children, +) + + + +export a = tag("a") +export abbr = tag("abbr") +export address = tag("address") +export area = tag("area") +export article = tag("article") +export aside = tag("aside") +export audio = tag("audio") +export b = tag("b") +export bdi = tag("bdi") +export bdo = tag("bdo") +export blockquote = tag("blockquote") +export br = tag("br") +export button = tag("button") +export canvas = tag("canvas") +export caption = tag("caption") +export cite = tag("cite") +export code = tag("code") +export col = tag("col") +export colgroup = tag("colgroup") +export content = tag("content") +export data = tag("data") +export datalist = tag("datalist") +export dd = tag("dd") +export del = tag("del") +export details = tag("details") +export dfn = tag("dfn") +export dialog = tag("dialog") +export div = tag("div") +export dl = tag("dl") +export dt = tag("dt") +export em = tag("em") +export embed = tag("embed") +export fieldset = tag("fieldset") +export figcaption = tag("figcaption") +export figure = tag("figure") +export footer = tag("footer") +export form = tag("form") +export h1 = tag("h1") +export h2 = tag("h2") +export h3 = tag("h3") +export h4 = tag("h4") +export h5 = tag("h5") +export h6 = tag("h6") +export header = tag("header") +export hgroup = tag("hgroup") +export hr = tag("hr") +export i = tag("i") +export iframe = tag("iframe") +export img = tag("img") +export input = tag("input") +export ins = tag("ins") +export kbd = tag("kbd") +export label = tag("label") +export legend = tag("legend") +export li = tag("li") +export main = tag("main") +export mapElement = tag("map") +export mark = tag("mark") +export menu = tag("menu") +export menuitem = tag("menuitem") +export meta = tag("meta") +export meter = tag("meter") +export nav = tag("nav") +export noscript = tag("noscript") +export object = tag("object") +export ol = tag("ol") +export optgroup = tag("optgroup") +export option = tag("option") +export output = tag("output") +export p = tag("p") +export param = tag("param") +export picture = tag("picture") +export plaintext = tag("plaintext") +export pre = tag("pre") +export progress = tag("progress") +export q = tag("q") +export rp = tag("rp") +export rt = tag("rt") +export rtc = tag("rtc") +export ruby = tag("ruby") +export s = tag("s") +export samp = tag("samp") +export script = tag("script") +export section = tag("section") +export select = tag("select") +export shadow = tag("shadow") +export slot = tag("slot") +export small = tag("small") +export source = tag("source") +export span = tag("span") +export strong = tag("strong") +export sub = tag("sub") +export summary = tag("summary") +export sup = tag("sup") +export table = tag("table") +export tbody = tag("tbody") +export td = tag("td") +export template = tag("template") +export textarea = tag("textarea") +export tfoot = tag("tfoot") +export th = tag("th") +export thead = tag("thead") +export time = tag("time") +export title = tag("title") +export tr = tag("tr") +export track = tag("track") +export u = tag("u") +export ul = tag("ul") +export var = tag("var") +export video = tag("video") +export wbr = tag("wbr") + +text :: String -> Element b +export text = (t) => #- t -# + +empty :: List (Attribute b) -> List (Element b) -> Element b +export empty = (attrs, children) => #- null -# + + +#- +const triggerLink = (e, path) => { + e.preventDefault(); + const url = new URL(window.location) + const state = {} + let changed = true; + + if (window.env.routingKind === "BasicRouting") { + url.href = url.origin + path + changed = path !== window.location.pathname + } else if (window.env.routingKind === "HashRouting") { + url.hash = path + changed = path !== window.location.hash + } + + if (changed) { + history.pushState(state, "", url) + var popStateEvent = new PopStateEvent('popstate', { state }); + dispatchEvent(popStateEvent); + window.scrollTo(0, 0); + } +} +-# + +_link :: w -> List (Attribute b) -> List (Element b) -> Element b +export _link = (objectifyAttrs, attrs, children) => #- { + const objAttrs = objectifyAttrs(window.env, attrs); + if (objAttrs.attrs.to) { + if (!objAttrs.attrs) { + objAttrs.attrs = {} + } + if (window.env.routingKind === "HashRouting") { + objAttrs.attrs.href = `\#${objAttrs.attrs.to}` + } else { + objAttrs.attrs.href = `${objAttrs.attrs.to}` + } + delete objAttrs.attrs.to + } + + if (!objAttrs.on) { + objAttrs.on = {}; + } + + if (objAttrs.on.click) { + const current = objAttrs.on.click + objAttrs.on.click = (e) => { + triggerLink(e, objAttrs.attrs.href); + current(e) + } + } else { + objAttrs.on.click = (e) => { + triggerLink(e, objAttrs.attrs.href); + } + } + + return madui_h("a", { ...objAttrs }, __listToJSArray__(children)); +} -# + +link :: List (Attribute b) -> List (Element b) -> Element b +export link = _link(_objectifyAttrs(reduce, wrapEventHandler, EventConstructors)) + + +_matchRoute :: (List #[String, String] -> Dictionary String String) -> a -> b +_matchRoute = (fromStringList) => #- { + return (route) => { + let path = window.location.pathname + let search = window.location.search.substr(1) + + if (window.env.routingKind === "HashRouting") { + const hash = window.location.hash.substr(1) + if (!hash) { + path = "/" + search = "" + } else { + const [_path, _search] = hash.split("?") || "/" + path = _path + search = _search || "" + } + } + + const splitRoute = route.split("/") + const splitPath = path.split("/") + let urlParams = [] + let searchParams = [] + let good = true + + for (let i = 0; i < splitRoute.length && good; i++) { + const routePart = splitRoute[i] + const pathPart = splitPath[i] + + if (routePart === "*") { + break; + } else if (routePart.charAt(0) === ":") { + if (typeof pathPart !== "undefined" && (splitPath[i + 1] !== undefined && splitRoute[i + 1] !== undefined || splitPath[i + 1] === undefined && splitRoute[i + 1] === undefined)) { + urlParams.push([routePart.substr(1), pathPart]) + } else { + good = false + } + } else { + good = pathPart === routePart && (splitPath[i + 1] !== undefined && splitRoute[i + 1] !== undefined || splitPath[i + 1] === undefined && splitRoute[i + 1] === undefined) + } + } + + if (good) { + const vars = search.split("&") + vars.forEach((v) => { + const [name, value] = v.split("=") + searchParams.push([name, value ? value : ""]) + }) + } + + return good + ? { + urlParams: fromStringList(__jsArrayToList__(urlParams)), + searchParams: fromStringList(__jsArrayToList__(searchParams)), + } + : null + } +} -# + + +forRoute :: String -> (RouteInfo -> Element a) -> Element a +export forRoute = (route, enhancedView) => { + matchRoute = _matchRoute(fromList) + #- + const routeInfo = matchRoute(route) + const _match = routeInfo !== null + -# + + match = #- _match -# + return match ? enhancedView(#- routeInfo -#) : +} + + +switchRoute :: List #[String, RouteInfo -> Element b] -> Element b +export switchRoute = (matchers) => where(matchers) { + [#[route, enhancedView], ...nextMatchers] => + do { + matchRoute = _matchRoute(fromList) + #- + const routeInfo = matchRoute(route) + const _match = routeInfo !== null + -# + + match = #- _match -# + return match ? enhancedView(#- routeInfo -#) : switchRoute(nextMatchers) + } + + [] => + +} diff --git a/madlib_modules/MadUI/src/Event.mad b/madlib_modules/MadUI/src/Event.mad new file mode 100644 index 0000000..cb7a9f1 --- /dev/null +++ b/madlib_modules/MadUI/src/Event.mad @@ -0,0 +1,200 @@ +import type { Key } from "@/Key" + +import { getKeyFromCode } from "@/Key" + + + +// https://www.w3schools.com/tags/ref_eventattributes.asp + + +alias BaseEvent = { + bubbles :: Boolean, + defaultPrevented :: Boolean, + eventType :: String, + preventDefault :: {} -> {}, + stopImmediatePropagation :: {} -> {}, + stopPropagation :: {} -> {}, + timeStamp :: Integer, +} + + +export type Event + = AbstractEvent(BaseEvent) + | MouseEvent({ ...BaseEvent, clientX :: Integer, clientY :: Integer }) + | InputEvent({ + ...BaseEvent, + data :: String, + // Make an InputType type for it + inputType :: String, + target :: { innerText :: String, value :: String }, + }) + | KeyboardEvent({ + ...BaseEvent, + altKey :: Boolean, + ctrlKey :: Boolean, + key :: Key, + shiftKey :: Boolean, + }) + | PopStateEvent({ ...BaseEvent, path :: String, url :: String }) + + +// https://www.w3schools.com/jsref/obj_keyboardevent.asp +export buildKeyboardEvent = (e) => { + k = getKeyFromCode(e.keyCode) + + return KeyboardEvent({ + bubbles: e.bubbles, + defaultPrevented: e.defaultPrevented, + preventDefault: e.preventDefault, + stopImmediatePropagation: e.stopImmediatePropagation, + stopPropagation: e.stopPropagation, + timeStamp: e.timeStamp, + eventType: e.eventType, + key: k, + altKey: e.altKey, + ctrlKey: e.ctrlKey, + shiftKey: e.shiftKey, + }) +} + + +export buildInputEvent = (e) => InputEvent({ + bubbles: e.bubbles, + defaultPrevented: e.defaultPrevented, + preventDefault: e.preventDefault, + stopImmediatePropagation: e.stopImmediatePropagation, + stopPropagation: e.stopPropagation, + timeStamp: e.timeStamp, + eventType: e.eventType, + target: e.target, + data: e.data, + inputType: e.inputType, +}) + + +addDataTransfer :: a -> b -> a +addDataTransfer = (event, e) => #-{ + return { ...event, dataTransfer: e.dataTransfer } +}-# + + +export buildMouseEvent = (e) => MouseEvent( + addDataTransfer({ + bubbles: e.bubbles, + defaultPrevented: e.defaultPrevented, + preventDefault: e.preventDefault, + stopImmediatePropagation: e.stopImmediatePropagation, + stopPropagation: e.stopPropagation, + timeStamp: e.timeStamp, + eventType: e.eventType, + clientX: e.clientX, + clientY: e.clientY, + })(e), +) + + +export buildAbstractEvent = (e) => AbstractEvent({ + bubbles: e.bubbles, + defaultPrevented: e.defaultPrevented, + preventDefault: e.preventDefault, + stopImmediatePropagation: e.stopImmediatePropagation, + stopPropagation: e.stopPropagation, + timeStamp: e.timeStamp, + eventType: e.eventType, +}) + + +export buildPopStateEvent = (e) => PopStateEvent({ + url: #- document.location.href -#, + path: #- + window.env.routingKind === "BasicRouting" + ? document.location.pathname + : document.location.hash.substr(1) || "/" + -#, + bubbles: e.bubbles, + defaultPrevented: e.defaultPrevented, + preventDefault: e.preventDefault, + stopImmediatePropagation: e.stopImmediatePropagation, + stopPropagation: e.stopPropagation, + timeStamp: e.timeStamp, + eventType: e.eventType, +}) + + +export EventConstructors = { + abort: buildAbstractEvent, + afterprint: buildAbstractEvent, + beforeprint: buildAbstractEvent, + beforeunload: buildAbstractEvent, + blur: buildAbstractEvent, + canplay: buildAbstractEvent, + canplaythrough: buildAbstractEvent, + change: buildAbstractEvent, + click: buildMouseEvent, + contextmenu: buildAbstractEvent, + copy: buildAbstractEvent, + cuechange: buildAbstractEvent, + cut: buildAbstractEvent, + dblclick: buildMouseEvent, + drag: buildMouseEvent, + dragend: buildMouseEvent, + dragenter: buildMouseEvent, + dragleave: buildMouseEvent, + dragover: buildMouseEvent, + dragstart: buildMouseEvent, + drop: buildMouseEvent, + durationchange: buildAbstractEvent, + emptied: buildAbstractEvent, + ended: buildAbstractEvent, + error: buildAbstractEvent, + focus: buildAbstractEvent, + input: buildInputEvent, + invalid: buildAbstractEvent, + keydown: buildKeyboardEvent, + keypress: buildKeyboardEvent, + keyup: buildKeyboardEvent, + load: buildAbstractEvent, + loadeddata: buildAbstractEvent, + loadedmetadata: buildAbstractEvent, + loadstart: buildAbstractEvent, + mousedown: buildMouseEvent, + mouseenter: buildMouseEvent, + mouseleave: buildMouseEvent, + mousemove: buildMouseEvent, + mouseout: buildMouseEvent, + mouseover: buildMouseEvent, + mouseup: buildMouseEvent, + mousewheel: buildMouseEvent, + offline: buildAbstractEvent, + online: buildAbstractEvent, + pagehide: buildAbstractEvent, + pageshow: buildAbstractEvent, + paste: buildAbstractEvent, + pause: buildAbstractEvent, + play: buildAbstractEvent, + playing: buildAbstractEvent, + popstate: buildPopStateEvent, + progress: buildAbstractEvent, + ratechange: buildAbstractEvent, + reset: buildAbstractEvent, + resize: buildAbstractEvent, + scroll: buildAbstractEvent, + search: buildAbstractEvent, + seeked: buildAbstractEvent, + seeking: buildAbstractEvent, + select: buildAbstractEvent, + stalled: buildAbstractEvent, + storage: buildAbstractEvent, + submit: buildAbstractEvent, + suspend: buildAbstractEvent, + timeupdate: buildAbstractEvent, + toggle: buildAbstractEvent, + transitioncancel: buildAbstractEvent, + transitionend: buildAbstractEvent, + transitionrun: buildAbstractEvent, + transitionstart: buildAbstractEvent, + unload: buildAbstractEvent, + volumechange: buildAbstractEvent, + waiting: buildAbstractEvent, + wheel: buildAbstractEvent, +} diff --git a/madlib_modules/MadUI/src/Key.mad b/madlib_modules/MadUI/src/Key.mad new file mode 100644 index 0000000..37b0da3 --- /dev/null +++ b/madlib_modules/MadUI/src/Key.mad @@ -0,0 +1,366 @@ +import { fromList, get } from "Dictionary" +import { fromMaybe } from "Maybe" +import {} from "Number" + + + +export type Key + = KEY_ANY + | KEY_BREAK + | KEY_BACKSPACE + | KEY_TAB + | KEY_CLEAR + | KEY_ENTER + | KEY_SHIFT + | KEY_CTRL + | KEY_ALT + | KEY_PAUSE + | KEY_CAPS_LOCK + | KEY_HANGUL + | KEY_HANJA + | KEY_ESCAPE + | KEY_CONVERSION + | KEY_NON_CONVERSION + | KEY_SPACE + | KEY_PAGE_UP + | KEY_PAGE_DOWN + | KEY_END + | KEY_HOME + | KEY_LEFT_ARROW + | KEY_UP_ARROW + | KEY_RIGHT_ARROW + | KEY_DOWN_ARROW + | KEY_SELECT + | KEY_PRINT + | KEY_EXECUTE + | KEY_PRINT_SCREEN + | KEY_INSERT + | KEY_DELETE + | KEY_HELP + | KEY_0 + | KEY_1 + | KEY_2 + | KEY_3 + | KEY_4 + | KEY_5 + | KEY_6 + | KEY_7 + | KEY_8 + | KEY_9 + | KEY_COLON + | KEY_LEFT_CHEVRON + | KEY_EQUAL + | KEY_ESZETT + | KEY_AT + | KEY_A + | KEY_B + | KEY_C + | KEY_D + | KEY_E + | KEY_F + | KEY_G + | KEY_H + | KEY_I + | KEY_J + | KEY_K + | KEY_L + | KEY_M + | KEY_N + | KEY_O + | KEY_P + | KEY_Q + | KEY_R + | KEY_S + | KEY_T + | KEY_U + | KEY_V + | KEY_W + | KEY_X + | KEY_Y + | KEY_Z + | KEY_CMD_LEFT + | KEY_CMD_RIGHT + | KEY_SLEEP + | KEY_NUMPAD_0 + | KEY_NUMPAD_1 + | KEY_NUMPAD_2 + | KEY_NUMPAD_3 + | KEY_NUMPAD_4 + | KEY_NUMPAD_5 + | KEY_NUMPAD_6 + | KEY_NUMPAD_7 + | KEY_NUMPAD_8 + | KEY_NUMPAD_9 + | KEY_MULTIPLY + | KEY_ADD + | KEY_NUMPAD_PERIOD + | KEY_SUBSTRACT + | KEY_DECIMAL_POINT + | KEY_DIVIDE + | KEY_F1 + | KEY_F2 + | KEY_F3 + | KEY_F4 + | KEY_F5 + | KEY_F6 + | KEY_F7 + | KEY_F8 + | KEY_F9 + | KEY_F10 + | KEY_F11 + | KEY_F12 + | KEY_F13 + | KEY_F14 + | KEY_F15 + | KEY_F16 + | KEY_F17 + | KEY_F18 + | KEY_F19 + | KEY_F20 + | KEY_F21 + | KEY_F22 + | KEY_F23 + | KEY_F24 + | KEY_F25 + | KEY_F26 + | KEY_F27 + | KEY_F28 + | KEY_F29 + | KEY_F30 + | KEY_F31 + | KEY_F32 + | KEY_NUM_LOCK + | KEY_SCROLL_LOCK + | KEY_AIRPLANE_MODE + | KEY_CIRCONFLEX + | KEY_EXCLAMATION_MARK + | KEY_ARABIC_SEMI_COLON + | KEY_NUMBER_SIGN + | KEY_DOLLAR + | KEY_U_GRAVE_ACCENT + | KEY_PAGE_BACKWARD + | KEY_PAGE_FORWARD + | KEY_REFRESH + | KEY_RIGHT_PAREN + | KEY_ASTERISK + | KEY_TILDE + | KEY_MUTE + | KEY_NEXT + | KEY_PREVIOUS + | KEY_STOP + | KEY_PLAY_PAUSE + | KEY_EMAIL + | KEY_MUTE_UNMUTE + | KEY_DECREASE_VOLUME + | KEY_INCREASE_VOLUME + | KEY_SEMI_COLON + | KEY_COMMA + | KEY_DASH + | KEY_PERIOD + | KEY_FORWARD_SLASH + | KEY_GRAVE_ACCENT + | KEY_QUESTION_MARK + | KEY_BRACKET_LEFT + | KEY_BACK_SLASH + | KEY_BRACKET_RIGHT + | KEY_SINGLE_QUOTE + | KEY_BACK_TICK + | KEY_CMD + | KEY_ALTGR + | KEY_LEFT_BACK_SLASH + | KEY_GNOME_COMPOSE + | KEY_C_CEDILLA + | KEY_XF86_FORWARD + | KEY_XF86_BACKWARD + | KEY_ALPHA_NUMERIC + | KEY_HIRAGANA_KATAKANA + | KEY_HALF_WIDTH_FULL_WIDTH + | KEY_KANJI + | KEY_UNLOCK_TRACK_PAD + | KEY_TOGGLE_TOUCH_PAD + +KEY_CODE_MAPPINGS = fromList([ + #[3, KEY_BREAK], + #[8, KEY_BACKSPACE], + #[9, KEY_TAB], + #[12, KEY_CLEAR], + #[13, KEY_ENTER], + #[16, KEY_SHIFT], + #[17, KEY_CTRL], + #[18, KEY_ALT], + #[19, KEY_PAUSE], + #[20, KEY_CAPS_LOCK], + #[21, KEY_HANGUL], + #[25, KEY_HANJA], + #[27, KEY_ESCAPE], + #[28, KEY_CONVERSION], + #[29, KEY_NON_CONVERSION], + #[32, KEY_SPACE], + #[33, KEY_PAGE_UP], + #[34, KEY_PAGE_DOWN], + #[35, KEY_END], + #[36, KEY_HOME], + #[37, KEY_LEFT_ARROW], + #[38, KEY_UP_ARROW], + #[39, KEY_RIGHT_ARROW], + #[40, KEY_DOWN_ARROW], + #[41, KEY_SELECT], + #[42, KEY_PRINT], + #[43, KEY_EXECUTE], + #[44, KEY_PRINT_SCREEN], + #[45, KEY_INSERT], + #[46, KEY_DELETE], + #[47, KEY_HELP], + #[48, KEY_0], + #[49, KEY_1], + #[50, KEY_2], + #[51, KEY_3], + #[52, KEY_4], + #[53, KEY_5], + #[54, KEY_6], + #[55, KEY_7], + #[56, KEY_8], + #[57, KEY_9], + #[58, KEY_COLON], + #[59, KEY_EQUAL], + #[60, KEY_LEFT_CHEVRON], + #[61, KEY_EQUAL], + #[63, KEY_ESZETT], + #[64, KEY_AT], + #[65, KEY_A], + #[66, KEY_B], + #[67, KEY_C], + #[68, KEY_D], + #[69, KEY_E], + #[70, KEY_F], + #[71, KEY_G], + #[72, KEY_H], + #[73, KEY_I], + #[74, KEY_J], + #[75, KEY_K], + #[76, KEY_L], + #[77, KEY_M], + #[78, KEY_N], + #[79, KEY_O], + #[80, KEY_P], + #[81, KEY_Q], + #[82, KEY_R], + #[83, KEY_S], + #[84, KEY_T], + #[85, KEY_U], + #[86, KEY_V], + #[87, KEY_W], + #[88, KEY_X], + #[89, KEY_Y], + #[90, KEY_Z], + #[91, KEY_CMD_LEFT], + #[92, KEY_CMD_RIGHT], + #[93, KEY_CMD_RIGHT], + #[95, KEY_SLEEP], + #[96, KEY_NUMPAD_0], + #[97, KEY_NUMPAD_1], + #[98, KEY_NUMPAD_2], + #[99, KEY_NUMPAD_3], + #[100, KEY_NUMPAD_4], + #[101, KEY_NUMPAD_5], + #[102, KEY_NUMPAD_6], + #[103, KEY_NUMPAD_7], + #[104, KEY_NUMPAD_8], + #[105, KEY_NUMPAD_9], + #[106, KEY_MULTIPLY], + #[107, KEY_ADD], + #[108, KEY_NUMPAD_PERIOD], + #[109, KEY_SUBSTRACT], + #[110, KEY_DECIMAL_POINT], + #[111, KEY_DIVIDE], + #[112, KEY_F1], + #[113, KEY_F2], + #[114, KEY_F3], + #[115, KEY_F4], + #[116, KEY_F5], + #[117, KEY_F6], + #[118, KEY_F7], + #[119, KEY_F8], + #[120, KEY_F9], + #[121, KEY_F10], + #[122, KEY_F11], + #[123, KEY_F12], + #[124, KEY_F13], + #[125, KEY_F14], + #[126, KEY_F15], + #[127, KEY_F16], + #[128, KEY_F17], + #[129, KEY_F18], + #[130, KEY_F19], + #[131, KEY_F20], + #[132, KEY_F21], + #[133, KEY_F22], + #[134, KEY_F23], + #[135, KEY_F24], + #[136, KEY_F25], + #[137, KEY_F26], + #[138, KEY_F27], + #[139, KEY_F28], + #[140, KEY_F29], + #[141, KEY_F30], + #[142, KEY_F31], + #[143, KEY_F32], + #[144, KEY_NUM_LOCK], + #[145, KEY_SCROLL_LOCK], + #[151, KEY_AIRPLANE_MODE], + #[160, KEY_CIRCONFLEX], + #[161, KEY_EXCLAMATION_MARK], + #[162, KEY_ARABIC_SEMI_COLON], + #[163, KEY_NUMBER_SIGN], + #[164, KEY_DOLLAR], + #[165, KEY_U_GRAVE_ACCENT], + #[166, KEY_PAGE_BACKWARD], + #[167, KEY_PAGE_FORWARD], + #[168, KEY_REFRESH], + #[169, KEY_RIGHT_PAREN], + #[170, KEY_ASTERISK], + #[171, KEY_TILDE], + #[172, KEY_HOME], + #[173, KEY_MUTE], + #[174, KEY_DECREASE_VOLUME], + #[175, KEY_INCREASE_VOLUME], + #[176, KEY_NEXT], + #[177, KEY_PREVIOUS], + #[178, KEY_STOP], + #[179, KEY_PLAY_PAUSE], + #[180, KEY_EMAIL], + #[181, KEY_MUTE_UNMUTE], + #[182, KEY_DECREASE_VOLUME], + #[183, KEY_INCREASE_VOLUME], + #[186, KEY_SEMI_COLON], + #[187, KEY_EQUAL], + #[188, KEY_COMMA], + #[189, KEY_DASH], + #[190, KEY_PERIOD], + #[191, KEY_FORWARD_SLASH], + #[192, KEY_GRAVE_ACCENT], + #[193, KEY_QUESTION_MARK], + #[194, KEY_NUMPAD_PERIOD], + #[219, KEY_BRACKET_LEFT], + #[220, KEY_BACK_SLASH], + #[221, KEY_BRACKET_RIGHT], + #[222, KEY_SINGLE_QUOTE], + #[223, KEY_BACK_TICK], + #[224, KEY_CMD], + #[225, KEY_ALTGR], + #[226, KEY_LEFT_BACK_SLASH], + #[230, KEY_GNOME_COMPOSE], + #[231, KEY_C_CEDILLA], + #[233, KEY_XF86_FORWARD], + #[234, KEY_XF86_BACKWARD], + #[235, KEY_NON_CONVERSION], + #[240, KEY_ALPHA_NUMERIC], + #[242, KEY_HIRAGANA_KATAKANA], + #[243, KEY_HALF_WIDTH_FULL_WIDTH], + #[244, KEY_KANJI], + #[251, KEY_UNLOCK_TRACK_PAD], + #[255, KEY_TOGGLE_TOUCH_PAD], +]) + +getKeyFromCode :: Integer -> Key +export getKeyFromCode = (keyCode) => fromMaybe(KEY_ANY, get(keyCode, KEY_CODE_MAPPINGS)) diff --git a/madlib_modules/MadUI/src/Main.mad b/madlib_modules/MadUI/src/Main.mad new file mode 100644 index 0000000..2cc1306 --- /dev/null +++ b/madlib_modules/MadUI/src/Main.mad @@ -0,0 +1,1009 @@ +import type { Action, GlobalAction } from "@/Action" +import type { Attribute } from "@/Attribute" +import type { Config, RoutingKind } from "@/Config" +import type { Element } from "@/Element" +import type { Event } from "@/Event" +import type { Key } from "@/Key" +import type { Subscription } from "@/Subscription" + +import {} from "Number" + +import { + onAfterPrint, + onBeforePrint, + onBeforeUnload, + onDocumentLoad, + onOffline, + onOnline, + onPageHide, + onPageShow, + onResize, + onUnload, + onUrlChanged, + syncAction, + throttleAction, +} from "@/Action" +import { + accept, + acceptCharset, + accessKey, + action, + altAttribute, + async, + autocomplete, + autofocus, + autoplay, + checked, + citeAttr, + className, + cols, + colspan, + contenteditable, + controls, + coords, + dataAttr, + datetime, + default, + defer, + dir, + dirname, + disabled, + download, + draggable, + enctype, + for, + formAttr, + formaction, + headers, + height, + hidden, + high, + href, + hreflang, + id, + innerHTML, + innerText, + inputType, + ismap, + key, + kind, + labelAttr, + lang, + list, + loop, + low, + max, + maxlength, + media, + method, + min, + multiple, + muted, + name, + novalidate, + onAbort, + onBlur, + onCanPlay, + onCanPlayThrough, + onChange, + onClick, + onContextMenu, + onCopy, + onCueChange, + onCut, + onDblClick, + onDrag, + onDragEnd, + onDragEnter, + onDragLeave, + onDragOver, + onDragStart, + onDrop, + onDurationChange, + onEmptied, + onEnded, + onError, + onFocus, + onInput, + onInvalid, + onKeyDown, + onKeyPress, + onKeyUp, + onLoad, + onLoadStart, + onLoadedData, + onLoadedMetaData, + onMouseDown, + onMouseEnter, + onMouseLeave, + onMouseMove, + onMouseOut, + onMouseOver, + onMouseUp, + onMouseWheel, + onPaste, + onPause, + onPlay, + onPlaying, + onProgress, + onRateChange, + onReset, + onScroll, + onSearch, + onSeeked, + onSeeking, + onSelect, + onStalled, + onSubmit, + onSuspend, + onTimeUpdate, + onToggle, + onTransitionCancel, + onTransitionEnd, + onTransitionRun, + onTransitionStart, + onVolumeChange, + onWaiting, + onWheel, + open, + optimum, + pattern, + placeholder, + poster, + preload, + readonly, + rel, + required, + reversed, + rows, + rowspan, + sandbox, + scope, + selected, + shape, + size, + sizes, + spanAttr, + spellcheck, + src, + srcdoc, + srclang, + srcset, + start, + step, + stringAttribute, + style, + tabindex, + target, + titleAttr, + to, + translate, + usemap, + value, + width, + wrap, +} from "@/Attribute" +import { + BasicRouting, + DEFAULT_CONFIG, + HashRouting, + addGlobalEventHandler, + addSubscription, +} from "@/Config" +import { getPathName, getUrl, render, renderWithConfig } from "@/Core" +import { + a, + abbr, + address, + area, + article, + aside, + audio, + b, + bdi, + bdo, + blockquote, + br, + button, + canvas, + caption, + cite, + code, + col, + colgroup, + content, + data, + datalist, + dd, + del, + details, + dfn, + dialog, + div, + dl, + dt, + em, + embed, + empty, + fieldset, + figcaption, + figure, + footer, + forRoute, + form, + h1, + h2, + h3, + h4, + h5, + h6, + header, + hgroup, + hr, + i, + iframe, + img, + input, + ins, + kbd, + label, + legend, + li, + link, + main, + mapElement, + mark, + menu, + menuitem, + meta, + meter, + nav, + noscript, + object, + ol, + optgroup, + option, + output, + p, + param, + picture, + plaintext, + pre, + progress, + q, + rp, + rt, + rtc, + ruby, + s, + samp, + script, + section, + select, + shadow, + slot, + small, + source, + span, + strong, + sub, + summary, + sup, + switchRoute, + table, + tag, + tbody, + td, + template, + text, + textarea, + tfoot, + th, + thead, + time, + title, + tr, + track, + u, + ul, + var, + video, + wbr, +} from "@/Element" +import { AbstractEvent, InputEvent, KeyboardEvent, MouseEvent, PopStateEvent } from "@/Event" +import { + KEY_0, + KEY_1, + KEY_2, + KEY_3, + KEY_4, + KEY_5, + KEY_6, + KEY_7, + KEY_8, + KEY_9, + KEY_A, + KEY_ADD, + KEY_AIRPLANE_MODE, + KEY_ALPHA_NUMERIC, + KEY_ALT, + KEY_ALTGR, + KEY_ANY, + KEY_ARABIC_SEMI_COLON, + KEY_ASTERISK, + KEY_AT, + KEY_B, + KEY_BACKSPACE, + KEY_BACK_SLASH, + KEY_BACK_TICK, + KEY_BRACKET_LEFT, + KEY_BRACKET_RIGHT, + KEY_BREAK, + KEY_C, + KEY_CAPS_LOCK, + KEY_CIRCONFLEX, + KEY_CLEAR, + KEY_CMD, + KEY_CMD_LEFT, + KEY_CMD_RIGHT, + KEY_COLON, + KEY_COMMA, + KEY_CONVERSION, + KEY_CTRL, + KEY_C_CEDILLA, + KEY_D, + KEY_DASH, + KEY_DECIMAL_POINT, + KEY_DECREASE_VOLUME, + KEY_DELETE, + KEY_DIVIDE, + KEY_DOLLAR, + KEY_DOWN_ARROW, + KEY_E, + KEY_EMAIL, + KEY_END, + KEY_ENTER, + KEY_EQUAL, + KEY_ESCAPE, + KEY_ESZETT, + KEY_EXCLAMATION_MARK, + KEY_EXECUTE, + KEY_F, + KEY_F1, + KEY_F10, + KEY_F11, + KEY_F12, + KEY_F13, + KEY_F14, + KEY_F15, + KEY_F16, + KEY_F17, + KEY_F18, + KEY_F19, + KEY_F2, + KEY_F20, + KEY_F21, + KEY_F22, + KEY_F23, + KEY_F24, + KEY_F25, + KEY_F26, + KEY_F27, + KEY_F28, + KEY_F29, + KEY_F3, + KEY_F30, + KEY_F31, + KEY_F32, + KEY_F4, + KEY_F5, + KEY_F6, + KEY_F7, + KEY_F8, + KEY_F9, + KEY_FORWARD_SLASH, + KEY_G, + KEY_GNOME_COMPOSE, + KEY_GRAVE_ACCENT, + KEY_H, + KEY_HALF_WIDTH_FULL_WIDTH, + KEY_HANGUL, + KEY_HANJA, + KEY_HELP, + KEY_HIRAGANA_KATAKANA, + KEY_HOME, + KEY_I, + KEY_INCREASE_VOLUME, + KEY_INSERT, + KEY_J, + KEY_K, + KEY_KANJI, + KEY_L, + KEY_LEFT_ARROW, + KEY_LEFT_BACK_SLASH, + KEY_LEFT_CHEVRON, + KEY_M, + KEY_MULTIPLY, + KEY_MUTE, + KEY_MUTE_UNMUTE, + KEY_N, + KEY_NEXT, + KEY_NON_CONVERSION, + KEY_NUMBER_SIGN, + KEY_NUMPAD_0, + KEY_NUMPAD_1, + KEY_NUMPAD_2, + KEY_NUMPAD_3, + KEY_NUMPAD_4, + KEY_NUMPAD_5, + KEY_NUMPAD_6, + KEY_NUMPAD_7, + KEY_NUMPAD_8, + KEY_NUMPAD_9, + KEY_NUMPAD_PERIOD, + KEY_NUM_LOCK, + KEY_O, + KEY_P, + KEY_PAGE_BACKWARD, + KEY_PAGE_DOWN, + KEY_PAGE_FORWARD, + KEY_PAGE_UP, + KEY_PAUSE, + KEY_PERIOD, + KEY_PLAY_PAUSE, + KEY_PREVIOUS, + KEY_PRINT, + KEY_PRINT_SCREEN, + KEY_Q, + KEY_QUESTION_MARK, + KEY_R, + KEY_REFRESH, + KEY_RIGHT_ARROW, + KEY_RIGHT_PAREN, + KEY_S, + KEY_SCROLL_LOCK, + KEY_SELECT, + KEY_SEMI_COLON, + KEY_SHIFT, + KEY_SINGLE_QUOTE, + KEY_SLEEP, + KEY_SPACE, + KEY_STOP, + KEY_SUBSTRACT, + KEY_T, + KEY_TAB, + KEY_TILDE, + KEY_TOGGLE_TOUCH_PAD, + KEY_U, + KEY_UNLOCK_TRACK_PAD, + KEY_UP_ARROW, + KEY_U_GRAVE_ACCENT, + KEY_V, + KEY_W, + KEY_X, + KEY_XF86_BACKWARD, + KEY_XF86_FORWARD, + KEY_Y, + KEY_Z, +} from "@/Key" +import { every } from "@/Subscription" + + + +// Types + +export type Element +export type Config +export type RoutingKind +export type Attribute +export type Action +export type GlobalAction +export type Subscription +export type Event + + + +// Elements + +export tag +export a +export abbr +export address +export area +export article +export aside +export audio +export b +export bdi +export bdo +export blockquote +export br +export button +export canvas +export caption +export cite +export code +export col +export colgroup +export content +export data +export datalist +export dd +export del +export details +export dfn +export dialog +export div +export dl +export dt +export em +export embed +export fieldset +export figcaption +export figure +export footer +export form +export h1 +export h2 +export h3 +export h4 +export h5 +export h6 +export header +export hgroup +export hr +export i +export iframe +export img +export input +export ins +export kbd +export label +export legend +export li +export main +export mapElement +export mark +export menu +export menuitem +export meta +export meter +export nav +export noscript +export object +export ol +export optgroup +export option +export output +export p +export param +export picture +export plaintext +export pre +export progress +export q +export rp +export rt +export rtc +export ruby +export s +export samp +export script +export section +export select +export shadow +export slot +export small +export source +export span +export strong +export sub +export summary +export sup +export table +export tbody +export td +export template +export textarea +export tfoot +export th +export thead +export time +export title +export tr +export track +export u +export ul +export var +export video +export wbr +export empty +export link +export text +export forRoute +export switchRoute + + +// Attributes + +export stringAttribute +export accept +export acceptCharset +export accessKey +export action +export altAttribute +export async +export autocomplete +export autofocus +export autoplay +export checked +export citeAttr +export className +export cols +export colspan +export contenteditable +export controls +export coords +export dataAttr +export datetime +export default +export defer +export dir +export dirname +export disabled +export download +export draggable +export enctype +export for +export formAttr +export formaction +export headers +export height +export hidden +export high +export href +export hreflang +export id +export innerHTML +export innerText +export inputType +export ismap +export key +export kind +export labelAttr +export lang +export list +export loop +export low +export max +export maxlength +export media +export method +export min +export multiple +export muted +export name +export novalidate +export onAbort +export onBlur +export onCanPlay +export onCanPlayThrough +export onChange +export onClick +export onContextMenu +export onCopy +export onCueChange +export onCut +export onDblClick +export onDrag +export onDragEnd +export onDragEnter +export onDragLeave +export onDragOver +export onDragStart +export onDrop +export onDurationChange +export onEmptied +export onEnded +export onError +export onFocus +export onInput +export onInvalid +export onKeyPress +export onKeyDown +export onKeyUp +export onLoad +export onLoadedData +export onLoadedMetaData +export onLoadStart +export onMouseDown +export onMouseEnter +export onMouseLeave +export onMouseMove +export onMouseOut +export onMouseOver +export onMouseUp +export onMouseWheel +export onPaste +export onPause +export onPlay +export onPlaying +export onProgress +export onRateChange +export onReset +export onScroll +export onSearch +export onSeeked +export onSeeking +export onSelect +export onStalled +export onSubmit +export onSuspend +export onTimeUpdate +export onToggle +export onTransitionCancel +export onTransitionEnd +export onTransitionRun +export onTransitionStart +export onVolumeChange +export onWaiting +export onWheel +export open +export optimum +export pattern +export placeholder +export poster +export preload +export readonly +export rel +export required +export reversed +export rows +export rowspan +export sandbox +export scope +export selected +export shape +export size +export sizes +export spanAttr +export spellcheck +export src +export srcdoc +export srclang +export srcset +export start +export step +export style +export tabindex +export target +export titleAttr +export to +export translate +export usemap +export value +export width +export wrap + +// Actions + +export syncAction +export throttleAction +export onAfterPrint +export onBeforePrint +export onBeforeUnload +export onDocumentLoad +export onPageHide +export onPageShow +export onOffline +export onOnline +export onResize +export onUnload +export onUrlChanged +export getPathName +export getUrl + +// Config + +export DEFAULT_CONFIG +export HashRouting +export BasicRouting +export addGlobalEventHandler +export addSubscription + +// Events + +export AbstractEvent +export MouseEvent +export InputEvent +export KeyboardEvent +export PopStateEvent + + +// Core + +export render +export renderWithConfig + + +// Subscription + +export every + +// Keys + +export type Key + +export KEY_ANY +export KEY_BREAK +export KEY_BACKSPACE +export KEY_TAB +export KEY_CLEAR +export KEY_ENTER +export KEY_SHIFT +export KEY_CTRL +export KEY_ALT +export KEY_PAUSE +export KEY_CAPS_LOCK +export KEY_HANGUL +export KEY_HANJA +export KEY_ESCAPE +export KEY_CONVERSION +export KEY_NON_CONVERSION +export KEY_SPACE +export KEY_PAGE_UP +export KEY_PAGE_DOWN +export KEY_END +export KEY_HOME +export KEY_LEFT_ARROW +export KEY_UP_ARROW +export KEY_RIGHT_ARROW +export KEY_DOWN_ARROW +export KEY_SELECT +export KEY_PRINT +export KEY_EXECUTE +export KEY_PRINT_SCREEN +export KEY_INSERT +export KEY_DELETE +export KEY_HELP +export KEY_0 +export KEY_1 +export KEY_2 +export KEY_3 +export KEY_4 +export KEY_5 +export KEY_6 +export KEY_7 +export KEY_8 +export KEY_9 +export KEY_COLON +export KEY_LEFT_CHEVRON +export KEY_EQUAL +export KEY_ESZETT +export KEY_AT +export KEY_A +export KEY_B +export KEY_C +export KEY_D +export KEY_E +export KEY_F +export KEY_G +export KEY_H +export KEY_I +export KEY_J +export KEY_K +export KEY_L +export KEY_M +export KEY_N +export KEY_O +export KEY_P +export KEY_Q +export KEY_R +export KEY_S +export KEY_T +export KEY_U +export KEY_V +export KEY_W +export KEY_X +export KEY_Y +export KEY_Z +export KEY_CMD_LEFT +export KEY_CMD_RIGHT +export KEY_SLEEP +export KEY_NUMPAD_0 +export KEY_NUMPAD_1 +export KEY_NUMPAD_2 +export KEY_NUMPAD_3 +export KEY_NUMPAD_4 +export KEY_NUMPAD_5 +export KEY_NUMPAD_6 +export KEY_NUMPAD_7 +export KEY_NUMPAD_8 +export KEY_NUMPAD_9 +export KEY_MULTIPLY +export KEY_ADD +export KEY_NUMPAD_PERIOD +export KEY_SUBSTRACT +export KEY_DECIMAL_POINT +export KEY_DIVIDE +export KEY_F1 +export KEY_F2 +export KEY_F3 +export KEY_F4 +export KEY_F5 +export KEY_F6 +export KEY_F7 +export KEY_F8 +export KEY_F9 +export KEY_F10 +export KEY_F11 +export KEY_F12 +export KEY_F13 +export KEY_F14 +export KEY_F15 +export KEY_F16 +export KEY_F17 +export KEY_F18 +export KEY_F19 +export KEY_F20 +export KEY_F21 +export KEY_F22 +export KEY_F23 +export KEY_F24 +export KEY_F25 +export KEY_F26 +export KEY_F27 +export KEY_F28 +export KEY_F29 +export KEY_F30 +export KEY_F31 +export KEY_F32 +export KEY_NUM_LOCK +export KEY_SCROLL_LOCK +export KEY_AIRPLANE_MODE +export KEY_CIRCONFLEX +export KEY_EXCLAMATION_MARK +export KEY_ARABIC_SEMI_COLON +export KEY_NUMBER_SIGN +export KEY_DOLLAR +export KEY_U_GRAVE_ACCENT +export KEY_PAGE_BACKWARD +export KEY_PAGE_FORWARD +export KEY_REFRESH +export KEY_RIGHT_PAREN +export KEY_ASTERISK +export KEY_TILDE +export KEY_MUTE +export KEY_NEXT +export KEY_PREVIOUS +export KEY_STOP +export KEY_PLAY_PAUSE +export KEY_EMAIL +export KEY_MUTE_UNMUTE +export KEY_DECREASE_VOLUME +export KEY_INCREASE_VOLUME +export KEY_SEMI_COLON +export KEY_COMMA +export KEY_DASH +export KEY_PERIOD +export KEY_FORWARD_SLASH +export KEY_GRAVE_ACCENT +export KEY_QUESTION_MARK +export KEY_BRACKET_LEFT +export KEY_BACK_SLASH +export KEY_BRACKET_RIGHT +export KEY_SINGLE_QUOTE +export KEY_BACK_TICK +export KEY_CMD +export KEY_ALTGR +export KEY_LEFT_BACK_SLASH +export KEY_GNOME_COMPOSE +export KEY_C_CEDILLA +export KEY_XF86_FORWARD +export KEY_XF86_BACKWARD +export KEY_ALPHA_NUMERIC +export KEY_HIRAGANA_KATAKANA +export KEY_HALF_WIDTH_FULL_WIDTH +export KEY_KANJI +export KEY_UNLOCK_TRACK_PAD +export KEY_TOGGLE_TOUCH_PAD diff --git a/madlib_modules/MadUI/src/Subscription.mad b/madlib_modules/MadUI/src/Subscription.mad new file mode 100644 index 0000000..e649f10 --- /dev/null +++ b/madlib_modules/MadUI/src/Subscription.mad @@ -0,0 +1,6 @@ +export alias Subscription a = ((a -> a) -> {}) -> {} + +every :: Integer -> (a -> a) -> Subscription a +export every = (ms, fn, dispatch) => #-{ + setInterval(() => { dispatch(fn) }, ms); +}-# diff --git a/madlib_modules/MadUI/version.lock b/madlib_modules/MadUI/version.lock new file mode 100644 index 0000000..04eea3d --- /dev/null +++ b/madlib_modules/MadUI/version.lock @@ -0,0 +1,972 @@ +{ + "buildHash": "4537a041405f73ef43ef20a07db39902", + "jsApi": { + "apiInstances": [], + "apiAliases": {}, + "apiInterfaces": {}, + "apiNames": { + "KEY_6": "Key", + "tfoot": "List (Attribute a) -> List (Element a) -> Element a", + "getPathName": "a -> String", + "progress": "List (Attribute a) -> List (Element a) -> Element a", + "KEY_F24": "Key", + "KEY_V": "Key", + "novalidate": "Boolean -> Attribute a", + "onWaiting": "(a -> Event -> List (Wish (a -> a) (a -> a))) -> Attribute a", + "formAttr": "String -> Attribute a", + "KEY_PREVIOUS": "Key", + "KEY_F14": "Key", + "KEY_COLON": "Key", + "KEY_U_GRAVE_ACCENT": "Key", + "a": "List (Attribute a) -> List (Element a) -> Element a", + "key": "String -> Attribute a", + "KEY_NUM_LOCK": "Key", + "onContextMenu": "(a -> Event -> List (Wish (a -> a) (a -> a))) -> Attribute a", + "bdi": "List (Attribute a) -> List (Element a) -> Element a", + "KEY_NUMPAD_PERIOD": "Key", + "srcset": "String -> Attribute a", + "onCanPlay": "(a -> Event -> List (Wish (a -> a) (a -> a))) -> Attribute a", + "noscript": "List (Attribute a) -> List (Element a) -> Element a", + "KEY_M": "Key", + "KEY_GNOME_COMPOSE": "Key", + "onPlay": "(a -> Event -> List (Wish (a -> a) (a -> a))) -> Attribute a", + "syncAction": "(a -> Event -> a) -> a -> Event -> List (Wish (a -> a) (a -> a))", + "KEY_DELETE": "Key", + "onDragLeave": "(a -> Event -> List (Wish (a -> a) (a -> a))) -> Attribute a", + "KEY_ANY": "Key", + "rowspan": "Integer -> Attribute a", + "samp": "List (Attribute a) -> List (Element a) -> Element a", + "KEY_EMAIL": "Key", + "src": "String -> Attribute a", + "h1": "List (Attribute a) -> List (Element a) -> Element a", + "name": "String -> Attribute a", + "caption": "List (Attribute a) -> List (Element a) -> Element a", + "KEY_RIGHT_ARROW": "Key", + "KEY_AT": "Key", + "onKeyDown": "(a -> Event -> List (Wish (a -> a) (a -> a))) -> Attribute a", + "onMouseDown": "(a -> Event -> List (Wish (a -> a) (a -> a))) -> Attribute a", + "object": "List (Attribute a) -> List (Element a) -> Element a", + "KEY_F19": "Key", + "figure": "List (Attribute a) -> List (Element a) -> Element a", + "h6": "List (Attribute a) -> List (Element a) -> Element a", + "rtc": "List (Attribute a) -> List (Element a) -> Element a", + "KEY_G": "Key", + "KEY_BRACKET_LEFT": "Key", + "section": "List (Attribute a) -> List (Element a) -> Element a", + "del": "List (Attribute a) -> List (Element a) -> Element a", + "param": "List (Attribute a) -> List (Element a) -> Element a", + "meta": "List (Attribute a) -> List (Element a) -> Element a", + "col": "List (Attribute a) -> List (Element a) -> Element a", + "onVolumeChange": "(a -> Event -> List (Wish (a -> a) (a -> a))) -> Attribute a", + "colspan": "Integer -> Attribute a", + "required": "Boolean -> Attribute a", + "code": "List (Attribute a) -> List (Element a) -> Element a", + "KEY_F31": "Key", + "header": "List (Attribute a) -> List (Element a) -> Element a", + "hgroup": "List (Attribute a) -> List (Element a) -> Element a", + "onSelect": "(a -> Event -> List (Wish (a -> a) (a -> a))) -> Attribute a", + "headers": "String -> Attribute a", + "KEY_NUMPAD_1": "Key", + "KEY_DIVIDE": "Key", + "picture": "List (Attribute a) -> List (Element a) -> Element a", + "tabindex": "Integer -> Attribute a", + "aside": "List (Attribute a) -> List (Element a) -> Element a", + "KEY_F28": "Key", + "method": "Method -> Attribute a", + "blockquote": "List (Attribute a) -> List (Element a) -> Element a", + "KEY_Z": "Key", + "KEY_F1": "Key", + "onTimeUpdate": "(a -> Event -> List (Wish (a -> a) (a -> a))) -> Attribute a", + "selected": "Boolean -> Attribute a", + "KEY_MUTE_UNMUTE": "Key", + "KEY_1": "Key", + "textarea": "List (Attribute a) -> List (Element a) -> Element a", + "rel": "String -> Attribute a", + "KEY_SELECT": "Key", + "KEY_SEMI_COLON": "Key", + "onBeforePrint": "(a -> Event -> List (Wish (a -> a) (a -> a))) -> GlobalAction a", + "KEY_BACK_TICK": "Key", + "switchRoute": "List #[String, { searchParams :: Dictionary String String, urlParams :: Dictionary String String } -> Element a] -> Element a", + "for": "String -> Attribute a", + "datalist": "List (Attribute a) -> List (Element a) -> Element a", + "KEY_F23": "Key", + "renderWithConfig": "{ globalEventHandlers :: List (GlobalAction a), routingKind :: RoutingKind, subscriptions :: List (((a -> a) -> {}) -> {}) } -> (a -> Element a) -> a -> String -> {}", + "onTransitionCancel": "(a -> Event -> List (Wish (a -> a) (a -> a))) -> Attribute a", + "KEY_Q": "Key", + "iframe": "List (Attribute a) -> List (Element a) -> Element a", + "KEY_PRINT_SCREEN": "Key", + "onEmptied": "(a -> Event -> List (Wish (a -> a) (a -> a))) -> Attribute a", + "onInput": "(a -> Event -> List (Wish (a -> a) (a -> a))) -> Attribute a", + "abbr": "List (Attribute a) -> List (Element a) -> Element a", + "KEY_AIRPLANE_MODE": "Key", + "KEY_NEXT": "Key", + "KEY_F26": "Key", + "KEY_DECIMAL_POINT": "Key", + "onMouseLeave": "(a -> Event -> List (Wish (a -> a) (a -> a))) -> Attribute a", + "KEY_T": "Key", + "cols": "Integer -> Attribute a", + "HashRouting": "RoutingKind", + "AbstractEvent": "{ bubbles :: Boolean, defaultPrevented :: Boolean, eventType :: String, preventDefault :: {} -> {}, stopImmediatePropagation :: {} -> {}, stopPropagation :: {} -> {}, timeStamp :: Integer } -> Event", + "menu": "List (Attribute a) -> List (Element a) -> Element a", + "KEY_HOME": "Key", + "maxlength": "Integer -> Attribute a", + "KEY_ALPHA_NUMERIC": "Key", + "KEY_4": "Key", + "onPaste": "(a -> Event -> List (Wish (a -> a) (a -> a))) -> Attribute a", + "onWheel": "(a -> Event -> List (Wish (a -> a) (a -> a))) -> Attribute a", + "button": "List (Attribute a) -> List (Element a) -> Element a", + "bdo": "List (Attribute a) -> List (Element a) -> Element a", + "fieldset": "List (Attribute a) -> List (Element a) -> Element a", + "KEY_SLEEP": "Key", + "shadow": "List (Attribute a) -> List (Element a) -> Element a", + "throttleAction": "Integer -> (a -> Event -> List (Wish (a -> a) (a -> a))) -> a -> Event -> List (Wish (a -> a) (a -> a))", + "KEY_K": "Key", + "plaintext": "List (Attribute a) -> List (Element a) -> Element a", + "KEY_F12": "Key", + "DEFAULT_CONFIG": "{ globalEventHandlers :: List (GlobalAction a), routingKind :: RoutingKind, subscriptions :: List (((a -> a) -> {}) -> {}) }", + "loop": "Boolean -> Attribute a", + "open": "Boolean -> Attribute a", + "low": "Integer -> Attribute a", + "sub": "List (Attribute a) -> List (Element a) -> Element a", + "audio": "List (Attribute a) -> List (Element a) -> Element a", + "max": "Integer -> Attribute a", + "ismap": "Boolean -> Attribute a", + "enctype": "String -> Attribute a", + "label": "List (Attribute a) -> List (Element a) -> Element a", + "rows": "Integer -> Attribute a", + "pattern": "String -> Attribute a", + "KEY_N": "Key", + "KEY_F17": "Key", + "KEY_EXCLAMATION_MARK": "Key", + "b": "List (Attribute a) -> List (Element a) -> Element a", + "h4": "List (Attribute a) -> List (Element a) -> Element a", + "muted": "Boolean -> Attribute a", + "wbr": "List (Attribute a) -> List (Element a) -> Element a", + "menuitem": "List (Attribute a) -> List (Element a) -> Element a", + "default": "Boolean -> Attribute a", + "KEY_EXECUTE": "Key", + "onOnline": "(a -> Event -> List (Wish (a -> a) (a -> a))) -> GlobalAction a", + "KEY_FORWARD_SLASH": "Key", + "KEY_E": "Key", + "accept": "String -> Attribute a", + "list": "String -> Attribute a", + "i": "List (Attribute a) -> List (Element a) -> Element a", + "onProgress": "(a -> Event -> List (Wish (a -> a) (a -> a))) -> Attribute a", + "dir": "String -> Attribute a", + "KEY_8": "Key", + "KEY_NUMPAD_3": "Key", + "onResize": "(a -> Event -> List (Wish (a -> a) (a -> a))) -> GlobalAction a", + "KEY_ESZETT": "Key", + "tag": "String -> List (Attribute a) -> List (Element a) -> Element a", + "defer": "Boolean -> Attribute a", + "KEY_X": "Key", + "KEY_F3": "Key", + "start": "Integer -> Attribute a", + "onLoadedMetaData": "(a -> Event -> List (Wish (a -> a) (a -> a))) -> Attribute a", + "KEY_HANJA": "Key", + "KEY_ALTGR": "Key", + "KEY_LEFT_ARROW": "Key", + "ul": "List (Attribute a) -> List (Element a) -> Element a", + "KEY_NUMPAD_4": "Key", + "KEY_DECREASE_VOLUME": "Key", + "onError": "(a -> Event -> List (Wish (a -> a) (a -> a))) -> Attribute a", + "KEY_ALT": "Key", + "KEY_F4": "Key", + "KEY_LEFT_BACK_SLASH": "Key", + "s": "List (Attribute a) -> List (Element a) -> Element a", + "rt": "List (Attribute a) -> List (Element a) -> Element a", + "link": "List (Attribute a) -> List (Element a) -> Element a", + "KEY_BACKSPACE": "Key", + "style": "Dictionary String String -> Attribute a", + "KEY_ASTERISK": "Key", + "kind": "String -> Attribute a", + "innerText": "String -> Attribute a", + "figcaption": "List (Attribute a) -> List (Element a) -> Element a", + "small": "List (Attribute a) -> List (Element a) -> Element a", + "KEY_HELP": "Key", + "KEY_F20": "Key", + "KEY_R": "Key", + "time": "List (Attribute a) -> List (Element a) -> Element a", + "summary": "List (Attribute a) -> List (Element a) -> Element a", + "onDragEnd": "(a -> Event -> List (Wish (a -> a) (a -> a))) -> Attribute a", + "to": "String -> Attribute a", + "KEY_F9": "Key", + "onTransitionStart": "(a -> Event -> List (Wish (a -> a) (a -> a))) -> Attribute a", + "onRateChange": "(a -> Event -> List (Wish (a -> a) (a -> a))) -> Attribute a", + "acceptCharset": "String -> Attribute a", + "ol": "List (Attribute a) -> List (Element a) -> Element a", + "onLoad": "(a -> Event -> List (Wish (a -> a) (a -> a))) -> Attribute a", + "KEY_2": "Key", + "KEY_MUTE": "Key", + "KEY_NUMPAD_9": "Key", + "inputType": "String -> Attribute a", + "size": "Integer -> Attribute a", + "KEY_NUMBER_SIGN": "Key", + "contenteditable": "Boolean -> Attribute a", + "checked": "Boolean -> Attribute a", + "KEY_ARABIC_SEMI_COLON": "Key", + "onCanPlayThrough": "(a -> Event -> List (Wish (a -> a) (a -> a))) -> Attribute a", + "autocomplete": "Boolean -> Attribute a", + "optimum": "Integer -> Attribute a", + "dd": "List (Attribute a) -> List (Element a) -> Element a", + "onClick": "(a -> Event -> List (Wish (a -> a) (a -> a))) -> Attribute a", + "labelAttr": "String -> Attribute a", + "KEY_DOWN_ARROW": "Key", + "KEY_I": "Key", + "high": "Integer -> Attribute a", + "KEY_F10": "Key", + "form": "List (Attribute a) -> List (Element a) -> Element a", + "formaction": "String -> Attribute a", + "em": "List (Attribute a) -> List (Element a) -> Element a", + "spellcheck": "Boolean -> Attribute a", + "br": "List (Attribute a) -> List (Element a) -> Element a", + "KEY_PLAY_PAUSE": "Key", + "target": "String -> Attribute a", + "cite": "List (Attribute a) -> List (Element a) -> Element a", + "details": "List (Attribute a) -> List (Element a) -> Element a", + "legend": "List (Attribute a) -> List (Element a) -> Element a", + "KEY_BACK_SLASH": "Key", + "KEY_L": "Key", + "KEY_F15": "Key", + "thead": "List (Attribute a) -> List (Element a) -> Element a", + "spanAttr": "Integer -> Attribute a", + "id": "String -> Attribute a", + "KEY_PAGE_FORWARD": "Key", + "onMouseMove": "(a -> Event -> List (Wish (a -> a) (a -> a))) -> Attribute a", + "onDragStart": "(a -> Event -> List (Wish (a -> a) (a -> a))) -> Attribute a", + "onDragEnter": "(a -> Event -> List (Wish (a -> a) (a -> a))) -> Attribute a", + "meter": "List (Attribute a) -> List (Element a) -> Element a", + "KEY_C": "Key", + "InputEvent": "{ bubbles :: Boolean, data :: String, defaultPrevented :: Boolean, eventType :: String, inputType :: String, preventDefault :: {} -> {}, stopImmediatePropagation :: {} -> {}, stopPropagation :: {} -> {}, target :: { innerText :: String, value :: String }, timeStamp :: Integer } -> Event", + "onAfterPrint": "(a -> Event -> List (Wish (a -> a) (a -> a))) -> GlobalAction a", + "onPageHide": "(a -> Event -> List (Wish (a -> a) (a -> a))) -> GlobalAction a", + "KEY_PAGE_BACKWARD": "Key", + "nav": "List (Attribute a) -> List (Element a) -> Element a", + "hr": "List (Attribute a) -> List (Element a) -> Element a", + "citeAttr": "String -> Attribute a", + "ruby": "List (Attribute a) -> List (Element a) -> Element a", + "h2": "List (Attribute a) -> List (Element a) -> Element a", + "span": "List (Attribute a) -> List (Element a) -> Element a", + "KEY_C_CEDILLA": "Key", + "dirname": "String -> Attribute a", + "KEY_F": "Key", + "async": "Boolean -> Attribute a", + "input": "List (Attribute a) -> List (Element a) -> Element a", + "ins": "List (Attribute a) -> List (Element a) -> Element a", + "onSubmit": "(a -> Event -> List (Wish (a -> a) (a -> a))) -> Attribute a", + "option": "List (Attribute a) -> List (Element a) -> Element a", + "width": "Integer -> Attribute a", + "KEY_CONVERSION": "Key", + "onDrop": "(a -> Event -> List (Wish (a -> a) (a -> a))) -> Attribute a", + "className": "String -> Attribute a", + "dialog": "List (Attribute a) -> List (Element a) -> Element a", + "KEY_UNLOCK_TRACK_PAD": "Key", + "KEY_CLEAR": "Key", + "KEY_F6": "Key", + "KEY_PRINT": "Key", + "q": "List (Attribute a) -> List (Element a) -> Element a", + "select": "List (Attribute a) -> List (Element a) -> Element a", + "canvas": "List (Attribute a) -> List (Element a) -> Element a", + "onSeeking": "(a -> Event -> List (Wish (a -> a) (a -> a))) -> Attribute a", + "onKeyUp": "(a -> Event -> List (Wish (a -> a) (a -> a))) -> Attribute a", + "onBlur": "(a -> Event -> List (Wish (a -> a) (a -> a))) -> Attribute a", + "readonly": "Boolean -> Attribute a", + "KEY_NUMPAD_6": "Key", + "step": "Integer -> Attribute a", + "onPause": "(a -> Event -> List (Wish (a -> a) (a -> a))) -> Attribute a", + "KEY_P": "Key", + "footer": "List (Attribute a) -> List (Element a) -> Element a", + "KEY_XF86_BACKWARD": "Key", + "KEY_EQUAL": "Key", + "onKeyPress": "(a -> Event -> List (Wish (a -> a) (a -> a))) -> Attribute a", + "autoplay": "Boolean -> Attribute a", + "title": "List (Attribute a) -> List (Element a) -> Element a", + "source": "List (Attribute a) -> List (Element a) -> Element a", + "dataAttr": "String -> Attribute a", + "KEY_0": "Key", + "onPageShow": "(a -> Event -> List (Wish (a -> a) (a -> a))) -> GlobalAction a", + "KEY_SPACE": "Key", + "getUrl": "a -> String", + "onBeforeUnload": "(a -> Event -> List (Wish (a -> a) (a -> a))) -> GlobalAction a", + "address": "List (Attribute a) -> List (Element a) -> Element a", + "min": "Integer -> Attribute a", + "KEY_F22": "Key", + "KEY_QUESTION_MARK": "Key", + "KEY_CIRCONFLEX": "Key", + "controls": "Boolean -> Attribute a", + "shape": "String -> Attribute a", + "reversed": "Boolean -> Attribute a", + "onMouseEnter": "(a -> Event -> List (Wish (a -> a) (a -> a))) -> Attribute a", + "KEY_SUBSTRACT": "Key", + "innerHTML": "String -> Attribute a", + "preload": "String -> Attribute a", + "onSuspend": "(a -> Event -> List (Wish (a -> a) (a -> a))) -> Attribute a", + "hidden": "Boolean -> Attribute a", + "KEY_7": "Key", + "KEY_ADD": "Key", + "autofocus": "Boolean -> Attribute a", + "render": "(a -> Element a) -> a -> String -> {}", + "srcdoc": "String -> Attribute a", + "onTransitionEnd": "(a -> Event -> List (Wish (a -> a) (a -> a))) -> Attribute a", + "accessKey": "String -> Attribute a", + "onScroll": "(a -> Event -> List (Wish (a -> a) (a -> a))) -> Attribute a", + "KEY_XF86_FORWARD": "Key", + "KEY_F25": "Key", + "onUrlChanged": "(a -> Event -> List (Wish (a -> a) (a -> a))) -> GlobalAction a", + "onMouseOut": "(a -> Event -> List (Wish (a -> a) (a -> a))) -> Attribute a", + "KEY_W": "Key", + "titleAttr": "String -> Attribute a", + "onReset": "(a -> Event -> List (Wish (a -> a) (a -> a))) -> Attribute a", + "output": "List (Attribute a) -> List (Element a) -> Element a", + "KEY_J": "Key", + "onStalled": "(a -> Event -> List (Wish (a -> a) (a -> a))) -> Attribute a", + "KEY_F13": "Key", + "scope": "String -> Attribute a", + "poster": "String -> Attribute a", + "altAttribute": "String -> Attribute a", + "KeyboardEvent": "{ altKey :: Boolean, bubbles :: Boolean, ctrlKey :: Boolean, defaultPrevented :: Boolean, eventType :: String, key :: Key, preventDefault :: {} -> {}, shiftKey :: Boolean, stopImmediatePropagation :: {} -> {}, stopPropagation :: {} -> {}, timeStamp :: Integer } -> Event", + "dl": "List (Attribute a) -> List (Element a) -> Element a", + "KEY_COMMA": "Key", + "KEY_A": "Key", + "KEY_F18": "Key", + "div": "List (Attribute a) -> List (Element a) -> Element a", + "KEY_INCREASE_VOLUME": "Key", + "forRoute": "String -> ({ searchParams :: Dictionary String String, urlParams :: Dictionary String String } -> Element a) -> Element a", + "onCopy": "(a -> Event -> List (Wish (a -> a) (a -> a))) -> Attribute a", + "onDrag": "(a -> Event -> List (Wish (a -> a) (a -> a))) -> Attribute a", + "KEY_D": "Key", + "PopStateEvent": "{ bubbles :: Boolean, defaultPrevented :: Boolean, eventType :: String, path :: String, preventDefault :: {} -> {}, stopImmediatePropagation :: {} -> {}, stopPropagation :: {} -> {}, timeStamp :: Integer, url :: String } -> Event", + "KEY_PERIOD": "Key", + "KEY_TILDE": "Key", + "onSearch": "(a -> Event -> List (Wish (a -> a) (a -> a))) -> Attribute a", + "MouseEvent": "{ bubbles :: Boolean, clientX :: Integer, clientY :: Integer, defaultPrevented :: Boolean, eventType :: String, preventDefault :: {} -> {}, stopImmediatePropagation :: {} -> {}, stopPropagation :: {} -> {}, timeStamp :: Integer } -> Event", + "main": "List (Attribute a) -> List (Element a) -> Element a", + "addSubscription": "(((a -> a) -> {}) -> {}) -> { globalEventHandlers :: List (GlobalAction a), routingKind :: RoutingKind, subscriptions :: List (((a -> a) -> {}) -> {}) } -> { globalEventHandlers :: List (GlobalAction a), routingKind :: RoutingKind, subscriptions :: List (((a -> a) -> {}) -> {}) }", + "onOffline": "(a -> Event -> List (Wish (a -> a) (a -> a))) -> GlobalAction a", + "KEY_UP_ARROW": "Key", + "onMouseOver": "(a -> Event -> List (Wish (a -> a) (a -> a))) -> Attribute a", + "KEY_CMD": "Key", + "h5": "List (Attribute a) -> List (Element a) -> Element a", + "onDblClick": "(a -> Event -> List (Wish (a -> a) (a -> a))) -> Attribute a", + "colgroup": "List (Attribute a) -> List (Element a) -> Element a", + "KEY_LEFT_CHEVRON": "Key", + "onInvalid": "(a -> Event -> List (Wish (a -> a) (a -> a))) -> Attribute a", + "action": "String -> Attribute a", + "wrap": "String -> Attribute a", + "KEY_BREAK": "Key", + "rp": "List (Attribute a) -> List (Element a) -> Element a", + "slot": "List (Attribute a) -> List (Element a) -> Element a", + "lang": "String -> Attribute a", + "KEY_F30": "Key", + "disabled": "Boolean -> Attribute a", + "KEY_STOP": "Key", + "KEY_NUMPAD_0": "Key", + "multiple": "Boolean -> Attribute a", + "KEY_F29": "Key", + "KEY_F5": "Key", + "KEY_PAUSE": "Key", + "dfn": "List (Attribute a) -> List (Element a) -> Element a", + "strong": "List (Attribute a) -> List (Element a) -> Element a", + "KEY_INSERT": "Key", + "href": "String -> Attribute a", + "table": "List (Attribute a) -> List (Element a) -> Element a", + "KEY_HIRAGANA_KATAKANA": "Key", + "KEY_PAGE_DOWN": "Key", + "addGlobalEventHandler": "GlobalAction a -> { globalEventHandlers :: List (GlobalAction a), routingKind :: RoutingKind, subscriptions :: List (((a -> a) -> {}) -> {}) } -> { globalEventHandlers :: List (GlobalAction a), routingKind :: RoutingKind, subscriptions :: List (((a -> a) -> {}) -> {}) }", + "onCueChange": "(a -> Event -> List (Wish (a -> a) (a -> a))) -> Attribute a", + "sizes": "String -> Attribute a", + "KEY_NUMPAD_5": "Key", + "hreflang": "String -> Attribute a", + "onDragOver": "(a -> Event -> List (Wish (a -> a) (a -> a))) -> Attribute a", + "onDocumentLoad": "(a -> Event -> List (Wish (a -> a) (a -> a))) -> GlobalAction a", + "onAbort": "(a -> Event -> List (Wish (a -> a) (a -> a))) -> Attribute a", + "KEY_TOGGLE_TOUCH_PAD": "Key", + "KEY_GRAVE_ACCENT": "Key", + "KEY_DASH": "Key", + "KEY_5": "Key", + "pre": "List (Attribute a) -> List (Element a) -> Element a", + "KEY_CAPS_LOCK": "Key", + "empty": "List (Attribute a) -> List (Element a) -> Element a", + "KEY_F27": "Key", + "KEY_CMD_RIGHT": "Key", + "onLoadStart": "(a -> Event -> List (Wish (a -> a) (a -> a))) -> Attribute a", + "KEY_U": "Key", + "every": "Integer -> (a -> a) -> ((a -> a) -> {}) -> {}", + "th": "List (Attribute a) -> List (Element a) -> Element a", + "KEY_H": "Key", + "area": "List (Attribute a) -> List (Element a) -> Element a", + "KEY_F11": "Key", + "onToggle": "(a -> Event -> List (Wish (a -> a) (a -> a))) -> Attribute a", + "KEY_HANGUL": "Key", + "KEY_ESCAPE": "Key", + "srclang": "String -> Attribute a", + "content": "List (Attribute a) -> List (Element a) -> Element a", + "kbd": "List (Attribute a) -> List (Element a) -> Element a", + "KEY_O": "Key", + "KEY_F16": "Key", + "KEY_REFRESH": "Key", + "tr": "List (Attribute a) -> List (Element a) -> Element a", + "stringAttribute": "#[String, String] -> Attribute a", + "download": "Boolean -> Attribute a", + "KEY_SCROLL_LOCK": "Key", + "track": "List (Attribute a) -> List (Element a) -> Element a", + "var": "List (Attribute a) -> List (Element a) -> Element a", + "onUnload": "(a -> Event -> List (Wish (a -> a) (a -> a))) -> GlobalAction a", + "data": "List (Attribute a) -> List (Element a) -> Element a", + "optgroup": "List (Attribute a) -> List (Element a) -> Element a", + "datetime": "String -> Attribute a", + "translate": "Boolean -> Attribute a", + "height": "Integer -> Attribute a", + "onDurationChange": "(a -> Event -> List (Wish (a -> a) (a -> a))) -> Attribute a", + "usemap": "String -> Attribute a", + "script": "List (Attribute a) -> List (Element a) -> Element a", + "h3": "List (Attribute a) -> List (Element a) -> Element a", + "KEY_CTRL": "Key", + "article": "List (Attribute a) -> List (Element a) -> Element a", + "mark": "List (Attribute a) -> List (Element a) -> Element a", + "KEY_B": "Key", + "text": "String -> Element a", + "KEY_F2": "Key", + "u": "List (Attribute a) -> List (Element a) -> Element a", + "img": "List (Attribute a) -> List (Element a) -> Element a", + "onTransitionRun": "(a -> Event -> List (Wish (a -> a) (a -> a))) -> Attribute a", + "onLoadedData": "(a -> Event -> List (Wish (a -> a) (a -> a))) -> Attribute a", + "KEY_TAB": "Key", + "onMouseUp": "(a -> Event -> List (Wish (a -> a) (a -> a))) -> Attribute a", + "KEY_F32": "Key", + "KEY_9": "Key", + "onPlaying": "(a -> Event -> List (Wish (a -> a) (a -> a))) -> Attribute a", + "video": "List (Attribute a) -> List (Element a) -> Element a", + "KEY_END": "Key", + "KEY_NUMPAD_2": "Key", + "placeholder": "String -> Attribute a", + "BasicRouting": "RoutingKind", + "draggable": "Boolean -> Attribute a", + "KEY_DOLLAR": "Key", + "dt": "List (Attribute a) -> List (Element a) -> Element a", + "KEY_CMD_LEFT": "Key", + "onEnded": "(a -> Event -> List (Wish (a -> a) (a -> a))) -> Attribute a", + "KEY_NON_CONVERSION": "Key", + "KEY_Y": "Key", + "KEY_RIGHT_PAREN": "Key", + "td": "List (Attribute a) -> List (Element a) -> Element a", + "sup": "List (Attribute a) -> List (Element a) -> Element a", + "li": "List (Attribute a) -> List (Element a) -> Element a", + "KEY_NUMPAD_7": "Key", + "KEY_SHIFT": "Key", + "media": "String -> Attribute a", + "onMouseWheel": "(a -> Event -> List (Wish (a -> a) (a -> a))) -> Attribute a", + "tbody": "List (Attribute a) -> List (Element a) -> Element a", + "KEY_SINGLE_QUOTE": "Key", + "KEY_F7": "Key", + "KEY_ENTER": "Key", + "p": "List (Attribute a) -> List (Element a) -> Element a", + "onChange": "(a -> Event -> List (Wish (a -> a) (a -> a))) -> Attribute a", + "KEY_MULTIPLY": "Key", + "template": "List (Attribute a) -> List (Element a) -> Element a", + "mapElement": "List (Attribute a) -> List (Element a) -> Element a", + "KEY_3": "Key", + "value": "String -> Attribute a", + "coords": "String -> Attribute a", + "KEY_NUMPAD_8": "Key", + "KEY_PAGE_UP": "Key", + "KEY_BRACKET_RIGHT": "Key", + "sandbox": "Boolean -> Attribute a", + "KEY_KANJI": "Key", + "KEY_F21": "Key", + "KEY_HALF_WIDTH_FULL_WIDTH": "Key", + "onSeeked": "(a -> Event -> List (Wish (a -> a) (a -> a))) -> Attribute a", + "KEY_S": "Key", + "embed": "List (Attribute a) -> List (Element a) -> Element a", + "onCut": "(a -> Event -> List (Wish (a -> a) (a -> a))) -> Attribute a", + "onFocus": "(a -> Event -> List (Wish (a -> a) (a -> a))) -> Attribute a", + "KEY_F8": "Key" + }, + "apiTypes": {} + }, + "llvmApi": { + "apiInstances": [], + "apiAliases": {}, + "apiInterfaces": {}, + "apiNames": { + "KEY_6": "Key", + "tfoot": "List (Attribute a) -> List (Element a) -> Element a", + "getPathName": "a -> String", + "progress": "List (Attribute a) -> List (Element a) -> Element a", + "KEY_F24": "Key", + "KEY_V": "Key", + "novalidate": "Boolean -> Attribute a", + "onWaiting": "(a -> Event -> List (Wish (a -> a) (a -> a))) -> Attribute a", + "formAttr": "String -> Attribute a", + "KEY_PREVIOUS": "Key", + "KEY_F14": "Key", + "KEY_COLON": "Key", + "KEY_U_GRAVE_ACCENT": "Key", + "a": "List (Attribute a) -> List (Element a) -> Element a", + "key": "String -> Attribute a", + "KEY_NUM_LOCK": "Key", + "onContextMenu": "(a -> Event -> List (Wish (a -> a) (a -> a))) -> Attribute a", + "bdi": "List (Attribute a) -> List (Element a) -> Element a", + "KEY_NUMPAD_PERIOD": "Key", + "srcset": "String -> Attribute a", + "onCanPlay": "(a -> Event -> List (Wish (a -> a) (a -> a))) -> Attribute a", + "noscript": "List (Attribute a) -> List (Element a) -> Element a", + "KEY_M": "Key", + "KEY_GNOME_COMPOSE": "Key", + "onPlay": "(a -> Event -> List (Wish (a -> a) (a -> a))) -> Attribute a", + "syncAction": "(a -> Event -> a) -> a -> Event -> List (Wish (a -> a) (a -> a))", + "KEY_DELETE": "Key", + "onDragLeave": "(a -> Event -> List (Wish (a -> a) (a -> a))) -> Attribute a", + "KEY_ANY": "Key", + "rowspan": "Integer -> Attribute a", + "samp": "List (Attribute a) -> List (Element a) -> Element a", + "KEY_EMAIL": "Key", + "src": "String -> Attribute a", + "h1": "List (Attribute a) -> List (Element a) -> Element a", + "name": "String -> Attribute a", + "caption": "List (Attribute a) -> List (Element a) -> Element a", + "KEY_RIGHT_ARROW": "Key", + "KEY_AT": "Key", + "onKeyDown": "(a -> Event -> List (Wish (a -> a) (a -> a))) -> Attribute a", + "onMouseDown": "(a -> Event -> List (Wish (a -> a) (a -> a))) -> Attribute a", + "object": "List (Attribute a) -> List (Element a) -> Element a", + "KEY_F19": "Key", + "figure": "List (Attribute a) -> List (Element a) -> Element a", + "h6": "List (Attribute a) -> List (Element a) -> Element a", + "rtc": "List (Attribute a) -> List (Element a) -> Element a", + "KEY_G": "Key", + "KEY_BRACKET_LEFT": "Key", + "section": "List (Attribute a) -> List (Element a) -> Element a", + "del": "List (Attribute a) -> List (Element a) -> Element a", + "param": "List (Attribute a) -> List (Element a) -> Element a", + "meta": "List (Attribute a) -> List (Element a) -> Element a", + "col": "List (Attribute a) -> List (Element a) -> Element a", + "onVolumeChange": "(a -> Event -> List (Wish (a -> a) (a -> a))) -> Attribute a", + "colspan": "Integer -> Attribute a", + "required": "Boolean -> Attribute a", + "code": "List (Attribute a) -> List (Element a) -> Element a", + "KEY_F31": "Key", + "header": "List (Attribute a) -> List (Element a) -> Element a", + "hgroup": "List (Attribute a) -> List (Element a) -> Element a", + "onSelect": "(a -> Event -> List (Wish (a -> a) (a -> a))) -> Attribute a", + "headers": "String -> Attribute a", + "KEY_NUMPAD_1": "Key", + "KEY_DIVIDE": "Key", + "picture": "List (Attribute a) -> List (Element a) -> Element a", + "tabindex": "Integer -> Attribute a", + "aside": "List (Attribute a) -> List (Element a) -> Element a", + "KEY_F28": "Key", + "method": "Method -> Attribute a", + "blockquote": "List (Attribute a) -> List (Element a) -> Element a", + "KEY_Z": "Key", + "KEY_F1": "Key", + "onTimeUpdate": "(a -> Event -> List (Wish (a -> a) (a -> a))) -> Attribute a", + "selected": "Boolean -> Attribute a", + "KEY_MUTE_UNMUTE": "Key", + "KEY_1": "Key", + "textarea": "List (Attribute a) -> List (Element a) -> Element a", + "rel": "String -> Attribute a", + "KEY_SELECT": "Key", + "KEY_SEMI_COLON": "Key", + "onBeforePrint": "(a -> Event -> List (Wish (a -> a) (a -> a))) -> GlobalAction a", + "KEY_BACK_TICK": "Key", + "switchRoute": "List #[String, { searchParams :: Dictionary String String, urlParams :: Dictionary String String } -> Element a] -> Element a", + "for": "String -> Attribute a", + "datalist": "List (Attribute a) -> List (Element a) -> Element a", + "KEY_F23": "Key", + "renderWithConfig": "{ globalEventHandlers :: List (GlobalAction a), routingKind :: RoutingKind, subscriptions :: List (((a -> a) -> {}) -> {}) } -> (a -> Element a) -> a -> String -> {}", + "onTransitionCancel": "(a -> Event -> List (Wish (a -> a) (a -> a))) -> Attribute a", + "KEY_Q": "Key", + "iframe": "List (Attribute a) -> List (Element a) -> Element a", + "KEY_PRINT_SCREEN": "Key", + "onEmptied": "(a -> Event -> List (Wish (a -> a) (a -> a))) -> Attribute a", + "onInput": "(a -> Event -> List (Wish (a -> a) (a -> a))) -> Attribute a", + "abbr": "List (Attribute a) -> List (Element a) -> Element a", + "KEY_AIRPLANE_MODE": "Key", + "KEY_NEXT": "Key", + "KEY_F26": "Key", + "KEY_DECIMAL_POINT": "Key", + "onMouseLeave": "(a -> Event -> List (Wish (a -> a) (a -> a))) -> Attribute a", + "KEY_T": "Key", + "cols": "Integer -> Attribute a", + "HashRouting": "RoutingKind", + "AbstractEvent": "{ bubbles :: Boolean, defaultPrevented :: Boolean, eventType :: String, preventDefault :: {} -> {}, stopImmediatePropagation :: {} -> {}, stopPropagation :: {} -> {}, timeStamp :: Integer } -> Event", + "menu": "List (Attribute a) -> List (Element a) -> Element a", + "KEY_HOME": "Key", + "maxlength": "Integer -> Attribute a", + "KEY_ALPHA_NUMERIC": "Key", + "KEY_4": "Key", + "onPaste": "(a -> Event -> List (Wish (a -> a) (a -> a))) -> Attribute a", + "onWheel": "(a -> Event -> List (Wish (a -> a) (a -> a))) -> Attribute a", + "button": "List (Attribute a) -> List (Element a) -> Element a", + "bdo": "List (Attribute a) -> List (Element a) -> Element a", + "fieldset": "List (Attribute a) -> List (Element a) -> Element a", + "KEY_SLEEP": "Key", + "shadow": "List (Attribute a) -> List (Element a) -> Element a", + "throttleAction": "Integer -> (a -> Event -> List (Wish (a -> a) (a -> a))) -> a -> Event -> List (Wish (a -> a) (a -> a))", + "KEY_K": "Key", + "plaintext": "List (Attribute a) -> List (Element a) -> Element a", + "KEY_F12": "Key", + "DEFAULT_CONFIG": "{ globalEventHandlers :: List (GlobalAction a), routingKind :: RoutingKind, subscriptions :: List (((a -> a) -> {}) -> {}) }", + "loop": "Boolean -> Attribute a", + "open": "Boolean -> Attribute a", + "low": "Integer -> Attribute a", + "sub": "List (Attribute a) -> List (Element a) -> Element a", + "audio": "List (Attribute a) -> List (Element a) -> Element a", + "max": "Integer -> Attribute a", + "ismap": "Boolean -> Attribute a", + "enctype": "String -> Attribute a", + "label": "List (Attribute a) -> List (Element a) -> Element a", + "rows": "Integer -> Attribute a", + "pattern": "String -> Attribute a", + "KEY_N": "Key", + "KEY_F17": "Key", + "KEY_EXCLAMATION_MARK": "Key", + "b": "List (Attribute a) -> List (Element a) -> Element a", + "h4": "List (Attribute a) -> List (Element a) -> Element a", + "muted": "Boolean -> Attribute a", + "wbr": "List (Attribute a) -> List (Element a) -> Element a", + "menuitem": "List (Attribute a) -> List (Element a) -> Element a", + "default": "Boolean -> Attribute a", + "KEY_EXECUTE": "Key", + "onOnline": "(a -> Event -> List (Wish (a -> a) (a -> a))) -> GlobalAction a", + "KEY_FORWARD_SLASH": "Key", + "KEY_E": "Key", + "accept": "String -> Attribute a", + "list": "String -> Attribute a", + "i": "List (Attribute a) -> List (Element a) -> Element a", + "onProgress": "(a -> Event -> List (Wish (a -> a) (a -> a))) -> Attribute a", + "dir": "String -> Attribute a", + "KEY_8": "Key", + "KEY_NUMPAD_3": "Key", + "onResize": "(a -> Event -> List (Wish (a -> a) (a -> a))) -> GlobalAction a", + "KEY_ESZETT": "Key", + "tag": "String -> List (Attribute a) -> List (Element a) -> Element a", + "defer": "Boolean -> Attribute a", + "KEY_X": "Key", + "KEY_F3": "Key", + "start": "Integer -> Attribute a", + "onLoadedMetaData": "(a -> Event -> List (Wish (a -> a) (a -> a))) -> Attribute a", + "KEY_HANJA": "Key", + "KEY_ALTGR": "Key", + "KEY_LEFT_ARROW": "Key", + "ul": "List (Attribute a) -> List (Element a) -> Element a", + "KEY_NUMPAD_4": "Key", + "KEY_DECREASE_VOLUME": "Key", + "onError": "(a -> Event -> List (Wish (a -> a) (a -> a))) -> Attribute a", + "KEY_ALT": "Key", + "KEY_F4": "Key", + "KEY_LEFT_BACK_SLASH": "Key", + "s": "List (Attribute a) -> List (Element a) -> Element a", + "rt": "List (Attribute a) -> List (Element a) -> Element a", + "link": "List (Attribute a) -> List (Element a) -> Element a", + "KEY_BACKSPACE": "Key", + "style": "Dictionary String String -> Attribute a", + "KEY_ASTERISK": "Key", + "kind": "String -> Attribute a", + "innerText": "String -> Attribute a", + "figcaption": "List (Attribute a) -> List (Element a) -> Element a", + "small": "List (Attribute a) -> List (Element a) -> Element a", + "KEY_HELP": "Key", + "KEY_F20": "Key", + "KEY_R": "Key", + "time": "List (Attribute a) -> List (Element a) -> Element a", + "summary": "List (Attribute a) -> List (Element a) -> Element a", + "onDragEnd": "(a -> Event -> List (Wish (a -> a) (a -> a))) -> Attribute a", + "to": "String -> Attribute a", + "KEY_F9": "Key", + "onTransitionStart": "(a -> Event -> List (Wish (a -> a) (a -> a))) -> Attribute a", + "onRateChange": "(a -> Event -> List (Wish (a -> a) (a -> a))) -> Attribute a", + "acceptCharset": "String -> Attribute a", + "ol": "List (Attribute a) -> List (Element a) -> Element a", + "onLoad": "(a -> Event -> List (Wish (a -> a) (a -> a))) -> Attribute a", + "KEY_2": "Key", + "KEY_MUTE": "Key", + "KEY_NUMPAD_9": "Key", + "inputType": "String -> Attribute a", + "size": "Integer -> Attribute a", + "KEY_NUMBER_SIGN": "Key", + "contenteditable": "Boolean -> Attribute a", + "checked": "Boolean -> Attribute a", + "KEY_ARABIC_SEMI_COLON": "Key", + "onCanPlayThrough": "(a -> Event -> List (Wish (a -> a) (a -> a))) -> Attribute a", + "autocomplete": "Boolean -> Attribute a", + "optimum": "Integer -> Attribute a", + "dd": "List (Attribute a) -> List (Element a) -> Element a", + "onClick": "(a -> Event -> List (Wish (a -> a) (a -> a))) -> Attribute a", + "labelAttr": "String -> Attribute a", + "KEY_DOWN_ARROW": "Key", + "KEY_I": "Key", + "high": "Integer -> Attribute a", + "KEY_F10": "Key", + "form": "List (Attribute a) -> List (Element a) -> Element a", + "formaction": "String -> Attribute a", + "em": "List (Attribute a) -> List (Element a) -> Element a", + "spellcheck": "Boolean -> Attribute a", + "br": "List (Attribute a) -> List (Element a) -> Element a", + "KEY_PLAY_PAUSE": "Key", + "target": "String -> Attribute a", + "cite": "List (Attribute a) -> List (Element a) -> Element a", + "details": "List (Attribute a) -> List (Element a) -> Element a", + "legend": "List (Attribute a) -> List (Element a) -> Element a", + "KEY_BACK_SLASH": "Key", + "KEY_L": "Key", + "KEY_F15": "Key", + "thead": "List (Attribute a) -> List (Element a) -> Element a", + "spanAttr": "Integer -> Attribute a", + "id": "String -> Attribute a", + "KEY_PAGE_FORWARD": "Key", + "onMouseMove": "(a -> Event -> List (Wish (a -> a) (a -> a))) -> Attribute a", + "onDragStart": "(a -> Event -> List (Wish (a -> a) (a -> a))) -> Attribute a", + "onDragEnter": "(a -> Event -> List (Wish (a -> a) (a -> a))) -> Attribute a", + "meter": "List (Attribute a) -> List (Element a) -> Element a", + "KEY_C": "Key", + "InputEvent": "{ bubbles :: Boolean, data :: String, defaultPrevented :: Boolean, eventType :: String, inputType :: String, preventDefault :: {} -> {}, stopImmediatePropagation :: {} -> {}, stopPropagation :: {} -> {}, target :: { innerText :: String, value :: String }, timeStamp :: Integer } -> Event", + "onAfterPrint": "(a -> Event -> List (Wish (a -> a) (a -> a))) -> GlobalAction a", + "onPageHide": "(a -> Event -> List (Wish (a -> a) (a -> a))) -> GlobalAction a", + "KEY_PAGE_BACKWARD": "Key", + "nav": "List (Attribute a) -> List (Element a) -> Element a", + "hr": "List (Attribute a) -> List (Element a) -> Element a", + "citeAttr": "String -> Attribute a", + "ruby": "List (Attribute a) -> List (Element a) -> Element a", + "h2": "List (Attribute a) -> List (Element a) -> Element a", + "span": "List (Attribute a) -> List (Element a) -> Element a", + "KEY_C_CEDILLA": "Key", + "dirname": "String -> Attribute a", + "KEY_F": "Key", + "async": "Boolean -> Attribute a", + "input": "List (Attribute a) -> List (Element a) -> Element a", + "ins": "List (Attribute a) -> List (Element a) -> Element a", + "onSubmit": "(a -> Event -> List (Wish (a -> a) (a -> a))) -> Attribute a", + "option": "List (Attribute a) -> List (Element a) -> Element a", + "width": "Integer -> Attribute a", + "KEY_CONVERSION": "Key", + "onDrop": "(a -> Event -> List (Wish (a -> a) (a -> a))) -> Attribute a", + "className": "String -> Attribute a", + "dialog": "List (Attribute a) -> List (Element a) -> Element a", + "KEY_UNLOCK_TRACK_PAD": "Key", + "KEY_CLEAR": "Key", + "KEY_F6": "Key", + "KEY_PRINT": "Key", + "q": "List (Attribute a) -> List (Element a) -> Element a", + "select": "List (Attribute a) -> List (Element a) -> Element a", + "canvas": "List (Attribute a) -> List (Element a) -> Element a", + "onSeeking": "(a -> Event -> List (Wish (a -> a) (a -> a))) -> Attribute a", + "onKeyUp": "(a -> Event -> List (Wish (a -> a) (a -> a))) -> Attribute a", + "onBlur": "(a -> Event -> List (Wish (a -> a) (a -> a))) -> Attribute a", + "readonly": "Boolean -> Attribute a", + "KEY_NUMPAD_6": "Key", + "step": "Integer -> Attribute a", + "onPause": "(a -> Event -> List (Wish (a -> a) (a -> a))) -> Attribute a", + "KEY_P": "Key", + "footer": "List (Attribute a) -> List (Element a) -> Element a", + "KEY_XF86_BACKWARD": "Key", + "KEY_EQUAL": "Key", + "onKeyPress": "(a -> Event -> List (Wish (a -> a) (a -> a))) -> Attribute a", + "autoplay": "Boolean -> Attribute a", + "title": "List (Attribute a) -> List (Element a) -> Element a", + "source": "List (Attribute a) -> List (Element a) -> Element a", + "dataAttr": "String -> Attribute a", + "KEY_0": "Key", + "onPageShow": "(a -> Event -> List (Wish (a -> a) (a -> a))) -> GlobalAction a", + "KEY_SPACE": "Key", + "getUrl": "a -> String", + "onBeforeUnload": "(a -> Event -> List (Wish (a -> a) (a -> a))) -> GlobalAction a", + "address": "List (Attribute a) -> List (Element a) -> Element a", + "min": "Integer -> Attribute a", + "KEY_F22": "Key", + "KEY_QUESTION_MARK": "Key", + "KEY_CIRCONFLEX": "Key", + "controls": "Boolean -> Attribute a", + "shape": "String -> Attribute a", + "reversed": "Boolean -> Attribute a", + "onMouseEnter": "(a -> Event -> List (Wish (a -> a) (a -> a))) -> Attribute a", + "KEY_SUBSTRACT": "Key", + "innerHTML": "String -> Attribute a", + "preload": "String -> Attribute a", + "onSuspend": "(a -> Event -> List (Wish (a -> a) (a -> a))) -> Attribute a", + "hidden": "Boolean -> Attribute a", + "KEY_7": "Key", + "KEY_ADD": "Key", + "autofocus": "Boolean -> Attribute a", + "render": "(a -> Element a) -> a -> String -> {}", + "srcdoc": "String -> Attribute a", + "onTransitionEnd": "(a -> Event -> List (Wish (a -> a) (a -> a))) -> Attribute a", + "accessKey": "String -> Attribute a", + "onScroll": "(a -> Event -> List (Wish (a -> a) (a -> a))) -> Attribute a", + "KEY_XF86_FORWARD": "Key", + "KEY_F25": "Key", + "onUrlChanged": "(a -> Event -> List (Wish (a -> a) (a -> a))) -> GlobalAction a", + "onMouseOut": "(a -> Event -> List (Wish (a -> a) (a -> a))) -> Attribute a", + "KEY_W": "Key", + "titleAttr": "String -> Attribute a", + "onReset": "(a -> Event -> List (Wish (a -> a) (a -> a))) -> Attribute a", + "output": "List (Attribute a) -> List (Element a) -> Element a", + "KEY_J": "Key", + "onStalled": "(a -> Event -> List (Wish (a -> a) (a -> a))) -> Attribute a", + "KEY_F13": "Key", + "scope": "String -> Attribute a", + "poster": "String -> Attribute a", + "altAttribute": "String -> Attribute a", + "KeyboardEvent": "{ altKey :: Boolean, bubbles :: Boolean, ctrlKey :: Boolean, defaultPrevented :: Boolean, eventType :: String, key :: Key, preventDefault :: {} -> {}, shiftKey :: Boolean, stopImmediatePropagation :: {} -> {}, stopPropagation :: {} -> {}, timeStamp :: Integer } -> Event", + "dl": "List (Attribute a) -> List (Element a) -> Element a", + "KEY_COMMA": "Key", + "KEY_A": "Key", + "KEY_F18": "Key", + "div": "List (Attribute a) -> List (Element a) -> Element a", + "KEY_INCREASE_VOLUME": "Key", + "forRoute": "String -> ({ searchParams :: Dictionary String String, urlParams :: Dictionary String String } -> Element a) -> Element a", + "onCopy": "(a -> Event -> List (Wish (a -> a) (a -> a))) -> Attribute a", + "onDrag": "(a -> Event -> List (Wish (a -> a) (a -> a))) -> Attribute a", + "KEY_D": "Key", + "PopStateEvent": "{ bubbles :: Boolean, defaultPrevented :: Boolean, eventType :: String, path :: String, preventDefault :: {} -> {}, stopImmediatePropagation :: {} -> {}, stopPropagation :: {} -> {}, timeStamp :: Integer, url :: String } -> Event", + "KEY_PERIOD": "Key", + "KEY_TILDE": "Key", + "onSearch": "(a -> Event -> List (Wish (a -> a) (a -> a))) -> Attribute a", + "MouseEvent": "{ bubbles :: Boolean, clientX :: Integer, clientY :: Integer, defaultPrevented :: Boolean, eventType :: String, preventDefault :: {} -> {}, stopImmediatePropagation :: {} -> {}, stopPropagation :: {} -> {}, timeStamp :: Integer } -> Event", + "main": "List (Attribute a) -> List (Element a) -> Element a", + "addSubscription": "(((a -> a) -> {}) -> {}) -> { globalEventHandlers :: List (GlobalAction a), routingKind :: RoutingKind, subscriptions :: List (((a -> a) -> {}) -> {}) } -> { globalEventHandlers :: List (GlobalAction a), routingKind :: RoutingKind, subscriptions :: List (((a -> a) -> {}) -> {}) }", + "onOffline": "(a -> Event -> List (Wish (a -> a) (a -> a))) -> GlobalAction a", + "KEY_UP_ARROW": "Key", + "onMouseOver": "(a -> Event -> List (Wish (a -> a) (a -> a))) -> Attribute a", + "KEY_CMD": "Key", + "h5": "List (Attribute a) -> List (Element a) -> Element a", + "onDblClick": "(a -> Event -> List (Wish (a -> a) (a -> a))) -> Attribute a", + "colgroup": "List (Attribute a) -> List (Element a) -> Element a", + "KEY_LEFT_CHEVRON": "Key", + "onInvalid": "(a -> Event -> List (Wish (a -> a) (a -> a))) -> Attribute a", + "action": "String -> Attribute a", + "wrap": "String -> Attribute a", + "KEY_BREAK": "Key", + "rp": "List (Attribute a) -> List (Element a) -> Element a", + "slot": "List (Attribute a) -> List (Element a) -> Element a", + "lang": "String -> Attribute a", + "KEY_F30": "Key", + "disabled": "Boolean -> Attribute a", + "KEY_STOP": "Key", + "KEY_NUMPAD_0": "Key", + "multiple": "Boolean -> Attribute a", + "KEY_F29": "Key", + "KEY_F5": "Key", + "KEY_PAUSE": "Key", + "dfn": "List (Attribute a) -> List (Element a) -> Element a", + "strong": "List (Attribute a) -> List (Element a) -> Element a", + "KEY_INSERT": "Key", + "href": "String -> Attribute a", + "table": "List (Attribute a) -> List (Element a) -> Element a", + "KEY_HIRAGANA_KATAKANA": "Key", + "KEY_PAGE_DOWN": "Key", + "addGlobalEventHandler": "GlobalAction a -> { globalEventHandlers :: List (GlobalAction a), routingKind :: RoutingKind, subscriptions :: List (((a -> a) -> {}) -> {}) } -> { globalEventHandlers :: List (GlobalAction a), routingKind :: RoutingKind, subscriptions :: List (((a -> a) -> {}) -> {}) }", + "onCueChange": "(a -> Event -> List (Wish (a -> a) (a -> a))) -> Attribute a", + "sizes": "String -> Attribute a", + "KEY_NUMPAD_5": "Key", + "hreflang": "String -> Attribute a", + "onDragOver": "(a -> Event -> List (Wish (a -> a) (a -> a))) -> Attribute a", + "onDocumentLoad": "(a -> Event -> List (Wish (a -> a) (a -> a))) -> GlobalAction a", + "onAbort": "(a -> Event -> List (Wish (a -> a) (a -> a))) -> Attribute a", + "KEY_TOGGLE_TOUCH_PAD": "Key", + "KEY_GRAVE_ACCENT": "Key", + "KEY_DASH": "Key", + "KEY_5": "Key", + "pre": "List (Attribute a) -> List (Element a) -> Element a", + "KEY_CAPS_LOCK": "Key", + "empty": "List (Attribute a) -> List (Element a) -> Element a", + "KEY_F27": "Key", + "KEY_CMD_RIGHT": "Key", + "onLoadStart": "(a -> Event -> List (Wish (a -> a) (a -> a))) -> Attribute a", + "KEY_U": "Key", + "every": "Integer -> (a -> a) -> ((a -> a) -> {}) -> {}", + "th": "List (Attribute a) -> List (Element a) -> Element a", + "KEY_H": "Key", + "area": "List (Attribute a) -> List (Element a) -> Element a", + "KEY_F11": "Key", + "onToggle": "(a -> Event -> List (Wish (a -> a) (a -> a))) -> Attribute a", + "KEY_HANGUL": "Key", + "KEY_ESCAPE": "Key", + "srclang": "String -> Attribute a", + "content": "List (Attribute a) -> List (Element a) -> Element a", + "kbd": "List (Attribute a) -> List (Element a) -> Element a", + "KEY_O": "Key", + "KEY_F16": "Key", + "KEY_REFRESH": "Key", + "tr": "List (Attribute a) -> List (Element a) -> Element a", + "stringAttribute": "#[String, String] -> Attribute a", + "download": "Boolean -> Attribute a", + "KEY_SCROLL_LOCK": "Key", + "track": "List (Attribute a) -> List (Element a) -> Element a", + "var": "List (Attribute a) -> List (Element a) -> Element a", + "onUnload": "(a -> Event -> List (Wish (a -> a) (a -> a))) -> GlobalAction a", + "data": "List (Attribute a) -> List (Element a) -> Element a", + "optgroup": "List (Attribute a) -> List (Element a) -> Element a", + "datetime": "String -> Attribute a", + "translate": "Boolean -> Attribute a", + "height": "Integer -> Attribute a", + "onDurationChange": "(a -> Event -> List (Wish (a -> a) (a -> a))) -> Attribute a", + "usemap": "String -> Attribute a", + "script": "List (Attribute a) -> List (Element a) -> Element a", + "h3": "List (Attribute a) -> List (Element a) -> Element a", + "KEY_CTRL": "Key", + "article": "List (Attribute a) -> List (Element a) -> Element a", + "mark": "List (Attribute a) -> List (Element a) -> Element a", + "KEY_B": "Key", + "text": "String -> Element a", + "KEY_F2": "Key", + "u": "List (Attribute a) -> List (Element a) -> Element a", + "img": "List (Attribute a) -> List (Element a) -> Element a", + "onTransitionRun": "(a -> Event -> List (Wish (a -> a) (a -> a))) -> Attribute a", + "onLoadedData": "(a -> Event -> List (Wish (a -> a) (a -> a))) -> Attribute a", + "KEY_TAB": "Key", + "onMouseUp": "(a -> Event -> List (Wish (a -> a) (a -> a))) -> Attribute a", + "KEY_F32": "Key", + "KEY_9": "Key", + "onPlaying": "(a -> Event -> List (Wish (a -> a) (a -> a))) -> Attribute a", + "video": "List (Attribute a) -> List (Element a) -> Element a", + "KEY_END": "Key", + "KEY_NUMPAD_2": "Key", + "placeholder": "String -> Attribute a", + "BasicRouting": "RoutingKind", + "draggable": "Boolean -> Attribute a", + "KEY_DOLLAR": "Key", + "dt": "List (Attribute a) -> List (Element a) -> Element a", + "KEY_CMD_LEFT": "Key", + "onEnded": "(a -> Event -> List (Wish (a -> a) (a -> a))) -> Attribute a", + "KEY_NON_CONVERSION": "Key", + "KEY_Y": "Key", + "KEY_RIGHT_PAREN": "Key", + "td": "List (Attribute a) -> List (Element a) -> Element a", + "sup": "List (Attribute a) -> List (Element a) -> Element a", + "li": "List (Attribute a) -> List (Element a) -> Element a", + "KEY_NUMPAD_7": "Key", + "KEY_SHIFT": "Key", + "media": "String -> Attribute a", + "onMouseWheel": "(a -> Event -> List (Wish (a -> a) (a -> a))) -> Attribute a", + "tbody": "List (Attribute a) -> List (Element a) -> Element a", + "KEY_SINGLE_QUOTE": "Key", + "KEY_F7": "Key", + "KEY_ENTER": "Key", + "p": "List (Attribute a) -> List (Element a) -> Element a", + "onChange": "(a -> Event -> List (Wish (a -> a) (a -> a))) -> Attribute a", + "KEY_MULTIPLY": "Key", + "template": "List (Attribute a) -> List (Element a) -> Element a", + "mapElement": "List (Attribute a) -> List (Element a) -> Element a", + "KEY_3": "Key", + "value": "String -> Attribute a", + "coords": "String -> Attribute a", + "KEY_NUMPAD_8": "Key", + "KEY_PAGE_UP": "Key", + "KEY_BRACKET_RIGHT": "Key", + "sandbox": "Boolean -> Attribute a", + "KEY_KANJI": "Key", + "KEY_F21": "Key", + "KEY_HALF_WIDTH_FULL_WIDTH": "Key", + "onSeeked": "(a -> Event -> List (Wish (a -> a) (a -> a))) -> Attribute a", + "KEY_S": "Key", + "embed": "List (Attribute a) -> List (Element a) -> Element a", + "onCut": "(a -> Event -> List (Wish (a -> a) (a -> a))) -> Attribute a", + "onFocus": "(a -> Event -> List (Wish (a -> a) (a -> a))) -> Attribute a", + "KEY_F8": "Key" + }, + "apiTypes": {} + }, + "versionHash": "d149f1ad15929c0de71efb09318ac483" +} diff --git a/madlib_modules/clinic/.github/workflows/release.yml b/madlib_modules/clinic/.github/workflows/release.yml new file mode 100644 index 0000000..8af8d94 --- /dev/null +++ b/madlib_modules/clinic/.github/workflows/release.yml @@ -0,0 +1,38 @@ +name: 'Publish new version' + +on: + workflow_dispatch: + inputs: + version: + description: 'Version to publish ( ex: v0.0.1 )' + required: true + +env: + node-version: 20.x + + +jobs: + check-version: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + - run: | + MADLIB_PKG_VERSION="v$(cat madlib.json | grep version | cut -d":" -f2 | cut -d"\"" -f2)" + TAG_NAME=${{ github.event.inputs.version }} + if [ "$TAG_NAME" = "$MADLIB_PKG_VERSION" ]; then + echo "Versions match" + else + echo "Versions in madlib.json is not ${TAG_NAME}" + exit 1 + fi + + release: + permissions: + contents: write + needs: check-version + runs-on: ubuntu-latest + steps: + - uses: madlib-lang/action-publish@main + with: + version: ${{ github.event.inputs.version }} + diff --git a/madlib_modules/clinic/.gitignore b/madlib_modules/clinic/.gitignore new file mode 100644 index 0000000..d76b74e --- /dev/null +++ b/madlib_modules/clinic/.gitignore @@ -0,0 +1,2 @@ +build +.DS_Store diff --git a/madlib_modules/clinic/README.md b/madlib_modules/clinic/README.md new file mode 100644 index 0000000..aac86a8 --- /dev/null +++ b/madlib_modules/clinic/README.md @@ -0,0 +1,3 @@ +# clinic + +> an exemplary display or performance diff --git a/madlib_modules/clinic/madlib.json b/madlib_modules/clinic/madlib.json new file mode 100644 index 0000000..067e3fd --- /dev/null +++ b/madlib_modules/clinic/madlib.json @@ -0,0 +1,9 @@ +{ + "name": "clinic", + "version": "0.0.1", + "madlibVersion": "0.23.14", + "main": "src/Clinic.mad", + "importAliases": { + ".": "src" + } +} diff --git a/madlib_modules/clinic/src/Buffer.mad b/madlib_modules/clinic/src/Buffer.mad new file mode 100644 index 0000000..171ccae --- /dev/null +++ b/madlib_modules/clinic/src/Buffer.mad @@ -0,0 +1,23 @@ +import String from "String" + + + +export alias Buffer a = { clear :: {} -> {}, get :: {} -> a, pop :: {} -> {}, push :: a -> a } + +make :: String -> Buffer String +export make = (initial) => { + buff = initial + return { + clear: () => { + buff := "" + }, + get: () => buff, + pop: () => { + buff := String.dropLast(1, buff) + }, + push: (str) => { + buff := buff ++ str + return str + }, + } +} diff --git a/madlib_modules/clinic/src/Clinic.mad b/madlib_modules/clinic/src/Clinic.mad new file mode 100644 index 0000000..9c35d20 --- /dev/null +++ b/madlib_modules/clinic/src/Clinic.mad @@ -0,0 +1,174 @@ +import type { Wish } from "Wish" + +import type { Buffer } from "@/Buffer" + +import Dict from "Dictionary" +import { noop } from "Function" +import IO from "IO" +import List from "List" +import { fromMaybe } from "Maybe" +import Process from "Process" +import Terminal from "Terminal" +import Tuple from "Tuple" +import { Wish } from "Wish" + +import { ESC, clear, eraseAfterCursor, restoreCursor, saveCursor } from "@/Constants" + + + +export alias Action a = a -> {} +export alias NullaryAction = Action {} +export alias Option = #[String, NullaryAction] +export alias ActionMap = Dictionary String NullaryAction + +export defaultExit = () => { + IO.putLine("šŸ‘‹") + Process.exit(0) +} + +backspace :: Buffer String -> {} +export backspace = (buffer) => { + buffer.pop() + restoreCursor() + eraseAfterCursor() + IO.put(buffer.get()) +} + +promptWithExit :: NullaryAction -> String -> Buffer String -> Wish String String +export promptWithExit = (exitAction, label, buffer) => { + Terminal.enableTTYRawMode() + IO.put(label ++ " ") + saveCursor() + keyWatch = #- -1 -# + return Wish( + (_bad, _good) => { + stop = () => { + Terminal.disableTTYRawMode() + Terminal.clearKeyPressedHandler(keyWatch) + } + keyWatch := Terminal.onKeyPressed( + (seq) => { + if (seq == ESC.CTRL_C) do { + stop() + _bad("Quitting!") + exitAction() + } else if (seq == ESC.BACKSPACE) { + backspace(buffer) + } else if (seq == ESC.ENTER) do { + clear() + stop() + _good(buffer.get()) + } else do { + IO.put(seq) + buffer.push(seq) + } + }, + ) + return () => {} + }, + ) +} + +export prompt = promptWithExit(defaultExit) + +chooseActionWithExit :: NullaryAction -> ActionMap -> (List Option -> Integer -> String) -> {} +export chooseActionWithExit = (exitAction, actionMap, listRenderer) => { + cursor = 0 + options = Dict.toList(actionMap) + clear() + saveCursor() + max = List.length(options) + draw = pipe( + listRenderer(options), + IO.put, + ) + keyWatch = #- -1 -# + Terminal.enableTTYRawMode() + draw(cursor) + stop = () => { + Terminal.disableTTYRawMode() + Terminal.clearKeyPressedHandler(keyWatch) + } + keyWatch := Terminal.onKeyPressed( + (seq) => { + if (seq == ESC.CTRL_C) do { + stop() + exitAction() + } else if (seq == ESC.ARROW_UP || seq == ESC.ARROW_LEFT) do { + cursor := cursor - 1 < 0 ? max - 1 : cursor - 1 + } else if (seq == ESC.ARROW_DOWN || seq == ESC.ARROW_RIGHT) do { + cursor := cursor + 1 > max - 1 ? 0 : cursor + 1 + } else if (seq == ESC.ENTER) do { + stop() + clear() + pipe( + List.nth(cursor), + map(Tuple.snd), + fromMaybe(noop), + (fn) => fn(), + )(options) + restoreCursor() + return {} + } + clear() + draw(cursor) + }, + ) +} + + +export chooseAction = chooseActionWithExit(defaultExit) + + +chooseWithExit :: NullaryAction + -> List String + -> (List String -> Integer -> String) + -> Wish String Integer +export chooseWithExit = (exitAction, choices, listRenderer) => Wish( + (_bad, _good) => { + cursor = 0 + clear() + saveCursor() + max = List.length(choices) + draw = pipe( + listRenderer(choices), + IO.put, + ) + + Terminal.enableTTYRawMode() + redraw = () => { + clear() + draw(cursor) + } + redraw() + keyWatch = #- -1 -# + stop = () => { + Terminal.disableTTYRawMode() + Terminal.clearKeyPressedHandler(keyWatch) + } + keyWatch := Terminal.onKeyPressed( + (seq) => { + if (seq == ESC.CTRL_C) do { + stop() + _bad("EXIT") + exitAction() + } else if (seq == ESC.ARROW_UP || seq == ESC.ARROW_LEFT) do { + cursor := cursor - 1 < 0 ? max - 1 : cursor - 1 + redraw() + } else if (seq == ESC.ARROW_DOWN || seq == ESC.ARROW_RIGHT) do { + cursor := cursor + 1 > max - 1 ? 0 : cursor + 1 + redraw() + } else if (seq == ESC.ENTER) do { + stop() + restoreCursor() + _good(cursor) + } else { + redraw() + } + }, + ) + return () => {} + }, +) + +export choose = chooseWithExit(defaultExit) diff --git a/madlib_modules/clinic/src/Constants.mad b/madlib_modules/clinic/src/Constants.mad new file mode 100644 index 0000000..bf8ad97 --- /dev/null +++ b/madlib_modules/clinic/src/Constants.mad @@ -0,0 +1,32 @@ +import IO from "IO" + + + +export ESC = { + CTRL_C: "\x03", + BACKSPACE: "\x7F", + ENTER: "\r", + CLEAR: "\x1b[2J\x1b[H", + SAVE_CURSOR: "\x1b7", + RESTORE_CURSOR: "\x1b8", + ERASE_AFTER_CURSOR: "x1b[0J", + ARROW_UP: "\x1B[A", + ARROW_DOWN: "\x1B[B", + ARROW_RIGHT: "\x1B[C", + ARROW_LEFT: "\x1B[D", +} + +enprint :: String -> {} -> {} +export enprint = (str) => () => IO.put(str) + +clear :: {} -> {} +export clear = enprint("\x1b[2J\x1b[H") + +saveCursor :: {} -> {} +export saveCursor = enprint("\x1b7") + +restoreCursor :: {} -> {} +export restoreCursor = enprint("\x1b8") + +eraseAfterCursor :: {} -> {} +export eraseAfterCursor = enprint("\x1b[0J") diff --git a/madlib_modules/clinic/src/Main.mad b/madlib_modules/clinic/src/Main.mad new file mode 100644 index 0000000..6087b61 --- /dev/null +++ b/madlib_modules/clinic/src/Main.mad @@ -0,0 +1,60 @@ +import { noop } from "Function" +import IO from "IO" +import List from "List" +import String from "String" +import Terminal from "Terminal" +import Wish from "Wish" + +import Buffer from "@/Buffer" +import { choose, chooseAction, prompt } from "@/Clinic" + + + +tagOut = (tag) => pipe( + IO.pTrace(tag), + noop, +) +/* +pipe( + prompt("What is your name?"), + map(String.toUpper), + Wish.fulfill(tagOut("BAD"), tagOut("GOOD")), +)(Buffer.make("")) +*/ +/* +opts = {{ + "a": () => IO.put("YOU SAID A"), + "b": () => IO.put("YOU SAID B"), + "c": () => IO.put("YOU SAID C"), +}} +listicle = (o, x) => `⌜ āŒ\n${ + pipe( + List.mapWithIndex( + (_o, y) => where(_o) { + #[label, _] => + x == y + ? Terminal.ansiColor([Terminal.ansi.BGBrightWhite, Terminal.ansi.FGRed], label) + : label + }, + ), + String.join("\n"), +)(o) +}\nāŒž ⌟` +*/ +// needs rework for cursor +// chooseAction(opts, listicle) +main = () => { + chooser = (o, x) => `⌜ āŒ\n${ + pipe( + List.mapWithIndex( + (label, y) => x == y + ? Terminal.ansiColor([Terminal.ansi.BGBrightWhite, Terminal.ansi.FGRed], label) + : label, + ), + String.join("\n"), + )(o) + }\nāŒž ⌟` + pipe( + Wish.fulfill(tagOut("BAD"), tagOut("GOOD")), + )(choose([" a ", " b ", " c "], chooser)) +} From b873dd293aaf308808687aa9dbee49019e0b71d5 Mon Sep 17 00:00:00 2001 From: brekk Date: Thu, 16 May 2024 16:01:10 -1000 Subject: [PATCH 21/22] more more more --- .github/workflows/docs.yml | 2 +- madlib_modules/MadUI/src/Action.mad | 30 +------ madlib_modules/MadUI/src/Action.main.mad | 38 +++++++++ madlib_modules/MadUI/src/Action.spec.mad | 89 +++++++++++++++++++++ madlib_modules/MadUI/src/Config.spec.mad | 40 +++++++++ madlib_modules/MadUI/src/CoreUtils.spec.mad | 24 ++++++ madlib_modules/MadUI/src/Element.mad | 2 - madlib_modules/MadUI/src/Event.spec.mad | 17 ++++ 8 files changed, 212 insertions(+), 30 deletions(-) create mode 100644 madlib_modules/MadUI/src/Action.main.mad create mode 100644 madlib_modules/MadUI/src/Action.spec.mad create mode 100644 madlib_modules/MadUI/src/Config.spec.mad create mode 100644 madlib_modules/MadUI/src/CoreUtils.spec.mad create mode 100644 madlib_modules/MadUI/src/Event.spec.mad diff --git a/.github/workflows/docs.yml b/.github/workflows/docs.yml index 7da043e..a1a3f63 100644 --- a/.github/workflows/docs.yml +++ b/.github/workflows/docs.yml @@ -22,7 +22,7 @@ jobs: - name: 😈 Automatically generating documentation... run: | npm install -g @madlib-lang/madlib - madlib install + # madlib install madlib compile --bundle -i madlib_modules/MadDocCli/src/Main.mad -o build/src/maddoc-cli.js node build/src/maddoc-cli.js src echo "wrapEventHandler..." diff --git a/madlib_modules/MadUI/src/Action.mad b/madlib_modules/MadUI/src/Action.mad index c785b24..34170f9 100644 --- a/madlib_modules/MadUI/src/Action.mad +++ b/madlib_modules/MadUI/src/Action.mad @@ -8,10 +8,9 @@ import {} from "Wish" export alias Action a = a -> Event -> List (Wish (a -> a) (a -> a)) -export type GlobalAction a = GlobalAction(String, Action a) syncAction :: (a -> Event -> a) -> Action a -export syncAction = (stateUpdate) => ((_, event) => [of((state) => stateUpdate(state, event))]) +export syncAction = (stateUpdate) => ((_, event) => [of(stateUpdate($, event))]) throttleAction :: Integer -> Action a -> Action a export throttleAction = (amount, action) => { @@ -27,41 +26,18 @@ export throttleAction = (amount, action) => { }-# } -onAfterPrint :: Action a -> GlobalAction a -export onAfterPrint = GlobalAction("afterprint") +export type GlobalAction a = GlobalAction(String, Action a) -onBeforePrint :: Action a -> GlobalAction a +export onAfterPrint = GlobalAction("afterprint") export onBeforePrint = GlobalAction("beforeprint") - -onBeforeUnload :: Action a -> GlobalAction a export onBeforeUnload = GlobalAction("beforeunload") - -onDocumentLoad :: Action a -> GlobalAction a export onDocumentLoad = GlobalAction("load") - -onPageHide :: Action a -> GlobalAction a export onPageHide = GlobalAction("pagehide") - -onPageShow :: Action a -> GlobalAction a export onPageShow = GlobalAction("pageshow") - -onOffline :: Action a -> GlobalAction a export onOffline = GlobalAction("offline") - -onOnline :: Action a -> GlobalAction a export onOnline = GlobalAction("online") - -onResize :: Action a -> GlobalAction a export onResize = GlobalAction("resize") - -onBodyScroll :: Action a -> GlobalAction a export onBodyScroll = GlobalAction("scroll") - -onStorage :: Action a -> GlobalAction a export onStorage = GlobalAction("storage") - -onUnload :: Action a -> GlobalAction a export onUnload = GlobalAction("unload") - -onUrlChanged :: Action a -> GlobalAction a export onUrlChanged = GlobalAction("popstate") diff --git a/madlib_modules/MadUI/src/Action.main.mad b/madlib_modules/MadUI/src/Action.main.mad new file mode 100644 index 0000000..a6b0a60 --- /dev/null +++ b/madlib_modules/MadUI/src/Action.main.mad @@ -0,0 +1,38 @@ +import Fn from "Function" +import IO from "IO" +import Wish from "Wish" + +import { syncAction } from "./Action" +import { AbstractEvent } from "./Event" + + + +main = () => { + stateUpdate = (x, _) => x + updater = syncAction(stateUpdate) + myAbstractEvent = AbstractEvent({ + bubbles: true, + defaultPrevented: true, + eventType: "nice", + preventDefault: () => {}, + stopImmediatePropagation: () => {}, + stopPropagation: () => {}, + timeStamp: 1, + }) + // return assertEquals( + raw = chain(updater({ state: "test" }))([myAbstractEvent]) + pipe( + Wish.fulfill( + pipe( + IO.trace("bad"), + Fn.noop, + ), + pipe( + IO.trace("good"), + Fn.noop, + ), + ), + )(raw) + // [Wish.good((s) => stateUpdate(s, myAbstractEvent))], + // ) +} diff --git a/madlib_modules/MadUI/src/Action.spec.mad b/madlib_modules/MadUI/src/Action.spec.mad new file mode 100644 index 0000000..9493f58 --- /dev/null +++ b/madlib_modules/MadUI/src/Action.spec.mad @@ -0,0 +1,89 @@ +import List from "List" +import { Just, Nothing } from "Maybe" +import { assertEquals, test } from "Test" +import Wish from "Wish" + +import { + GlobalAction, + onAfterPrint, + onBeforePrint, + onBeforeUnload, + onBodyScroll, + onDocumentLoad, + onOffline, + onOnline, + onPageHide, + onPageShow, + onResize, + onStorage, + onUnload, + onUrlChanged, + syncAction, + throttleAction, +} from "./Action" +import { AbstractEvent } from "./Event" + + + +myAbstractEvent = AbstractEvent({ + bubbles: true, + defaultPrevented: true, + eventType: "nice", + preventDefault: () => {}, + stopImmediatePropagation: () => {}, + stopPropagation: () => {}, + timeStamp: 1, +}) + +test( + "syncAction", + () => do { + stateUpdate = (x, _) => x + updater = syncAction(stateUpdate) + + executed = updater({ state: "test" }, myAbstractEvent) + out = Nothing + stateApplicator = (x) => pipe( + (fn) => fn(x), + (v) => { + out := Just(v) + }, + ) + pipe( + List.first, + map(Wish.fulfill(stateApplicator({ state: "bad" }), stateApplicator({ state: "good" }))), + )(executed) + return assertEquals(out, Just({ state: "good" })) + }, +) + +// this improves coverage but throttleAction is in the fence +test( + "throttleAction", + () => do { + myAction = (_, _) => [] + throttled = throttleAction(10, myAction) + out = throttled({ state: "test" }, myAbstractEvent) + return assertEquals(out, []) + }, +) + +test( + "Named GlobalActions", + () => do { + myAction = (_, _) => [] + _ <- assertEquals(onAfterPrint(myAction), GlobalAction("afterprint", myAction)) + _ <- assertEquals(onBeforePrint(myAction), GlobalAction("beforeprint", myAction)) + _ <- assertEquals(onBeforeUnload(myAction), GlobalAction("beforeunload", myAction)) + _ <- assertEquals(onDocumentLoad(myAction), GlobalAction("load", myAction)) + _ <- assertEquals(onPageHide(myAction), GlobalAction("pagehide", myAction)) + _ <- assertEquals(onPageShow(myAction), GlobalAction("pageshow", myAction)) + _ <- assertEquals(onOffline(myAction), GlobalAction("offline", myAction)) + _ <- assertEquals(onOnline(myAction), GlobalAction("online", myAction)) + _ <- assertEquals(onResize(myAction), GlobalAction("resize", myAction)) + _ <- assertEquals(onBodyScroll(myAction), GlobalAction("scroll", myAction)) + _ <- assertEquals(onStorage(myAction), GlobalAction("storage", myAction)) + _ <- assertEquals(onUnload(myAction), GlobalAction("unload", myAction)) + return assertEquals(onUrlChanged(myAction), GlobalAction("popstate", myAction)) + }, +) diff --git a/madlib_modules/MadUI/src/Config.spec.mad b/madlib_modules/MadUI/src/Config.spec.mad new file mode 100644 index 0000000..fd7e02a --- /dev/null +++ b/madlib_modules/MadUI/src/Config.spec.mad @@ -0,0 +1,40 @@ +import type { Config, RoutingKind } from "./Config" + +import { assertEquals, test } from "Test" + +import { GlobalAction } from "./Action" +import { + BasicRouting, + DEFAULT_CONFIG, + HashRouting, + addGlobalEventHandler, + addSubscription, +} from "./Config" + + + +test( + "addGlobalEventHandler", + () => do { + action = (_, _) => [] + globoAction = GlobalAction("dostuff", action) + return assertEquals( + addGlobalEventHandler(globoAction, DEFAULT_CONFIG), + { globalEventHandlers: [globoAction], routingKind: BasicRouting, subscriptions: [] }, + ) + }, +) + +test( + "addSubscription", + () => do { + sub = (_) => {} + return assertEquals( + addSubscription( + sub, + { subscriptions: [], globalEventHandlers: [], routingKind: HashRouting }, + ), + { globalEventHandlers: [], routingKind: HashRouting, subscriptions: [sub] }, + ) + }, +) diff --git a/madlib_modules/MadUI/src/CoreUtils.spec.mad b/madlib_modules/MadUI/src/CoreUtils.spec.mad new file mode 100644 index 0000000..1b091a8 --- /dev/null +++ b/madlib_modules/MadUI/src/CoreUtils.spec.mad @@ -0,0 +1,24 @@ +import Fn from "Function" +import { assertEquals, test } from "Test" + +import { runAction } from "./CoreUtils" + + + + +/* +test( + "runAction", + () => { + #- global.window = {} -# + env = { + rootView: Fn.identity, + patch: (a, b) => a, + currentElement: #- {} -#, + currentState: #- {} -#, + } + runAction(env, Fn.identity) + return assertEquals(env, #- {} -#) + }, +) +*/ diff --git a/madlib_modules/MadUI/src/Element.mad b/madlib_modules/MadUI/src/Element.mad index ab13630..1d156ed 100644 --- a/madlib_modules/MadUI/src/Element.mad +++ b/madlib_modules/MadUI/src/Element.mad @@ -82,8 +82,6 @@ export tag = (tagName, attrs, children) => _tag( children, ) - - export a = tag("a") export abbr = tag("abbr") export address = tag("address") diff --git a/madlib_modules/MadUI/src/Event.spec.mad b/madlib_modules/MadUI/src/Event.spec.mad new file mode 100644 index 0000000..6f6f908 --- /dev/null +++ b/madlib_modules/MadUI/src/Event.spec.mad @@ -0,0 +1,17 @@ +import { assertEquals, test } from "Test" + +import { buildKeyboardEvent } from "./Event" +import { KEY_COLON } from "./Key" + + + + +/* +test( + "buildKeyboardEvent", + () => do { + myEvent = {} + return assertEquals(buildKeyboardEvent(myEvent), {}) + }, +) +*/ From c65f79862bedf33b484476bc33e8436e6c0c3b25 Mon Sep 17 00:00:00 2001 From: brekk Date: Thu, 16 May 2024 16:13:15 -1000 Subject: [PATCH 22/22] more more more --- .github/workflows/docs.yml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/.github/workflows/docs.yml b/.github/workflows/docs.yml index a1a3f63..aa71512 100644 --- a/.github/workflows/docs.yml +++ b/.github/workflows/docs.yml @@ -22,7 +22,9 @@ jobs: - name: 😈 Automatically generating documentation... run: | npm install -g @madlib-lang/madlib - # madlib install + mv madlib_modules magic + madlib install + mv magic madlib_modules madlib compile --bundle -i madlib_modules/MadDocCli/src/Main.mad -o build/src/maddoc-cli.js node build/src/maddoc-cli.js src echo "wrapEventHandler..."