diff --git a/.env b/.env index 21d8744..b5d4881 100644 --- a/.env +++ b/.env @@ -1,7 +1,8 @@ -PROJECT_NAME=tibi-docs +PROJECT_NAME=tibi_starter TIBI_PREFIX=tibi -TIBI_NAMESPACE=tibi-docs +TIBI_NAMESPACE=tibi_starter UID=100 GID=101 RELEASE_ORG_SLUG=webmakers-gmbh -RELEASE_PROJECT_SLUG=tibi-docs +RELEASE_PROJECT_SLUG=tibi_starter +START_SCRIPT=:ssr \ No newline at end of file diff --git a/.gitea/actions/init-db/action.yaml b/.gitea/actions/init-db/action.yaml new file mode 100644 index 0000000..95526f8 --- /dev/null +++ b/.gitea/actions/init-db/action.yaml @@ -0,0 +1,76 @@ +name: initialize database +description: initialize database by using database of test environment +author: BinKrassDuFass + +inputs: + MONGODB_SERVICE_NAME: + description: 'Name of the MongoDB service' + required: true + default: 'mongo' + + TIBI_USERNAME: + description: 'Username of the Tibi account' + required: true + default: 'admin' + + TIBI_PASSWORD: + description: 'Password of the Tibi account' + required: true + default: 'admin' + + TIBI_API_URL: + description: 'URL of the Tibi API' + required: true + default: 'http://tibi-server:8080/api/v1' + + TIBI_API_CONFIG_PATH: + description: 'Path of the Tibi API config' + required: true + default: "${{github.workspace}}/api/config.yml}}" + + TIBI_API_NAMESPACE: + description: 'Namespace of the Tibi API' + required: true + + PROJECT_NAME: + description: 'Name of the project' + required: true + +runs: + using: composite + steps: + - name: Setup mongo tools + shell: bash + run: | + echo "::group::setup Mongo keys" + wget -qO - https://www.mongodb.org/static/pgp/server-6.0.asc | sudo apt-key add - + sudo apt-get install -y gnupg + wget -qO - https://www.mongodb.org/static/pgp/server-6.0.asc | sudo apt-key add - + echo "deb [ arch=amd64,arm64 ] https://repo.mongodb.org/apt/ubuntu focal/mongodb-org/6.0 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-6.0.list + echo "::endgroup::" + + echo "::group::mongodb tools" + sudo apt-get update + echo "aptitude install mongodb-database-tools" + sudo apt-get install -y mongodb-database-tools + echo "::endgroup::" + + echo "mongodump --version" + mongodump --version + + - name: Restore MongoDB Data + run: | + echo "::group::initialize mongo data" + mongorestore --uri "mongodb://${{inputs.MONGODB_SERVICE_NAME}}:27017" ./.github/actions/init-db/mongo-dump + echo "::endgroup::" + shell: bash + + - name: set config in tibi + shell: bash + run: ./.github/actions/init-db/setConfigInTibiProject.sh ${{inputs.TIBI_USERNAME}} ${{inputs.TIBI_PASSWORD}} ${{inputs.TIBI_API_URL}} ${{inputs.TIBI_API_CONFIG_PATH}} ${{inputs.TIBI_API_NAMESPACE}} ${{inputs.PROJECT_NAME}} + + + + + + diff --git a/.gitea/actions/init-db/mongo-dump/admin/system.version.bson b/.gitea/actions/init-db/mongo-dump/admin/system.version.bson new file mode 100644 index 0000000..1d05d10 Binary files /dev/null and b/.gitea/actions/init-db/mongo-dump/admin/system.version.bson differ diff --git a/.gitea/actions/init-db/mongo-dump/admin/system.version.metadata.json b/.gitea/actions/init-db/mongo-dump/admin/system.version.metadata.json new file mode 100644 index 0000000..6f50fa6 --- /dev/null +++ b/.gitea/actions/init-db/mongo-dump/admin/system.version.metadata.json @@ -0,0 +1 @@ +{"options":{},"indexes":[{"v":{"$numberInt":"2"},"key":{"_id":{"$numberInt":"1"}},"name":"_id_","ns":"admin.system.version"}],"uuid":"c25383adb2a64a8ca31b3bc5cbcb6690"} \ No newline at end of file diff --git a/.gitea/actions/init-db/mongo-dump/mongo-dump/admin/system.version.bson b/.gitea/actions/init-db/mongo-dump/mongo-dump/admin/system.version.bson new file mode 100644 index 0000000..1d05d10 Binary files /dev/null and b/.gitea/actions/init-db/mongo-dump/mongo-dump/admin/system.version.bson differ diff --git a/.gitea/actions/init-db/mongo-dump/mongo-dump/admin/system.version.metadata.json b/.gitea/actions/init-db/mongo-dump/mongo-dump/admin/system.version.metadata.json new file mode 100644 index 0000000..6f50fa6 --- /dev/null +++ b/.gitea/actions/init-db/mongo-dump/mongo-dump/admin/system.version.metadata.json @@ -0,0 +1 @@ +{"options":{},"indexes":[{"v":{"$numberInt":"2"},"key":{"_id":{"$numberInt":"1"}},"name":"_id_","ns":"admin.system.version"}],"uuid":"c25383adb2a64a8ca31b3bc5cbcb6690"} \ No newline at end of file diff --git a/.gitea/actions/init-db/mongo-dump/mongo-dump/tibi/project.bson b/.gitea/actions/init-db/mongo-dump/mongo-dump/tibi/project.bson new file mode 100644 index 0000000..bbfdef6 Binary files /dev/null and b/.gitea/actions/init-db/mongo-dump/mongo-dump/tibi/project.bson differ diff --git a/.gitea/actions/init-db/mongo-dump/mongo-dump/tibi/project.metadata.json b/.gitea/actions/init-db/mongo-dump/mongo-dump/tibi/project.metadata.json new file mode 100644 index 0000000..f315c1f --- /dev/null +++ b/.gitea/actions/init-db/mongo-dump/mongo-dump/tibi/project.metadata.json @@ -0,0 +1 @@ +{"options":{},"indexes":[{"v":{"$numberInt":"2"},"key":{"_id":{"$numberInt":"1"}},"name":"_id_","ns":"tibi.project"},{"v":{"$numberInt":"2"},"key":{"insertTime":{"$numberInt":"1"}},"name":"insertTime_1","ns":"tibi.project"},{"v":{"$numberInt":"2"},"key":{"updateTime":{"$numberInt":"1"}},"name":"updateTime_1","ns":"tibi.project"},{"v":{"$numberInt":"2"},"unique":true,"key":{"name":{"$numberInt":"1"}},"name":"name_1","ns":"tibi.project"},{"v":{"$numberInt":"2"},"key":{"_fts":"text","_ftsx":{"$numberInt":"1"}},"name":"textindex","ns":"tibi.project","weights":{"name":{"$numberInt":"1"}},"default_language":"german","language_override":"language","textIndexVersion":{"$numberInt":"3"}}],"uuid":"a0a6733bdb52400f9f3b17985bc28bcc"} \ No newline at end of file diff --git a/.gitea/actions/init-db/mongo-dump/mongo-dump/tibi/user.bson b/.gitea/actions/init-db/mongo-dump/mongo-dump/tibi/user.bson new file mode 100644 index 0000000..cc6ba71 Binary files /dev/null and b/.gitea/actions/init-db/mongo-dump/mongo-dump/tibi/user.bson differ diff --git a/.gitea/actions/init-db/mongo-dump/mongo-dump/tibi/user.metadata.json b/.gitea/actions/init-db/mongo-dump/mongo-dump/tibi/user.metadata.json new file mode 100644 index 0000000..6e2b321 --- /dev/null +++ b/.gitea/actions/init-db/mongo-dump/mongo-dump/tibi/user.metadata.json @@ -0,0 +1 @@ +{"options":{},"indexes":[{"v":{"$numberInt":"2"},"key":{"_id":{"$numberInt":"1"}},"name":"_id_","ns":"tibi.user"},{"v":{"$numberInt":"2"},"key":{"insertTime":{"$numberInt":"1"}},"name":"insertTime_1","ns":"tibi.user"},{"v":{"$numberInt":"2"},"key":{"updateTime":{"$numberInt":"1"}},"name":"updateTime_1","ns":"tibi.user"},{"v":{"$numberInt":"2"},"unique":true,"key":{"username":{"$numberInt":"1"}},"name":"username_1","ns":"tibi.user"},{"v":{"$numberInt":"2"},"key":{"_fts":"text","_ftsx":{"$numberInt":"1"}},"name":"textindex","ns":"tibi.user","weights":{"$**":{"$numberInt":"1"}},"default_language":"german","language_override":"language","textIndexVersion":{"$numberInt":"3"}}],"uuid":"ba627bbd4ac24b3ca92aebdc33b7d4b0"} \ No newline at end of file diff --git a/api/hooks/democol/delete_delete.js b/.gitea/actions/init-db/mongo-dump/mongo-dump/tibi_allkids_erfurt/backups.bson similarity index 100% rename from api/hooks/democol/delete_delete.js rename to .gitea/actions/init-db/mongo-dump/mongo-dump/tibi_allkids_erfurt/backups.bson diff --git a/.gitea/actions/init-db/mongo-dump/mongo-dump/tibi_allkids_erfurt/backups.metadata.json b/.gitea/actions/init-db/mongo-dump/mongo-dump/tibi_allkids_erfurt/backups.metadata.json new file mode 100644 index 0000000..b4e6af2 --- /dev/null +++ b/.gitea/actions/init-db/mongo-dump/mongo-dump/tibi_allkids_erfurt/backups.metadata.json @@ -0,0 +1 @@ +{"options":{},"indexes":[{"v":{"$numberInt":"2"},"key":{"_id":{"$numberInt":"1"}},"name":"_id_","ns":"tibi_allkids_erfurt.backups"},{"v":{"$numberInt":"2"},"key":{"insertTime":{"$numberInt":"1"}},"name":"insertTime_1","ns":"tibi_allkids_erfurt.backups"},{"v":{"$numberInt":"2"},"key":{"updateTime":{"$numberInt":"1"}},"name":"updateTime_1","ns":"tibi_allkids_erfurt.backups"}],"uuid":"4993cf280e844b5b80fe208350713002"} \ No newline at end of file diff --git a/.gitea/actions/init-db/mongo-dump/mongo-dump/tibi_allkids_erfurt/banner.bson b/.gitea/actions/init-db/mongo-dump/mongo-dump/tibi_allkids_erfurt/banner.bson new file mode 100644 index 0000000..1d6ff5c Binary files /dev/null and b/.gitea/actions/init-db/mongo-dump/mongo-dump/tibi_allkids_erfurt/banner.bson differ diff --git a/.gitea/actions/init-db/mongo-dump/mongo-dump/tibi_allkids_erfurt/banner.metadata.json b/.gitea/actions/init-db/mongo-dump/mongo-dump/tibi_allkids_erfurt/banner.metadata.json new file mode 100644 index 0000000..3ca715a --- /dev/null +++ b/.gitea/actions/init-db/mongo-dump/mongo-dump/tibi_allkids_erfurt/banner.metadata.json @@ -0,0 +1 @@ +{"options":{},"indexes":[{"v":{"$numberInt":"2"},"key":{"_id":{"$numberInt":"1"}},"name":"_id_","ns":"tibi_allkids_erfurt.banner"},{"v":{"$numberInt":"2"},"key":{"insertTime":{"$numberInt":"1"}},"name":"insertTime_1","ns":"tibi_allkids_erfurt.banner"},{"v":{"$numberInt":"2"},"key":{"updateTime":{"$numberInt":"1"}},"name":"updateTime_1","ns":"tibi_allkids_erfurt.banner"}],"uuid":"7346de51448b4a27b289a0e32336d0b6"} \ No newline at end of file diff --git a/.gitea/actions/init-db/mongo-dump/mongo-dump/tibi_allkids_erfurt/content.bson b/.gitea/actions/init-db/mongo-dump/mongo-dump/tibi_allkids_erfurt/content.bson new file mode 100644 index 0000000..e9516a0 Binary files /dev/null and b/.gitea/actions/init-db/mongo-dump/mongo-dump/tibi_allkids_erfurt/content.bson differ diff --git a/.gitea/actions/init-db/mongo-dump/mongo-dump/tibi_allkids_erfurt/content.metadata.json b/.gitea/actions/init-db/mongo-dump/mongo-dump/tibi_allkids_erfurt/content.metadata.json new file mode 100644 index 0000000..89dbd19 --- /dev/null +++ b/.gitea/actions/init-db/mongo-dump/mongo-dump/tibi_allkids_erfurt/content.metadata.json @@ -0,0 +1 @@ +{"options":{},"indexes":[{"v":{"$numberInt":"2"},"key":{"_id":{"$numberInt":"1"}},"name":"_id_","ns":"tibi_allkids_erfurt.content"},{"v":{"$numberInt":"2"},"key":{"insertTime":{"$numberInt":"1"}},"name":"insertTime_1","ns":"tibi_allkids_erfurt.content"},{"v":{"$numberInt":"2"},"key":{"updateTime":{"$numberInt":"1"}},"name":"updateTime_1","ns":"tibi_allkids_erfurt.content"},{"v":{"$numberInt":"2"},"key":{"meta.datum":{"$numberInt":"1"}},"name":"meta.datum_1","ns":"tibi_allkids_erfurt.content"}],"uuid":"df9951d7cf964e5e8a22360c09aa27c7"} \ No newline at end of file diff --git a/.gitea/actions/init-db/mongo-dump/mongo-dump/tibi_allkids_erfurt/forms.bson b/.gitea/actions/init-db/mongo-dump/mongo-dump/tibi_allkids_erfurt/forms.bson new file mode 100644 index 0000000..ae99fa2 Binary files /dev/null and b/.gitea/actions/init-db/mongo-dump/mongo-dump/tibi_allkids_erfurt/forms.bson differ diff --git a/.gitea/actions/init-db/mongo-dump/mongo-dump/tibi_allkids_erfurt/forms.metadata.json b/.gitea/actions/init-db/mongo-dump/mongo-dump/tibi_allkids_erfurt/forms.metadata.json new file mode 100644 index 0000000..98325ff --- /dev/null +++ b/.gitea/actions/init-db/mongo-dump/mongo-dump/tibi_allkids_erfurt/forms.metadata.json @@ -0,0 +1 @@ +{"options":{},"indexes":[{"v":{"$numberInt":"2"},"key":{"_id":{"$numberInt":"1"}},"name":"_id_","ns":"tibi_allkids_erfurt.forms"},{"v":{"$numberInt":"2"},"key":{"insertTime":{"$numberInt":"1"}},"name":"insertTime_1","ns":"tibi_allkids_erfurt.forms"},{"v":{"$numberInt":"2"},"key":{"updateTime":{"$numberInt":"1"}},"name":"updateTime_1","ns":"tibi_allkids_erfurt.forms"}],"uuid":"7815c4dfc9d9460c8aac8cf94cc67ea6"} \ No newline at end of file diff --git a/.gitea/actions/init-db/mongo-dump/mongo-dump/tibi_allkids_erfurt/lighthouse.bson b/.gitea/actions/init-db/mongo-dump/mongo-dump/tibi_allkids_erfurt/lighthouse.bson new file mode 100644 index 0000000..120e219 Binary files /dev/null and b/.gitea/actions/init-db/mongo-dump/mongo-dump/tibi_allkids_erfurt/lighthouse.bson differ diff --git a/.gitea/actions/init-db/mongo-dump/mongo-dump/tibi_allkids_erfurt/lighthouse.metadata.json b/.gitea/actions/init-db/mongo-dump/mongo-dump/tibi_allkids_erfurt/lighthouse.metadata.json new file mode 100644 index 0000000..b72325c --- /dev/null +++ b/.gitea/actions/init-db/mongo-dump/mongo-dump/tibi_allkids_erfurt/lighthouse.metadata.json @@ -0,0 +1 @@ +{"options":{},"indexes":[{"v":{"$numberInt":"2"},"key":{"_id":{"$numberInt":"1"}},"name":"_id_","ns":"tibi_allkids_erfurt.lighthouse"},{"v":{"$numberInt":"2"},"key":{"insertTime":{"$numberInt":"1"}},"name":"insertTime_1","ns":"tibi_allkids_erfurt.lighthouse"},{"v":{"$numberInt":"2"},"key":{"updateTime":{"$numberInt":"1"}},"name":"updateTime_1","ns":"tibi_allkids_erfurt.lighthouse"}],"uuid":"fca0bbd4089a43689609593178154de9"} \ No newline at end of file diff --git a/.gitea/actions/init-db/mongo-dump/mongo-dump/tibi_allkids_erfurt/lighthouseSubpath.bson b/.gitea/actions/init-db/mongo-dump/mongo-dump/tibi_allkids_erfurt/lighthouseSubpath.bson new file mode 100644 index 0000000..667950b Binary files /dev/null and b/.gitea/actions/init-db/mongo-dump/mongo-dump/tibi_allkids_erfurt/lighthouseSubpath.bson differ diff --git a/.gitea/actions/init-db/mongo-dump/mongo-dump/tibi_allkids_erfurt/lighthouseSubpath.metadata.json b/.gitea/actions/init-db/mongo-dump/mongo-dump/tibi_allkids_erfurt/lighthouseSubpath.metadata.json new file mode 100644 index 0000000..133c2ff --- /dev/null +++ b/.gitea/actions/init-db/mongo-dump/mongo-dump/tibi_allkids_erfurt/lighthouseSubpath.metadata.json @@ -0,0 +1 @@ +{"options":{},"indexes":[{"v":{"$numberInt":"2"},"key":{"_id":{"$numberInt":"1"}},"name":"_id_","ns":"tibi_allkids_erfurt.lighthouseSubpath"},{"v":{"$numberInt":"2"},"key":{"insertTime":{"$numberInt":"1"}},"name":"insertTime_1","ns":"tibi_allkids_erfurt.lighthouseSubpath"},{"v":{"$numberInt":"2"},"key":{"updateTime":{"$numberInt":"1"}},"name":"updateTime_1","ns":"tibi_allkids_erfurt.lighthouseSubpath"}],"uuid":"b72120ec4cd34054a83833dce78c869f"} \ No newline at end of file diff --git a/.gitea/actions/init-db/mongo-dump/mongo-dump/tibi_allkids_erfurt/navigation.bson b/.gitea/actions/init-db/mongo-dump/mongo-dump/tibi_allkids_erfurt/navigation.bson new file mode 100644 index 0000000..8a37f2a Binary files /dev/null and b/.gitea/actions/init-db/mongo-dump/mongo-dump/tibi_allkids_erfurt/navigation.bson differ diff --git a/.gitea/actions/init-db/mongo-dump/mongo-dump/tibi_allkids_erfurt/navigation.metadata.json b/.gitea/actions/init-db/mongo-dump/mongo-dump/tibi_allkids_erfurt/navigation.metadata.json new file mode 100644 index 0000000..1f57bf0 --- /dev/null +++ b/.gitea/actions/init-db/mongo-dump/mongo-dump/tibi_allkids_erfurt/navigation.metadata.json @@ -0,0 +1 @@ +{"options":{},"indexes":[{"v":{"$numberInt":"2"},"key":{"_id":{"$numberInt":"1"}},"name":"_id_","ns":"tibi_allkids_erfurt.navigation"},{"v":{"$numberInt":"2"},"key":{"insertTime":{"$numberInt":"1"}},"name":"insertTime_1","ns":"tibi_allkids_erfurt.navigation"},{"v":{"$numberInt":"2"},"key":{"updateTime":{"$numberInt":"1"}},"name":"updateTime_1","ns":"tibi_allkids_erfurt.navigation"}],"uuid":"d989bd0ea7ba4ea4ae728b8a6baa62ba"} \ No newline at end of file diff --git a/.gitea/actions/init-db/mongo-dump/mongo-dump/tibi_allkids_erfurt/ssr.bson b/.gitea/actions/init-db/mongo-dump/mongo-dump/tibi_allkids_erfurt/ssr.bson new file mode 100644 index 0000000..f1cadf7 Binary files /dev/null and b/.gitea/actions/init-db/mongo-dump/mongo-dump/tibi_allkids_erfurt/ssr.bson differ diff --git a/.gitea/actions/init-db/mongo-dump/mongo-dump/tibi_allkids_erfurt/ssr.metadata.json b/.gitea/actions/init-db/mongo-dump/mongo-dump/tibi_allkids_erfurt/ssr.metadata.json new file mode 100644 index 0000000..420de04 --- /dev/null +++ b/.gitea/actions/init-db/mongo-dump/mongo-dump/tibi_allkids_erfurt/ssr.metadata.json @@ -0,0 +1 @@ +{"options":{},"indexes":[{"v":{"$numberInt":"2"},"key":{"_id":{"$numberInt":"1"}},"name":"_id_","ns":"tibi_allkids_erfurt.ssr"},{"v":{"$numberInt":"2"},"key":{"insertTime":{"$numberInt":"1"}},"name":"insertTime_1","ns":"tibi_allkids_erfurt.ssr"},{"v":{"$numberInt":"2"},"key":{"updateTime":{"$numberInt":"1"}},"name":"updateTime_1","ns":"tibi_allkids_erfurt.ssr"},{"v":{"$numberInt":"2"},"unique":true,"key":{"path":{"$numberInt":"1"}},"name":"path_1","ns":"tibi_allkids_erfurt.ssr"}],"uuid":"75869e19f8164beabe53366265b10208"} \ No newline at end of file diff --git a/api/hooks/democol/delete_return.js b/.gitea/actions/init-db/mongo-dump/mongo-dump/tibi_allkids_erfurt/temperature.bson similarity index 100% rename from api/hooks/democol/delete_return.js rename to .gitea/actions/init-db/mongo-dump/mongo-dump/tibi_allkids_erfurt/temperature.bson diff --git a/.gitea/actions/init-db/mongo-dump/mongo-dump/tibi_allkids_erfurt/temperature.metadata.json b/.gitea/actions/init-db/mongo-dump/mongo-dump/tibi_allkids_erfurt/temperature.metadata.json new file mode 100644 index 0000000..308a315 --- /dev/null +++ b/.gitea/actions/init-db/mongo-dump/mongo-dump/tibi_allkids_erfurt/temperature.metadata.json @@ -0,0 +1 @@ +{"options":{},"indexes":[{"v":{"$numberInt":"2"},"key":{"_id":{"$numberInt":"1"}},"name":"_id_","ns":"tibi_allkids_erfurt.temperature"},{"v":{"$numberInt":"2"},"key":{"insertTime":{"$numberInt":"1"}},"name":"insertTime_1","ns":"tibi_allkids_erfurt.temperature"},{"v":{"$numberInt":"2"},"key":{"updateTime":{"$numberInt":"1"}},"name":"updateTime_1","ns":"tibi_allkids_erfurt.temperature"}],"uuid":"eb60c1bc334c4fa2a473fdb6c99b3e6a"} \ No newline at end of file diff --git a/.gitea/actions/init-db/mongo-dump/tibi/project.bson b/.gitea/actions/init-db/mongo-dump/tibi/project.bson new file mode 100644 index 0000000..6b97591 Binary files /dev/null and b/.gitea/actions/init-db/mongo-dump/tibi/project.bson differ diff --git a/.gitea/actions/init-db/mongo-dump/tibi/project.metadata.json b/.gitea/actions/init-db/mongo-dump/tibi/project.metadata.json new file mode 100644 index 0000000..f315c1f --- /dev/null +++ b/.gitea/actions/init-db/mongo-dump/tibi/project.metadata.json @@ -0,0 +1 @@ +{"options":{},"indexes":[{"v":{"$numberInt":"2"},"key":{"_id":{"$numberInt":"1"}},"name":"_id_","ns":"tibi.project"},{"v":{"$numberInt":"2"},"key":{"insertTime":{"$numberInt":"1"}},"name":"insertTime_1","ns":"tibi.project"},{"v":{"$numberInt":"2"},"key":{"updateTime":{"$numberInt":"1"}},"name":"updateTime_1","ns":"tibi.project"},{"v":{"$numberInt":"2"},"unique":true,"key":{"name":{"$numberInt":"1"}},"name":"name_1","ns":"tibi.project"},{"v":{"$numberInt":"2"},"key":{"_fts":"text","_ftsx":{"$numberInt":"1"}},"name":"textindex","ns":"tibi.project","weights":{"name":{"$numberInt":"1"}},"default_language":"german","language_override":"language","textIndexVersion":{"$numberInt":"3"}}],"uuid":"a0a6733bdb52400f9f3b17985bc28bcc"} \ No newline at end of file diff --git a/.gitea/actions/init-db/mongo-dump/tibi/user.bson b/.gitea/actions/init-db/mongo-dump/tibi/user.bson new file mode 100644 index 0000000..cc6ba71 Binary files /dev/null and b/.gitea/actions/init-db/mongo-dump/tibi/user.bson differ diff --git a/.gitea/actions/init-db/mongo-dump/tibi/user.metadata.json b/.gitea/actions/init-db/mongo-dump/tibi/user.metadata.json new file mode 100644 index 0000000..6e2b321 --- /dev/null +++ b/.gitea/actions/init-db/mongo-dump/tibi/user.metadata.json @@ -0,0 +1 @@ +{"options":{},"indexes":[{"v":{"$numberInt":"2"},"key":{"_id":{"$numberInt":"1"}},"name":"_id_","ns":"tibi.user"},{"v":{"$numberInt":"2"},"key":{"insertTime":{"$numberInt":"1"}},"name":"insertTime_1","ns":"tibi.user"},{"v":{"$numberInt":"2"},"key":{"updateTime":{"$numberInt":"1"}},"name":"updateTime_1","ns":"tibi.user"},{"v":{"$numberInt":"2"},"unique":true,"key":{"username":{"$numberInt":"1"}},"name":"username_1","ns":"tibi.user"},{"v":{"$numberInt":"2"},"key":{"_fts":"text","_ftsx":{"$numberInt":"1"}},"name":"textindex","ns":"tibi.user","weights":{"$**":{"$numberInt":"1"}},"default_language":"german","language_override":"language","textIndexVersion":{"$numberInt":"3"}}],"uuid":"ba627bbd4ac24b3ca92aebdc33b7d4b0"} \ No newline at end of file diff --git a/api/hooks/democol/get_read.js b/.gitea/actions/init-db/mongo-dump/tibi_allkids_erfurt/backups.bson similarity index 100% rename from api/hooks/democol/get_read.js rename to .gitea/actions/init-db/mongo-dump/tibi_allkids_erfurt/backups.bson diff --git a/.gitea/actions/init-db/mongo-dump/tibi_allkids_erfurt/backups.metadata.json b/.gitea/actions/init-db/mongo-dump/tibi_allkids_erfurt/backups.metadata.json new file mode 100644 index 0000000..b4e6af2 --- /dev/null +++ b/.gitea/actions/init-db/mongo-dump/tibi_allkids_erfurt/backups.metadata.json @@ -0,0 +1 @@ +{"options":{},"indexes":[{"v":{"$numberInt":"2"},"key":{"_id":{"$numberInt":"1"}},"name":"_id_","ns":"tibi_allkids_erfurt.backups"},{"v":{"$numberInt":"2"},"key":{"insertTime":{"$numberInt":"1"}},"name":"insertTime_1","ns":"tibi_allkids_erfurt.backups"},{"v":{"$numberInt":"2"},"key":{"updateTime":{"$numberInt":"1"}},"name":"updateTime_1","ns":"tibi_allkids_erfurt.backups"}],"uuid":"4993cf280e844b5b80fe208350713002"} \ No newline at end of file diff --git a/.gitea/actions/init-db/mongo-dump/tibi_allkids_erfurt/banner.bson b/.gitea/actions/init-db/mongo-dump/tibi_allkids_erfurt/banner.bson new file mode 100644 index 0000000..1d6ff5c Binary files /dev/null and b/.gitea/actions/init-db/mongo-dump/tibi_allkids_erfurt/banner.bson differ diff --git a/.gitea/actions/init-db/mongo-dump/tibi_allkids_erfurt/banner.metadata.json b/.gitea/actions/init-db/mongo-dump/tibi_allkids_erfurt/banner.metadata.json new file mode 100644 index 0000000..3ca715a --- /dev/null +++ b/.gitea/actions/init-db/mongo-dump/tibi_allkids_erfurt/banner.metadata.json @@ -0,0 +1 @@ +{"options":{},"indexes":[{"v":{"$numberInt":"2"},"key":{"_id":{"$numberInt":"1"}},"name":"_id_","ns":"tibi_allkids_erfurt.banner"},{"v":{"$numberInt":"2"},"key":{"insertTime":{"$numberInt":"1"}},"name":"insertTime_1","ns":"tibi_allkids_erfurt.banner"},{"v":{"$numberInt":"2"},"key":{"updateTime":{"$numberInt":"1"}},"name":"updateTime_1","ns":"tibi_allkids_erfurt.banner"}],"uuid":"7346de51448b4a27b289a0e32336d0b6"} \ No newline at end of file diff --git a/.gitea/actions/init-db/mongo-dump/tibi_allkids_erfurt/content.bson b/.gitea/actions/init-db/mongo-dump/tibi_allkids_erfurt/content.bson new file mode 100644 index 0000000..e9516a0 Binary files /dev/null and b/.gitea/actions/init-db/mongo-dump/tibi_allkids_erfurt/content.bson differ diff --git a/.gitea/actions/init-db/mongo-dump/tibi_allkids_erfurt/content.metadata.json b/.gitea/actions/init-db/mongo-dump/tibi_allkids_erfurt/content.metadata.json new file mode 100644 index 0000000..89dbd19 --- /dev/null +++ b/.gitea/actions/init-db/mongo-dump/tibi_allkids_erfurt/content.metadata.json @@ -0,0 +1 @@ +{"options":{},"indexes":[{"v":{"$numberInt":"2"},"key":{"_id":{"$numberInt":"1"}},"name":"_id_","ns":"tibi_allkids_erfurt.content"},{"v":{"$numberInt":"2"},"key":{"insertTime":{"$numberInt":"1"}},"name":"insertTime_1","ns":"tibi_allkids_erfurt.content"},{"v":{"$numberInt":"2"},"key":{"updateTime":{"$numberInt":"1"}},"name":"updateTime_1","ns":"tibi_allkids_erfurt.content"},{"v":{"$numberInt":"2"},"key":{"meta.datum":{"$numberInt":"1"}},"name":"meta.datum_1","ns":"tibi_allkids_erfurt.content"}],"uuid":"df9951d7cf964e5e8a22360c09aa27c7"} \ No newline at end of file diff --git a/.gitea/actions/init-db/mongo-dump/tibi_allkids_erfurt/forms.bson b/.gitea/actions/init-db/mongo-dump/tibi_allkids_erfurt/forms.bson new file mode 100644 index 0000000..ae99fa2 Binary files /dev/null and b/.gitea/actions/init-db/mongo-dump/tibi_allkids_erfurt/forms.bson differ diff --git a/.gitea/actions/init-db/mongo-dump/tibi_allkids_erfurt/forms.metadata.json b/.gitea/actions/init-db/mongo-dump/tibi_allkids_erfurt/forms.metadata.json new file mode 100644 index 0000000..98325ff --- /dev/null +++ b/.gitea/actions/init-db/mongo-dump/tibi_allkids_erfurt/forms.metadata.json @@ -0,0 +1 @@ +{"options":{},"indexes":[{"v":{"$numberInt":"2"},"key":{"_id":{"$numberInt":"1"}},"name":"_id_","ns":"tibi_allkids_erfurt.forms"},{"v":{"$numberInt":"2"},"key":{"insertTime":{"$numberInt":"1"}},"name":"insertTime_1","ns":"tibi_allkids_erfurt.forms"},{"v":{"$numberInt":"2"},"key":{"updateTime":{"$numberInt":"1"}},"name":"updateTime_1","ns":"tibi_allkids_erfurt.forms"}],"uuid":"7815c4dfc9d9460c8aac8cf94cc67ea6"} \ No newline at end of file diff --git a/.gitea/actions/init-db/mongo-dump/tibi_allkids_erfurt/navigation.bson b/.gitea/actions/init-db/mongo-dump/tibi_allkids_erfurt/navigation.bson new file mode 100644 index 0000000..8a37f2a Binary files /dev/null and b/.gitea/actions/init-db/mongo-dump/tibi_allkids_erfurt/navigation.bson differ diff --git a/.gitea/actions/init-db/mongo-dump/tibi_allkids_erfurt/navigation.metadata.json b/.gitea/actions/init-db/mongo-dump/tibi_allkids_erfurt/navigation.metadata.json new file mode 100644 index 0000000..1f57bf0 --- /dev/null +++ b/.gitea/actions/init-db/mongo-dump/tibi_allkids_erfurt/navigation.metadata.json @@ -0,0 +1 @@ +{"options":{},"indexes":[{"v":{"$numberInt":"2"},"key":{"_id":{"$numberInt":"1"}},"name":"_id_","ns":"tibi_allkids_erfurt.navigation"},{"v":{"$numberInt":"2"},"key":{"insertTime":{"$numberInt":"1"}},"name":"insertTime_1","ns":"tibi_allkids_erfurt.navigation"},{"v":{"$numberInt":"2"},"key":{"updateTime":{"$numberInt":"1"}},"name":"updateTime_1","ns":"tibi_allkids_erfurt.navigation"}],"uuid":"d989bd0ea7ba4ea4ae728b8a6baa62ba"} \ No newline at end of file diff --git a/.gitea/actions/init-db/mongo-dump/tibi_allkids_erfurt/ssr.bson b/.gitea/actions/init-db/mongo-dump/tibi_allkids_erfurt/ssr.bson new file mode 100644 index 0000000..a026cfd Binary files /dev/null and b/.gitea/actions/init-db/mongo-dump/tibi_allkids_erfurt/ssr.bson differ diff --git a/.gitea/actions/init-db/mongo-dump/tibi_allkids_erfurt/ssr.metadata.json b/.gitea/actions/init-db/mongo-dump/tibi_allkids_erfurt/ssr.metadata.json new file mode 100644 index 0000000..420de04 --- /dev/null +++ b/.gitea/actions/init-db/mongo-dump/tibi_allkids_erfurt/ssr.metadata.json @@ -0,0 +1 @@ +{"options":{},"indexes":[{"v":{"$numberInt":"2"},"key":{"_id":{"$numberInt":"1"}},"name":"_id_","ns":"tibi_allkids_erfurt.ssr"},{"v":{"$numberInt":"2"},"key":{"insertTime":{"$numberInt":"1"}},"name":"insertTime_1","ns":"tibi_allkids_erfurt.ssr"},{"v":{"$numberInt":"2"},"key":{"updateTime":{"$numberInt":"1"}},"name":"updateTime_1","ns":"tibi_allkids_erfurt.ssr"},{"v":{"$numberInt":"2"},"unique":true,"key":{"path":{"$numberInt":"1"}},"name":"path_1","ns":"tibi_allkids_erfurt.ssr"}],"uuid":"75869e19f8164beabe53366265b10208"} \ No newline at end of file diff --git a/api/hooks/democol/get_return.js b/.gitea/actions/init-db/mongo-dump/tibi_allkids_erfurt/temperature.bson similarity index 100% rename from api/hooks/democol/get_return.js rename to .gitea/actions/init-db/mongo-dump/tibi_allkids_erfurt/temperature.bson diff --git a/.gitea/actions/init-db/mongo-dump/tibi_allkids_erfurt/temperature.metadata.json b/.gitea/actions/init-db/mongo-dump/tibi_allkids_erfurt/temperature.metadata.json new file mode 100644 index 0000000..308a315 --- /dev/null +++ b/.gitea/actions/init-db/mongo-dump/tibi_allkids_erfurt/temperature.metadata.json @@ -0,0 +1 @@ +{"options":{},"indexes":[{"v":{"$numberInt":"2"},"key":{"_id":{"$numberInt":"1"}},"name":"_id_","ns":"tibi_allkids_erfurt.temperature"},{"v":{"$numberInt":"2"},"key":{"insertTime":{"$numberInt":"1"}},"name":"insertTime_1","ns":"tibi_allkids_erfurt.temperature"},{"v":{"$numberInt":"2"},"key":{"updateTime":{"$numberInt":"1"}},"name":"updateTime_1","ns":"tibi_allkids_erfurt.temperature"}],"uuid":"eb60c1bc334c4fa2a473fdb6c99b3e6a"} \ No newline at end of file diff --git a/.gitea/actions/init-db/setConfigInTibiProject.sh b/.gitea/actions/init-db/setConfigInTibiProject.sh new file mode 100644 index 0000000..7c570af --- /dev/null +++ b/.gitea/actions/init-db/setConfigInTibiProject.sh @@ -0,0 +1,108 @@ +#!/bin/bash + +# Start a GitHub Actions group for input validation +echo "::group::Validating Inputs" + +# Check if the correct number of arguments is passed +if [ "$#" -ne 6 ]; then + echo "Incorrect number of arguments provided." + echo "Usage: $0 " + exit 1 +fi + +# Assigning passed arguments to variables for better readability +TIBI_USERNAME=$1 +TIBI_PASSWORD=$2 +TIBI_API_URL=$3 +PROJECT_API_CONFIG=$4 +PROJECT_NAMESPACE=$5 +PROJECT_NAME=$6 + +echo "Provided TIBI_USERNAME: $TIBI_USERNAME" +echo "TIBI_API_URL: $TIBI_API_URL" +# Be cautious with logging sensitive data like passwords and tokens +# Echoing the password or sensitive information is generally not recommended + +# End the input validation group +echo "::endgroup::" + +# Start a group for authentication +echo "::group::Authenticating User" + +# Prepare authentication request payload +auth_payload=$(jq -n --arg username "$TIBI_USERNAME" --arg password "$TIBI_PASSWORD" '{username: $username, password: $password}') +echo "Authentication payload: $auth_payload" +# Fetch the authentication token +echo "Requesting authentication token..." +auth_response=$(curl -s -X POST -H "Content-Type: application/json" -d "$auth_payload" "$TIBI_API_URL/login") +# Logging the response for debugging (remove sensitive data as necessary) +echo "Authentication response: $auth_response" + +# Extract token from the response +TIBI_AUTH_TOKEN=$(echo $auth_response | jq -r '.token') + +# Check if the token was successfully retrieved +if [ -z "$TIBI_AUTH_TOKEN" ]; then + echo "Failed to get authentication token. Exiting script." + exit 1 +fi + +echo "Authentication token received successfully." +echo "::endgroup::" + +# Start a group for fetching project data +echo "::group::Fetching Project Data" + +# Get the list of projects from the API +echo "Retrieving projects..." +response=$(curl -s -H "X-Auth-Token: $TIBI_AUTH_TOKEN" "$TIBI_API_URL/project") +echo $response +projects=$(echo $response) # Parse the JSON response to get project data + +echo "::endgroup::" + +# Start a group for processing project data +echo "::group::Processing Project Data" + +# Initialize variables to track project existence +projectFound=false +projectId="" + +# Loop through each project to find if the required project exists +for row in $(echo "${projects}" | jq -r '.[] | @base64'); do + _jq() { + echo ${row} | base64 --decode | jq -r ${1} + } + + api_name=$(_jq '.name') + # Check if the current project's namespace matches the target + if [ "$api_name" == "$PROJECT_NAME" ]; then + projectId=$(_jq '.id') + projectData=$(echo ${row} | base64 --decode) + projectFound=true + break + fi +done + +echo "::endgroup::" + +# Start a group for creating or updating the project +echo "::group::Creating or Updating Project" + +# Conditionally create a new project or update the existing one +if [ "$projectFound" = true ]; then + echo "Project found with ID: $projectId, updating..." + # Prepare updated project data + updatedProjectData=$(echo $projectData | jq --arg configFile "$PROJECT_API_CONFIG" '.configFile = $configFile | del(.id)') + # Send a PUT request to update the project + updateResponse=$(curl -s -X PUT -H "Content-Type: application/json" -H "X-Auth-Token: $TIBI_AUTH_TOKEN" -d "$updatedProjectData" "$TIBI_API_URL/project/$projectId") + # Logging the response for debugging (remove sensitive data as necessary) + echo "Update response: $updateResponse" + +else + echo "Project not found. Creating new project..." + # Send a POST request to create a new project + createResponse=$(curl -s -X POST -H "Content-Type: application/json" -H "X-Auth-Token: $TIBI_AUTH_TOKEN" -d "{\"configFile\":\"$PROJECT_API_CONFIG\", \"name\":\"$PROJECT_NAMESPACE\", \"namespace\":\"$PROJECT_NAMESPACE\", \"description\":\"$PROJECT_NAMESPACE\"}" "$TIBI_API_URL/project") +fi + +echo "::endgroup::" diff --git a/.gitea/workflows/deploy.yaml b/.gitea/workflows/deploy.yaml index eb4f2b5..cde5dad 100644 --- a/.gitea/workflows/deploy.yaml +++ b/.gitea/workflows/deploy.yaml @@ -1,11 +1,200 @@ name: deploy to production on: "push" -# push: -# branches: -# - master - jobs: + lighthouse-evaluation: + runs-on: ubuntu-latest + container: + image: gitbase.de/actions/ubuntu:latest + volumes: + - /data:/data + services: + mongo: + image: mongo:4.2 + ports: + - 27017:27017 + options: --name mongo + + maildev: + image: gitbase.de/robin/maildev:latest + ports: + - 80:80 + - 25:25 + options: --name maildev + + tibi-server: + image: gitbase.de/cms/tibi-server + ports: + - 8080:8080 + env: + DB_DIAL: mongodb://mongo + API_PORT: 8080 + MAIL_HOST: maildev:25 + SECURITY_ALLOWABSOLUTEPATHS: "true" + SECURITY_ALLOWUPPERPATHS: "true" + SECURITY_ALLOWRELATIVEPATHS: "true" + options: --name tibi-server + volumes: + - ${{ github.workspace }}:/repo + + live-server: + image: gitbase.de/robin/apache-image:latest + ports: + - 8081:80 + volumes: + - ${{ github.workspace }}/frontend:/usr/local/apache2/htdocs/ + options: --name live-server + + steps: + - uses: actions/checkout@v3 + with: + fetch-depth: 0 + + - name: setup node 18 + uses: actions/setup-node@v3 + + - name: Initialize database + uses: ./.github/actions/init-db + with: + TIBI_API_NAMESPACE: allkids_erfurt + TIBI_API_CONFIG_PATH: /repo/api/config.yml + PROJECT_NAME: AllKids + + - name: SERVICE RESTART + uses: docker://docker + with: + args: docker restart live-server tibi-server mongo maildev + + - name: Cache node modules + uses: actions/cache@v3 + with: + path: | + .yarn/cache + key: ${{ runner.os }}-yarn-${{ hashFiles('**/yarn.lock') }} + restore-keys: | + ${{ runner.os }}-yarn- + + - name: setup yarn + run: | + corepack enable + corepack prepare yarn@3.2.4 --activate + yarn install + + - name: modify config + run: | + sed -i 's#\(sentryEnvironment.*\)".*"#\1"${GITHUB_REF_NAME}"#g' frontend/src/config.ts + sed -i 's#//\( sentry\\.init.*\)#\1#g' frontend/src/config.ts + export $(cat .env | xargs) + echo "PROJECT_RELEASE=${RELEASE_PROJECT_SLUG}.r`git rev-list HEAD --count`-`git describe --all --long | sed 's+/+-+'`" >> .env + export $(cat .env | xargs) + echo ______ .env ______ + cat .env + echo + sed -i 's#\(const release = \).*#\1"'${PROJECT_RELEASE}'"#g' api/hooks/config-client.js + + # bash scripts/preload-meta.sh frontend/spa.html + # bash scripts/preload-meta.sh frontend/spa.html > frontend/_spa.html + # cp frontend/_spa.html frontend/spa.html + + export stamp=`date +%s` + sed -i s/__TIMESTAMP__/$stamp/g frontend/spa.html + # sed -i s/__TIMESTAMP__/$stamp/g frontend/serviceworker.js + # cat frontend/serviceworker.js + # rm api/templates/spa.html + # cp frontend/spa.html api/templates/spa.html + echo ______ frontend/spa.html ______ + cat frontend/spa.html + + - name: build + env: + FORCE_COLOR: "true" + run: | + yarn build + + - name: build ssr + env: + FORCE_COLOR: "true" + run: | + yarn build:server + + #- name: Load .env file + # run: | + # set -a + # source .env + # set + a + + - name: SERVICE RESTART + uses: docker://docker + with: + args: docker restart live-server tibi-server + + - name: wait for boot + run: | + sleep 15 + + - name: Inspect Service Containers + run: | + for container_id in $(docker ps --format '{{.ID}}'); do + echo "::group:: Container logs:" + docker logs $container_id || true + echo "::endgroup::" + done + + #- name: Wait for Live Server + # run: | + # attempts=0 + # max_attempts=5 + # same port since its inside the same network, so not 8081.... + # while ! curl --fail "http://live-server:80"; do + # if [ $attempts -eq $max_attempts ]; then + # echo "Live server not ready after $max_attempts attempts" + # echo "${{ toJson(job) }}" + # curl -v "http://live-server:80" || true + # echo "::group::liveserver logs" + # docker logs live-server + # echo "::endgroup::" + # echo "::group:: tibi-server logs" + # docker logs tibi-server + # echo "::endgroup::" + # echo "::group:: tibi-server curl" + # docker exec live-server cat /var/log/apache2/access.log || true + # docker exec live-server bash -c "apt-get update && apt-get install -y curl" + # docker exec live-server echo $PATH + # docker exec live-server bash -c 'curl -v "http://tibi-server:8080/api/v1/_/allkids_erfurt/ssr?token=owshwerNwoa&url=/noindex"' + # echo "::endgroup::" + # exit 1 + # fi + # attempts=$((attempts+1)) + # echo "Waiting for live-server to be ready... attempt $attempts" + # sleep 5 + # done + + - name: Test HTTP Request + run: | + curl -v http://live-server:80 + + - name: Install Chrome + run: | + wget -q -O - https://dl.google.com/linux/linux_signing_key.pub | sudo apt-key add - + sudo sh -c 'echo "deb [arch=amd64] http://dl.google.com/linux/chrome/deb/ stable main" >> /etc/apt/sources.list.d/google-chrome.list' + + sudo apt-get update + sudo apt-get install -y google-chrome-stable + + # Lighthouse Analysis Step + - name: Lighthouse Analysis + run: | + yarn add lighthouse + npx lighthouse http://live-server:80 --output json --output-path /tmp/lighthouse-report.json --chrome-flags="--headless --no-sandbox --disable-dev-shm-usage" + + - name: upload-to-nextcloud + run: | + sudo apt-get update && sudo apt-get install -y curl bash findutils + export datetime=`date +%Y-%m-%d_%H-%M-%S` + mkdir -p /tmp/cloudsend/${GITHUB_REF_NAME}/$${datetime} + mv /tmp/lighthouse-report.json /tmp/cloudsend/${GITHUB_REF_NAME}/$${datetime}/ + ./scripts/cloudsend.sh /tmp/cloudsend/ https://www.basiswolke.de/index.php/s/xHGsypbqiifnGH5 + deploy: name: deploy runs-on: ubuntu-latest @@ -13,46 +202,98 @@ jobs: image: gitbase.de/actions/ubuntu:latest volumes: - /data:/data + + services: + mongo: + image: mongo:4.2 + ports: + - 27017:27017 + + maildev: + image: gitbase.de/robin/maildev:latest + ports: + - 80:80 + - 25:25 + + tibi-server: + image: gitbase.de/cms/tibi-server + ports: + - 8080:8080 + env: + DB_DIAL: mongodb://mongo + API_PORT: 8080 + MAIL_HOST: maildev:25 + SECURITY_ALLOWABSOLUTEPATHS: "true" + SECURITY_ALLOWUPPERPATHS: "true" + SECURITY_ALLOWRELATIVEPATHS: "true" + + live-server: + image: gitbase.de/robin/live-server:latest + ports: + - 8081:8081 + steps: - uses: actions/checkout@v3 with: fetch-depth: 0 - lfs: true - submodules: true - - run: | - git fetch --force --tags - - # setup node 18 - name: setup node 18 uses: actions/setup-node@v3 - with: - node-version: 18 - - name: build docs + - name: install dependencies env: FORCE_COLOR: "true" run: | - node --version - cd docs npm install -g yarn yarn install - yarn docpress:build - - name: deploy docs - # only if branch is master + - name: modify config + run: | + sed -i 's#\(sentryEnvironment.*\)".*"#\1"${GITHUB_REF_NAME}"#g' frontend/src/config.ts + sed -i 's#//\( sentry\\.init.*\)#\1#g' frontend/src/config.ts + export $(cat .env | xargs) + echo "PROJECT_RELEASE=${RELEASE_PROJECT_SLUG}.r`git rev-list HEAD --count`-`git describe --all --long | sed 's+/+-+'`" >> .env + export $(cat .env | xargs) + echo ______ .env ______ + cat .env + echo + sed -i 's#\(const release = \).*#\1"'${PROJECT_RELEASE}'"#g' api/hooks/config-client.js + + # bash scripts/preload-meta.sh frontend/spa.html + # bash scripts/preload-meta.sh frontend/spa.html > frontend/_spa.html + # cp frontend/_spa.html frontend/spa.html + + export stamp=`date +%s` + sed -i s/__TIMESTAMP__/$stamp/g frontend/spa.html + # sed -i s/__TIMESTAMP__/$stamp/g frontend/serviceworker.js + # cat frontend/serviceworker.js + # rm api/templates/spa.html + # cp frontend/spa.html api/templates/spa.html + echo ______ frontend/spa.html ______ + cat frontend/spa.html + + - name: build + env: + FORCE_COLOR: "true" + run: | + yarn build + + - name: build ssr + env: + FORCE_COLOR: "true" + run: | + yarn build:server + + - name: build legacy + env: + FORCE_COLOR: "true" + run: | + yarn build:legacy + + - name: deploy if: github.ref == 'refs/heads/master' env: - RSYNC_HOST: ftp1.webmakers.de - RSYNC_PORT: 22222 - RSYNC_USER: webmakers_tibi_docs_rsync_master + RSYNC_USER: "allkids_rsync_master" RSYNC_PASS: ${{ secrets.rsync_master }} run: | - cd docs - ls -la - - rsync -rlcgD --perms -i -u -v --stats --progress \ - --delete \ - -e "sshpass -p ${RSYNC_PASS} ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -p ${RSYNC_PORT}" \ - _docpress/ \ - ${RSYNC_USER}@${RSYNC_HOST}:./ \ + scripts/deploy.sh ftp1.webmakers.de $RSYNC_USER $RSYNC_PASS diff --git a/README.md b/README.md index b19f781..86095e2 100644 --- a/README.md +++ b/README.md @@ -1,14 +1,14 @@ # Tibi Docs und Demo Projekt -Diese Repo enthält die Dokumentation zum TibiCMS und eine Demo-Projekt welches die Dokumentation begleitet. +Diese Repo enthält die Dokumentation zum TibiCMS und eine Demo-Projekt welches die Dokumentation begleitet. Das Demo-Projekt kann als Vorlage für neue Tibi-Projekte verwendet werden. ## neues Projekt - Checkliste -- [x] neues Projekt im gitbase.de anlegen (cms/tibi-docs) als Vorlage verwenden -- [ ] klonen -- [ ] bereinigen +- [x] neues Projekt im gitbase.de anlegen (cms/tibi_starter) als Vorlage verwenden +- [ ] klonen +- [ ] bereinigen ```sh git filter-branch -f --index-filter 'git rm -rf --cached --ignore-unmatch .yarn/cache' HEAD @@ -16,13 +16,13 @@ git filter-branch -f --index-filter 'git rm -rf --cached --ignore-unmatch docs' git push --force ``` -- [ ] anpassen +- [ ] anpassen - - `.env` - - `docker-compose-local.yml` -> `name:` - - `api/...` + - `.env` + - `docker-compose-local.yml` -> `name:` + - `api/...` -- [ ] upgraden +- [ ] upgraden ```sh mkdir tmp @@ -34,7 +34,7 @@ make docker-pull make fix-permissions ``` -- [ ] los programmieren +- [ ] los programmieren ```sh make docker-start @@ -43,17 +43,18 @@ make docker-start make fix-permissions ``` -- [ ] Projekt in Tibi bekannt machen: - - - - Pfad der API-Konfig: `/data/api/config.yml` -- [ ] Website im Browser ansehen: - - -- [ ] Testmails checken: - - +- [ ] Projekt in Tibi bekannt machen: + - + - Pfad der API-Konfig: `/data/api/config.yml` +- [ ] Website im Browser ansehen: + - +- [ ] Testmails checken: -- [ ] deploy - 1. [ ] Subdomain im basispanel anlegen auf `../frontend/` - 2. [ ] rsync-Account in basispanel anlegen auf `htdocs/` - 3. [ ] Passwort in Secrets eintragen: - 4. [ ] `.drone.yml` anpassen - 5. [ ] pushen + - + +- [ ] deploy + 1. [ ] Subdomain im basispanel anlegen auf `../frontend/` + 2. [ ] rsync-Account in basispanel anlegen auf `htdocs/` + 3. [ ] Passwort in Secrets eintragen: + 4. [ ] `.drone.yml` anpassen + 5. [ ] pushen diff --git a/api/assets/demoassets.yml b/api/assets/demoassets.yml deleted file mode 100644 index be0c0f3..0000000 --- a/api/assets/demoassets.yml +++ /dev/null @@ -1,12 +0,0 @@ -# Ordnerpfade, die über den tibi-server direkt erreichbar seien sollen, -# können über den "path" relativ zur "config.yml" definiert werden. -# Durch die "name"-Definition werden diese Pfade eindeutig unterschieden. -# Für folgende Beispielangaben bildet sich folgende URL: -# -# TIBI-SERVER-URL/api/v1/_/NAMESPACE/_/assets/_dist_/ -# -# Jeder Zugriff wird intern umgeleitet auf ../frontend/_dist_/ -# (relativ zur "config.yml"). -# Es ist ausschließlich ein unbeschränkter Lesezugriff (GET-Methode) möglich. -name: _dist_ -path: ../frontend/_dist_ diff --git a/api/collections/backups.yml b/api/collections/backups.yml index 1876bef..0d6051a 100644 --- a/api/collections/backups.yml +++ b/api/collections/backups.yml @@ -29,6 +29,13 @@ hooks: create: type: javascript file: hooks/backups/post_create.js + return: + type: javascript + file: hooks/clear_cache.js + put: + return: + type: javascript + file: hooks/clear_cache.js fields: - name: collectionName diff --git a/api/collections/content.yml b/api/collections/content.yml new file mode 100644 index 0000000..a12c79c --- /dev/null +++ b/api/collections/content.yml @@ -0,0 +1,205 @@ +name: content +uploadPath: ../media/page + +meta: + label: Inhalt + muiIcon: tableOfContents + allowExportAll: true + backup: + active: true + collectionName: backups + defaultSort: + field: sort + order: MANUALLY + views: + - type: simpleList + selectionPriority: 0 + primaryText: pageTitle + secondaryText: path + mediaQuery: "(min-width: 0px)" + tertiaryText: type + - type: table + selectionPriority: 1 + mediaQuery: "(min-width: 700px)" + columns: + - source: type + name: Typ + filter: true + - source: path + name: Pfad + filter: true + - source: pageTitle + name: Titel + filter: true + - source: active + name: Aktiv + filter: true + + tablist: + activeTab: general + + tabs: + - name: general + label: Allgemein + subFields: + - source: path + - source: pageTitle + - source: type + - source: active + - source: sort + + - name: teaser + label: Homepage Seitenteaser + subFields: + - source: teaser + + - name: site + label: Seite + subFields: + - source: rows + + - name: meta + label: Meta + subFields: + - source: meta + + subNavigation: + - name: seite + label: + de: Seiten + en: pages + muiIcon: book-open-page-variant + defaultSort: + field: "sort" + order: "MANUALLY" + setDefault: + field: type + value: page + + views: + - type: table + columns: + - source: path + name: Pfad + filter: true + - source: pageTitle + name: Titel + filter: true + - source: active + name: Aktiv + filter: true + filter: + type: page + +permissions: + public: + methods: + get: true + post: false + put: false + delete: false + user: + methods: + get: true + post: true + put: true + delete: true + +hooks: + post: + return: + type: javascript + file: hooks/clear_cache.js + put: + return: + type: javascript + file: hooks/clear_cache.js + +projections: + navigation: + select: + path: 1 + +fields: + - type: string + name: path + meta: + label: Pfad + helperText: "Ein Pfad sollte mit einem / starten und ohne eins enden." + containerProps: + layout: + size: + default: "col-6" + small: "col-12" + large: "col-6" + + - type: boolean + name: active + meta: + label: Aktiv + helperText: Ist dies Aktiviert, so wird der Inhalt verfügbar. + defaultValue: true + containerProps: + layout: + size: + default: "col-6" + small: "col-12" + large: "col-6" + + - type: string + name: type + meta: + label: Inhaltstyp + widget: select + defaultValue: page + containerProps: + layout: + size: + default: "col-6" + small: "col-12" + large: "col-6" + choices: + - name: Seite + id: page + + - name: pageTitle + type: string + meta: + label: Titel der Seite + helperText: "Dieser Titel wird in der Seite als h1 angezeigt." + dependsOn: + eval: $.type == "page" + containerProps: + layout: + size: + default: "col-6" + small: "col-12" + large: "col-6" + + - name: rows + type: object[] + meta: + label: Zeilen + widget: grid + metaElements: [] + subFields: !include fieldLists/row.yml + + - name: meta + type: object + meta: + label: Meta Agaben + dependsOn: + eval: $.type == "page" + subFields: !include fieldLists/meta.yml + + - name: sort + type: number + meta: + label: + de: Manuelle Sortierung + en: Manual Sorting + inputProps: + { readonly: true, placeholder: { de: "Wert wird automatisch gesetzt", en: "Value is set automatically" } } + helperText: + de: Dieses Feld wird für die manuelle Sortierung benötigt. Sobald ein Eintrag per Drag&Drop verschoben wurde, wird die neue Position innerhalb der Liste eingetragen. + en: This field is required for manual sorting. As soon as an entry is moved using Drag&Drop, the new position is entered in the list. diff --git a/api/collections/democol.yml b/api/collections/democol.yml deleted file mode 100644 index 9437d8d..0000000 --- a/api/collections/democol.yml +++ /dev/null @@ -1,227 +0,0 @@ -# Der Name der Kollektion wird in der Rest-API-URL verwendet, z.B. -# /_/demo/democol -name: democol - -# Enthält die Kollektion Felder vom Typ "file", so werden die -# hochgeladenen Dateien unter dem Ordner abgelegt, der mit -# "uploadPath" bestimmt wird. -uploadPath: ../media/democol - -# "fields" stellen die Eigentliche Struktur der Kollektion dar. -# "fields" ist als Array angelegt um eine Standard-Sortierung -# im tibi-admin vorzugeben. -fields: - # Das Einbinden von Feldern über extra Dateien bietet sich nur - # an, wenn das jeweilige Feld mehrfach von dieser oder anderen - # Kollektionen verwendet wird. - # Auf die möglichen Definitionen wird im Kapitel "fields" - # eingegangen. - - !include fields/title.yml - - !include fields/type.yml - - !include fields/date.yml - - !include fields/content.yml - - !include fields/info.yml - - !include fields/isEmployed.yml - - !include fields/profilePic.yml - - !include fields/skills.yml - - !include fields/image.yml - - !include fields/tags.yml - - !include fields/gender.yml - - !include fields/emplymentDetails.yml - - !include fields/employmentDetails.yml - - !include fields/description.yml - - !include fields/age.yml - - !include fields/additionalData.yml - -# Neben der Definition der Indexe innerhalbd des Feld-Objektes selbst, - -# ist die Index-Definition global für die Kollektion auch hier möglich. -# Diese Definition ist z.B. für zusammengesetzte Index-Typen notwendig. -# Außerdem sind hier feinere Einstellungen für den Index möglich. - -# Mehr dazu im "indexes" Kapitel -indexes: - - !include democol/textindex.yml - -# Standardsprache für Text-Index in der Datenbank -defaultLanguage: de - -# "hooks" definieren die Algorithmen, die Daten und Abläufe zu bestimmten -# HTTP-Methoden und Schritten der API manipulieren können. -hooks: - # Hooks für die Methode "get" - get: - # "read"-Schritt wird ausgeführt, bevor die Daten von der Datenbank - # gelesen werden. - read: - # "type" ist derzeit immer "javascript" - type: javascript - # "file" zeigt auf die Datei mit dem Javascript-Code relativ zum - # Ordner der "config.yml" Datei. - file: hooks/democol/get_read.js - # "return"-Schritt wird ausgeführt, bevor die gelesenen Daten über - # HTTP übertragen werden. - return: - type: javascript - file: hooks/democol/get_return.js - - # Hooks für die Methode "post" - post: - # "bind" wird ausgeführt, bevor die übertragenen Daten in eine - # Objekt-Struktur umgewandelt werden. - # Der tibi-server erwarten nach diesem Schritt gültige JSON-Daten, - # d.h. sollte es möglich gemacht werden, dass andere Daten übertragen - # werden, sind diese in diesem Hook abzufangen und zu verarbeiten. - bind: - type: javascript - file: hooks/democol/post_bind.js - # "validate" wird ausgeführt, bevor die Daten validiert werden. - validate: - type: javascript - file: hooks/democol/post_validate.js - # "create" wird ausgeführt, bevor das Objekt/Dokument in der Datenbank - # angelegt wird. - create: - type: javascript - file: hooks/democol/post_create.js - # "return" wird ausgeführt, bevor die Serverantwort über HTTP - # übertragen wird. - return: - type: javascript - file: hooks/democol/post_return.js - - # Hooks für die Methode "put" - put: - bind: - type: javascript - file: hooks/democol/put_bind.js - validate: - type: javascript - file: hooks/democol/put_validate.js - # "bind" und "validate" habe die gleiche Bedeutung wie Hooks der - # Methode "post". - # "update" wird ausgeführt bevor das Objekt in der Datenbank - # aktualisiert wird. - update: - type: javascript - file: hooks/democol/put_update.js - # "return" wird auch hier vor der Serverantwort ausgeführt. - return: - type: javascript - file: hooks/democol/put_return.js - - # Hooks für die Methode "delete" - delete: - # Der "delete"-Hook wird vor dem eigentlichen Löschen ausgeführt - delete: - type: javascript - file: hooks/democol/delete_delete.js - # "return"-Hook kann ebenso hier die Serverantwort manipulieren - return: - type: javascript - file: hooks/democol/delete_return.js - -# Projektionen der Daten werden via GET-Parameter "projection=..." -# referenziert. -# "projections" is ein Objekt, dass die Namen der Projektionen -# als Key führt. -projections: - # "list" = Name der Projektion - list: - # "select" definiert als Keys die Felder, die beim Abruf - # dieser Projektion in den Ausgabe-Daten enthalten sind. - # Felder werden über die Punkt-Notation referenziert. - select: - title: 1 - date: 1 - # refenziert das "subField" "author" unterhalb von "meta" - meta.author: 1 - details: - # Alternativ kann "select" auch Auschlussregeln definieren. - # Eine Mischung von Inkludieren und Auschluss ist NICHT - # möglich. - select: - comment: 0 - full: - # Ein leeres "select" Objekt beschränkt die Ausgabe der - # Daten nicht und ist Standard, wenn der "projection=" - # Parameter nicht verwendet wurde. - select: - -# Allgeine Zugriffsregeln auf Kollektions-Ebene werden mit dem -# "permissions" Objekt festgelegt. -permissions: - # Unter "public" werden die Zugriffsrechte für die Öffentlichkeit - # definiert. - public: - # "methods" führt die HTTP-Methoden auf, die erlaubt sind - methods: - # "get: true" bedeutet hier, dass jeder die Daten lesen darf - get: true - # "post", also Einträge erstellen, "put" = Bearbeiten und - # "delete" = löschen darf die Öffentlichkeit nicht. - post: false - put: false - delete: false - # Ist "validProjections" definiert, sind auch nur genau die - # aufgelisteten Projektionen erlaubt, welche zwingend mit dem - # GET-Parameter "projection=..." ausgewählt werden müssen. - validProjections: - - list - - details - - # Der Key "user" steht für ALLE Benutzer die dem Projekt - # zugeordnet sind. - # D.h. eine feinere Abstufung auf Benutzerebene ist mit dem - # Key "user" allein nicht möglich. - # Für eine feinere Abstufung können nachgelagerte Hooks - # dienen oder die Verwendung von zugeordneten benutzerdefinierten - # "permissions" (siehe meta Objekt). - user: - methods: - get: true - post: false - put: false - delete: false - # Fehlt "validProjections", sind automatisch alle Projektionen - # erlaubt, wobei hier auch der GET-Parameter "projection=" - # weggelassen werden darf und somit alle Felder in der Ausgabe - # zu finden sind. - - # Folgende Brechtigung wird angewandt, wenn der Zugriff über - # den GET-Parameter "token=" oder die Header-Anweisung "token: " - # angefragt wird. - # "token" ist dabei die Markierung, dass es sich um einen Token - # handelt und "${TOKEN}" ist der benutzerdefinierte Token selbst. - # Dieser wird hier über eine Umgebungsvariable "TOKEN" injiziert, - # die in "config.yml.env" definiert werden kann mit "TOKEN=...". - token:${TOKEN}: - methods: - get: true - post: true - put: true - delete: true - - # Alle Berechtigungs-Namen, die nicht "public", "user" oder "token:..." - # heißen, sind benutzerdefinierte Berechtigungen, die Benutzern - # zugeordnet werden können. - # Eine mögliche Auflistung um Vorschläge im tibi-admin anzubieten, - # werden im Top-Level meta-Objekt der "config.yml" unter "permissions" - # definiert. - pages: - methods: - get: true - post: true - put: true - delete: true - -# "imageFilter" definieren Filter, die Bilder bearbeiten, wie -# z.B. Verkleinerung. -# Mögliche Angaben werden im seperaten Kapitel behandelt. -imageFilter: !include democol/imageFilter.yml - -# Wie auch in der Top-Level-Konfig "config.yml" ist auch hier ein -# "meta" Objekt möglich und nötig für die Konfiguration des -# tibi-admin. -# Mögliche Angaben werden im seperaten Kapitel behandelt. -meta: !include democol/meta.yml diff --git a/api/collections/democol/cardList.yml b/api/collections/democol/cardList.yml deleted file mode 100644 index a07bba6..0000000 --- a/api/collections/democol/cardList.yml +++ /dev/null @@ -1,15 +0,0 @@ -type: cardList -mediaQuery: "(min-width:600px)" -selectionPriority: 3 #gibt an, wenn mediaQuery passt, mit welcher priorität es default mäßig ausgewählt sein soll, je niedriger, desto wichtiger -fields: - - source: updateTime - label: - de: letztes Update - en: last update - type: date - - source: title - filter: true - - source: date - filter: true - - source: type - filter: true diff --git a/api/collections/democol/imageFilter.yml b/api/collections/democol/imageFilter.yml deleted file mode 100644 index 0e1162a..0000000 --- a/api/collections/democol/imageFilter.yml +++ /dev/null @@ -1,25 +0,0 @@ -# Der Key des Objektes definiert den Namen des Filters. -# Jeder Filter ist eine Liste von Bildmanipulationen, die -# nacheinander angewandt werden. -# Die manipulierten Bilder werden gecachet. Ein nachträgliches -# Anpassen der Filter erfordert also das Löschen der gecachten -# Dateien welche sich jeweils neben den original Bilddateien -# im "uploadPath" der Kollektion befinden. -s: - - fit: true - height: 300 - width: 300 - resampling: lanczos - quality: 60 -m: - - fit: true - height: 600 - width: 600 - resampling: lanczos - quality: 60 -l: - - fit: true - height: 1200 - width: 1200 - resampling: lanczos - quality: 60 diff --git a/api/collections/democol/meta.yml b/api/collections/democol/meta.yml deleted file mode 100644 index 9ec9378..0000000 --- a/api/collections/democol/meta.yml +++ /dev/null @@ -1,129 +0,0 @@ -# Ein Label für tibi-admin wird mehrsprachig folgendermaßen definiert -label: - de: Demo-Kolletion - en: Demo-Collection - -# Jede Kolletion kann ein eigenes Icon aus mdijs bekommen. -muiIcon: web - -# erlabt gleichzeitigen export von allen einträgen -allowExportAll: true - -# backup objekt -backup: - active: true # backup ist aktiviert - collectionName: backups # name der backups collection - -# wenn keine fields gesetzt sind, werden alle Felder der Kollektion angezeigt -quickEdit: - enabled: true # Standardmäßig ist die Schnellbearbeitung aktiviert - fields: - - title - - age - - date - -# Die Standardsortierung bei ersten Aufruf der Kollektion. -defaultSort: - # Nach welchem Feld soll sortiert werden? - field: updatedTime - # ASC für aufsteigend oder DESC für absteigend oder MANUALLY um manuell sortieren zu können - order: DESC - -# Ist ein Javascript Message-Object-Empfänger implementiert, der empfangene -# Daten als Vorschau rendern kann, so ist dieser hier zu definieren. -# Implementierungshinweise zu einem Solchen gibt es später. -previewUrl: https://demo.testversion.online/preview - -# Aus den definierten "imageFilter"-Angaben kann ein Filter für die -# Ausgabe der Thunbnails in der Admin-Ansicht ausgewählt werden. -defaultImageFilter: s - -# Jede Kollektion kann über media-Querys mit mehreren Ansichten veknüpft werden. -# Mögliche Ansichten und die dazugehörigen CSS-Queries sind hier zu defineren. -views: - # Natürlich können die Angaben auch ausgelagert und mehrfach verwendet werden. - # Die möglichen Angaben werden im Kapitel "views" gezeigt. - - !include simpleList.yml - - !include table.yml - -# Wird eine Kollektion als eine Gesamtliste schnell unübersichtlich, hild die -# Definition von "subNavigation". -# Die meisten Angaben sind aus obiger Beschreibung den meta-Objektes bekannt. -# Es wird hier nur auf die zusätzlichen Angaben eingegangen. -subNavigation: - - # Jede Unternavigation braucht einen eindeutigen Namen um diese später - # in z.B. Javascript-Code wieder erkennen zu können. - name: pages - - # Die Angabe des "label" ist optional. Wird sie nicht angegeben, wird - # wird diese Unternavigation nicht in der Navigation angezeigt. - # Ohne "label" kann die Unternavigation aber weiterhin für die Referenzierung - # z.B. in der Mediathek-Ansicht des ContentBuilders verwendet werden. - label: - de: Seiten - en: Pages - - muiIcon: page-layout-body - - defaultSort: - field: titel - order: ASC - - # Standardmäßig wird man beim Klick auf einen Eintrag der Kollektion - # (z.B. Zeile in der Tabelle) direkt zum Editieren des Datensatzes weitergeleitet. - # Möchte man das nicht, so kann hier ein alternatives Verhalten definiert werden. - # Mögliche Werte sind: - # - "edit" (Standard) - # - "view" (Anzeigen des Datensatzes) - # - Objekt mit "eval"-Attribut - # - # Beim Objekt mit "eval"-Attribut wird der Code mit dem Javascript-Kontext für - # Kollektionen im tibi-admin ausgeführt. Das Ergebnis kann hierbei wieder "edit" - # oder "view" sein. - # Außerdem ist es möglich, eine eigene Funktion zu definieren, die den Datensatz - # als Parameter erhält. Diese Funktion wird dann für den jweiligen Datensatz - # ausgeführt, auf den geklickt wurde. Mehr dazu unter dem Widget "ContentBuilder". - defaultCallback: view - - views: - - !include simpleList.yml - - !include table.yml - - !include cardList.yml - # Um mehr Übersicht zu bekommen können zum Einen andere "views" und "defaultSort" - # genutzt werden. Es kann aber auch eine Einschränkung der Daten über eine - # Vorfilterung via "filter" geben. "filter" ist ein Objekt mit MongoDB-Filterangaben. - # siehe: https://www.mongodb.com/docs/compass/current/query/filter/ - filter: - type: page - - - name: news - label: - de: Neuigkeiten - en: News - muiIcon: newspaper - defaultSort: - field: date - order: DESC - defaultCallback: edit - views: - - !include simpleList.yml - - !include table.yml - filter: - type: news - -# Standardmäßig werden im Formular zu Eingabe der Daten alle Felder von "fields" -# untereinander angeordnet. -# Um diese Anordnung in Tabs zu strukturieren, ist die Verwendung von "tablist" -# vorgesehen. -# Die Definition befindet sich in einem gesonderten Kapitel -tablist: !include tablist.yml - -# OpenAPI-Spezifikation für die API-Endpunkte der Kollektion -openapi: - get: - summary: - en: list all datasets of democol - de: listet alle Datensätze der Kollektion democol auf - description: - en: list all datasets of democol with pagination and/or filtering - de: listet alle Datensätze der Kollektion democol mit Paginierung und/oder Filterung diff --git a/api/collections/democol/simpleList.yml b/api/collections/democol/simpleList.yml deleted file mode 100644 index 7680c0f..0000000 --- a/api/collections/democol/simpleList.yml +++ /dev/null @@ -1,19 +0,0 @@ -# "type" legt den Typ des Views fest. -type: simpleList -# Die Auswahl erfolgt über folgende "mediaQuery". -mediaQuery: "(min-width:0px)" - -selectionPriority: 2 #gibt an, wenn mediaQuery passt, mit welcher priorität es default mäßig ausgewählt sein soll, je niedriger, desto wichtiger -# 3 Blöcke können in der simpleList verwendet werden. -# Haupttext "primaryText" und optional 2 weitere Angaben über -# "secondaryText" und "tertiaryText". -# Die Angabe des jeweiligen Feldes erfolgt als String oder -# Objekt mit der "source"-Eigenschaft. -# Das Feld selbst wird in Punkt-Notation angegeben. -# Die Darstellung selbst ist abhängig von der Feld-Konfiguration -# selbst, die unter fields in der Kollektions-Konfiguration -# stattfindet. -primaryText: title -secondaryText: - source: date -tertiaryText: meta.author diff --git a/api/collections/democol/table.yml b/api/collections/democol/table.yml deleted file mode 100644 index 96639f5..0000000 --- a/api/collections/democol/table.yml +++ /dev/null @@ -1,15 +0,0 @@ -type: table -mediaQuery: "(min-width:600px)" -selectionPriority: 1 #gibt an, wenn mediaQuery passt, mit welcher priorität es default mäßig ausgewählt sein soll, je niedriger, desto wichtiger -columns: - - source: updateTime - label: - de: letztes Update - en: last update - type: date - - source: title - filter: true - - source: date - filter: true - - source: type - filter: true diff --git a/api/collections/democol/tablist.yml b/api/collections/democol/tablist.yml deleted file mode 100644 index eb0d35d..0000000 --- a/api/collections/democol/tablist.yml +++ /dev/null @@ -1,41 +0,0 @@ -# Hier wird der initial zu öffnende Tab festgelegt. -# Ist dieser nicht festgelegt, wird automatisch der erste Tab -# aus der "tabs" Liste gewaählt. -activeTab: general -# "tabs" ist die eigentliche Liste -tabs: - - # Jeder Tab braucht einen Namen, über den er refereziert - # werden kann. - name: general - # Die übliche Labelangabe kann auch hier mehrpsrachig erfolgen. - label: - de: Allgemein - en: General - # Welche Felder dieser Tab anzeigen soll, wird über "subFields" - # beschrieben. - subFields: - - source: type - - source: title - - source: date - - source: additionalData - - source: age - - source: description - - source: paymentValues - - source: gender - - source: isEmployed - - source: profilePic - - source: skills - - source: image - - source: tags - - name: content - label: - de: Inhalt - en: Content - subFields: - - source: content - - name: info - label: - de: Informationen - en: Information - subFields: - - source: info diff --git a/api/collections/democol/textindex.yml b/api/collections/democol/textindex.yml deleted file mode 100644 index a49576e..0000000 --- a/api/collections/democol/textindex.yml +++ /dev/null @@ -1,6 +0,0 @@ -name: fulltextindex # Ein eindeutiger Name für den Index. Es ist optional, wird jedoch empfohlen, um den Index später leicht identifizieren zu können. -key: # Bestimmt, auf welche Felder der Index angewendet werden soll. Dies kann ein einfacher String sein, wenn der Index nur ein Feld umfasst, oder ein Array von Strings, wenn der Index mehrere Felder umfasst. - - $text:$** # definiert einen Volltextindex über alle Felder. Der spezielle Operator $text wird verwendet, um einen Volltextindex zu erstellen, und der Operator $\*\* bezeichnet alle Felder in der Sammlung. -background: true # Wenn auf true gesetzt, erzwingt dies, dass der Index eindeutige Werte enthält. Wenn Sie versuchen, einen Eintrag mit einem bereits indizierten Wert hinzuzufügen, wird ein Fehler ausgelöst. -unique: false # Wenn auf true gesetzt, erzwingt dies, dass der Index eindeutige Werte enthält. Wenn Sie versuchen, einen Eintrag mit einem bereits indizierten Wert hinzuzufügen, wird ein Fehler ausgelöst. -defaultLanguage: german # Wird verwendet, um die Sprache für Textindizes festzulegen. Dies ist wichtig für die Volltextsuche, da verschiedene Sprachen unterschiedliche Tokenisierungs- und Stemmungsregeln haben. diff --git a/api/collections/fieldLists/column.yml b/api/collections/fieldLists/column.yml new file mode 100644 index 0000000..f13b7ec --- /dev/null +++ b/api/collections/fieldLists/column.yml @@ -0,0 +1,16 @@ +# attribute auf column ebene + +- name: contentType + type: string + meta: + label: "" + widget: select + choices: + - name: Bild + id: image + + - name: Modul Import + id: moduleImport + + - name: Text + id: text diff --git a/api/collections/fieldLists/formular/checkboxGroup.yml b/api/collections/fieldLists/formular/checkboxGroup.yml new file mode 100644 index 0000000..615e4b5 --- /dev/null +++ b/api/collections/fieldLists/formular/checkboxGroup.yml @@ -0,0 +1,28 @@ +name: checkboxGroupInput +type: object +meta: + label: + de: Checkbox Gruppe + en: Checkbox Group + dependsOn: + eval: $parent?.inputWidgets?.includes('checkboxGroup') + helperText: + de: Ansammlung von Checkboxen + en: Collection of checkboxes +subFields: + - name: groupTitle + type: string + meta: + label: Checkbox Gruppe Titel + + - name: checkboxes + type: object[] + meta: + label: Checkbox Gruppe + direction: row + widget: containerLessObjectArray + subFields: + - name: standardInputProperties + meta: + widget: containerLessObject + subFields: !include standardInputProperties.yml diff --git a/api/collections/fieldLists/formular/dateInput.yml b/api/collections/fieldLists/formular/dateInput.yml new file mode 100644 index 0000000..1a07b6a --- /dev/null +++ b/api/collections/fieldLists/formular/dateInput.yml @@ -0,0 +1,16 @@ +name: dateInput +type: object +meta: + label: + de: Normaler Kalender + en: Normal calendar + helperText: + de: Datumsfeld + en: Date field + dependsOn: + eval: $parent?.inputWidgets?.includes('defaultCalendar') +subFields: + - name: standardInputProperties + meta: + widget: containerLessObject + subFields: !include standardInputProperties.yml diff --git a/api/collections/fieldLists/formular/datePicker.yml b/api/collections/fieldLists/formular/datePicker.yml new file mode 100644 index 0000000..f1b54ce --- /dev/null +++ b/api/collections/fieldLists/formular/datePicker.yml @@ -0,0 +1,74 @@ +name: datePickerInput +type: object +meta: + label: + de: Custom Kalender + en: Custom Calendar + dependsOn: + eval: $parent?.inputWidgets?.includes('customCalendar') +subFields: + - name: props + type: object + meta: + label: Datumauswahl Eigenschaften + subFields: + - name: allowedDateRanges + type: object[] + meta: + label: Erlaubte Datumsbereiche + widget: containerLessObjectArray + subFields: + - name: from + type: date + meta: + label: Von + widget: date + containerProps: + layout: + size: + default: "col-6" + small: "col-12" + large: "col-6" + - name: to + type: date + meta: + label: Bis + widget: date + containerProps: + layout: + size: + default: "col-6" + small: "col-12" + large: "col-6" + + - name: excludeDays + type: string[] + meta: + label: Auszuschließende Wochentage + widget: selectArray + choices: + - id: monday + name: Montag + + - id: tuesday + name: Dienstag + + - id: wednesday + name: Mittwoch + + - id: thursday + name: Donnerstag + + - id: friday + name: Freitag + + - id: saturday + name: Samstag + + - id: sunday + name: Sonntag + + - name: standardInputProperties + meta: + widget: containerLessObject + subFields: !include standardInputProperties.yml diff --git a/api/collections/fieldLists/formular/form.yml b/api/collections/fieldLists/formular/form.yml new file mode 100644 index 0000000..62af1aa --- /dev/null +++ b/api/collections/fieldLists/formular/form.yml @@ -0,0 +1,133 @@ +- name: emailSubject + type: string + meta: + label: + de: Email Betreff + en: Email Subject + containerProps: + layout: + size: + default: "col-6" + small: "col-12" + large: "col-6" + +- name: emailReciever + type: string + meta: + label: + de: Email Empfänger + en: Email Reciever + helperText: + de: "Bsp: xyz@gmail.com" + en: "E.g.: xyz@gmail.com" + containerProps: + layout: + size: + default: "col-6" + small: "col-12" + large: "col-6" + +- name: emailCC + type: string[] + meta: + label: + de: Email CC + en: Email CC + widget: string + useDefaultArray: true + helperText: + de: "Bsp: zyx@gmail.com" + en: "E.g.: zyx@gmail.com" + +- name: emailIntroduction + type: string + meta: + label: + de: Email Einleitungssatz + en: Email Introduction Sentence + helperText: + de: "Bsp: Hallo xyz, sie haben eine neue Kaufanfrage erhalten!" + en: "E.g.: Hello xyz, you have received a new purchase request!" + +- name: rows + type: object[] + meta: + label: Zeile + widget: grid + addElementLabel: Zeile Hinzufügen + + subFields: + - name: title + type: string + meta: + label: Zeilenname + helperText: + de: "Sollte der Titel keinen Wert enthalten, wird kein Zeilenname angezeigt!" + en: "If the title does not contain a value, no row name will be displayed!" + + - name: emailTitle + type: string + meta: + label: Email Abschnitt Titel + helperText: + de: "Sollte der Titel keinen Wert enthalten, wird kein Abschnitt Titel angezeigt!" + en: "If the title does not contain a value, no section title will be displayed!" + + - name: columns + type: object[] + + meta: + label: Spalte + addElementLabel: Spalte hinzufügen + widget: grid + direction: horizontal + subFields: + - name: title + type: string + meta: + label: Überschrift + helperText: Optional + + - name: inputWidgets + type: string[] + meta: + label: + de: Angezeigte Eingabefelder + en: Displayed input fields + widget: selectArray + choices: + - name: Nummernblock + id: labelNumber + + - name: Zeitenauswahlfeld + id: times + + - name: Auswahlfeld + id: select + + - name: Datumsauswahl - Standard Kalender + id: defaultCalendar + + - name: Datumauswahl - Custom Kalender + id: customCalendar + + - name: Nummerfeld + id: number + + - name: Checkbox Gruppe + id: checkboxGroup + + - name: Mehrfachauswahl + id: multiSelect + + - name: Textfeld + id: text + + - !include labelNumberInput.yml + - !include timesInput.yml + - !include dateInput.yml + - !include numberInput.yml + - !include checkboxGroup.yml + - !include datePicker.yml + - !include multiSelectInput.yml + - !include textInputs.yml diff --git a/api/collections/fieldLists/formular/labelNumberInput.yml b/api/collections/fieldLists/formular/labelNumberInput.yml new file mode 100644 index 0000000..2d3b944 --- /dev/null +++ b/api/collections/fieldLists/formular/labelNumberInput.yml @@ -0,0 +1,71 @@ +name: labelNumberInput +type: object[] +meta: + label: Nummer block + dependsOn: + eval: $parent?.inputWidgets?.includes('labelNumber') + helperText: + de: Links beschreibender Text, rechts zahleneingabe + en: Left descriptive text, right number input + +subFields: + - name: group + type: number + meta: + label: Gruppe + helpterText: + de: Pflichtfeld seperierung. Aus einem Nummernblock muss mindestens eine Gruppe input haben. + en: Mandatory field separation. A number block must have at least one group input. + + - name: title + type: string + meta: + label: Titel + helperText: + de: Block Titel + en: Block title + containerProps: + layout: + size: + default: "col-6" + small: "col-12" + large: "col-6" + + - name: emailName + type: string + meta: + label: Email Name + containerProps: + layout: + size: + default: "col-6" + small: "col-12" + large: "col-6" + + - name: block + type: object[] + meta: + label: Block + widget: containerLessObjectArray + subFields: + - name: label + type: string + meta: + label: Label + containerProps: + layout: + size: + default: "col-6" + small: "col-12" + large: "col-6" + + - name: emailName + type: string + meta: + label: Email Name + containerProps: + layout: + size: + default: "col-6" + small: "col-12" + large: "col-6" diff --git a/api/collections/fieldLists/formular/multiSelectInput.yml b/api/collections/fieldLists/formular/multiSelectInput.yml new file mode 100644 index 0000000..d2af23d --- /dev/null +++ b/api/collections/fieldLists/formular/multiSelectInput.yml @@ -0,0 +1,41 @@ +name: multiSelectInput +type: object +meta: + label: + de: Mehrfachauswahl Input + en: Multi Select Input + dependsOn: + eval: $parent?.inputWidgets?.includes('multiSelect') +subFields: + - name: standardInputProperties + meta: + widget: containerLessObject + subFields: !include standardInputProperties.yml + + - name: options + type: object[] + meta: + label: Mehrfachauswahl Optionen + direction: row + widget: containerLessObjectArray + subFields: + - name: name + type: string + meta: + label: Name + + - name: props + type: object + meta: + label: Mehrfachauswahl Eigenschaften + subFields: + - name: additionalAddableValues + type: boolean + meta: + label: Zusätzliche hinzufügbare Werte + containerProps: + layout: + size: + default: "col-6" + small: "col-12" + large: "col-6" diff --git a/api/collections/fieldLists/formular/numberInput.yml b/api/collections/fieldLists/formular/numberInput.yml new file mode 100644 index 0000000..b8cb6fc --- /dev/null +++ b/api/collections/fieldLists/formular/numberInput.yml @@ -0,0 +1,13 @@ +name: numberInput +type: object +meta: + label: + de: Nummereingabe + en: Number Input + dependsOn: + eval: $parent?.inputWidgets?.includes('number') +subFields: + - name: standardInputProperties + meta: + widget: containerLessObject + subFields: !include standardInputProperties.yml diff --git a/api/collections/fieldLists/formular/standardInputProperties.yml b/api/collections/fieldLists/formular/standardInputProperties.yml new file mode 100644 index 0000000..27299f9 --- /dev/null +++ b/api/collections/fieldLists/formular/standardInputProperties.yml @@ -0,0 +1,51 @@ +- name: emailTitle + type: string + meta: + label: Email Titel + containerProps: + layout: + size: + default: "col-6" + small: "col-12" + large: "col-6" + +- name: placeholder + type: string + meta: + label: Platzhalter + containerProps: + layout: + size: + default: "col-6" + small: "col-12" + large: "col-6" + +- name: notRequired + type: boolean + meta: + label: nicht Notwendig + containerProps: + layout: + size: + default: "col-6" + small: "col-12" + large: "col-6" + +- name: fieldOrder + type: number + meta: + label: Reihenfolge + helperText: + de: Die kleinste angegebene Zahl wird am weitesten oben in der Formularspalte stehen + en: The smallest specified number will be at the top of the form column. + containerProps: + layout: + size: + default: "col-6" + small: "col-12" + large: "col-6" +- name: textTitle + type: string + meta: + label: Text Titel + helperText: Alternative zu textPlaceholder diff --git a/api/collections/fieldLists/formular/textInputs.yml b/api/collections/fieldLists/formular/textInputs.yml new file mode 100644 index 0000000..c4782a5 --- /dev/null +++ b/api/collections/fieldLists/formular/textInputs.yml @@ -0,0 +1,45 @@ +name: textInput +type: object[] +meta: + label: Textfeld + addElementLabel: Textfeld hinzufügen + dependsOn: + eval: $parent?.inputWidgets?.includes('text') +subFields: + - name: standardInputProperties + meta: + widget: containerLessObject + subFields: !include standardInputProperties.yml + + - name: textArea + type: boolean + meta: + label: Großes Textfeld + containerProps: + layout: + size: + default: "col-4" + small: "col-6" + large: "col-4" + + - name: emailValidation + type: boolean + meta: + label: E-Mail-Validierung + containerProps: + layout: + size: + default: "col-4" + small: "col-6" + large: "col-4" + + - name: telValidation + type: boolean + meta: + label: Telefon-Validierung + containerProps: + layout: + size: + default: "col-4" + small: "col-6" + large: "col-4" diff --git a/api/collections/fieldLists/formular/timesInput.yml b/api/collections/fieldLists/formular/timesInput.yml new file mode 100644 index 0000000..559e8e4 --- /dev/null +++ b/api/collections/fieldLists/formular/timesInput.yml @@ -0,0 +1,49 @@ +name: timesInput +type: object +meta: + label: + de: Zeitenauswahlfeld + en: Time input + dependsOn: + eval: $parent?.inputWidgets?.includes('times') + helperText: + de: Selectfeld mit von - bis Angabe + en: Select field with from - to specification + +subFields: + - name: times + type: object[] + meta: + label: Zeitenangabe + helperText: "Die Angaben werden in folgendes Übersetzt: Anfangspunkt - Endpunkt" + direction: horizontal + widget: containerLessObjectArray + + subFields: + - name: from + type: string + meta: + label: Anfangspunkt + helperText: Bspw. 14:30 + containerProps: + layout: + size: + default: "col-6" + small: "col-12" + large: "col-6" + + - name: to + type: string + meta: + label: Endpunkt + helperText: Bspw. 15:30 + containerProps: + layout: + size: + default: "col-6" + small: "col-12" + large: "col-6" + - name: standardInputProperties + meta: + widget: containerLessObject + subFields: !include standardInputProperties.yml diff --git a/api/collections/fieldLists/meta.yml b/api/collections/fieldLists/meta.yml new file mode 100644 index 0000000..0418fbb --- /dev/null +++ b/api/collections/fieldLists/meta.yml @@ -0,0 +1,25 @@ +- name: title + type: string + meta: + label: Titel + containerProps: + layout: + size: + default: "col-6" + small: "col-12" + large: "col-6" + +- name: description + type: string + meta: + label: Beschreibung + containerProps: + layout: + size: + default: "col-6" + small: "col-12" + large: "col-6" +- name: keywords + type: string + meta: + label: Schlüsselwörter diff --git a/api/collections/fieldLists/row.yml b/api/collections/fieldLists/row.yml new file mode 100644 index 0000000..de68aac --- /dev/null +++ b/api/collections/fieldLists/row.yml @@ -0,0 +1,9 @@ +# attribute auf row ebene + +- name: columns + type: object[] + meta: + label: Spalten + direction: row + widget: grid + subFields: !include ../fieldLists/column.yml diff --git a/api/collections/fieldLists/useDefaultArray.yml b/api/collections/fieldLists/useDefaultArray.yml deleted file mode 100644 index cd11785..0000000 --- a/api/collections/fieldLists/useDefaultArray.yml +++ /dev/null @@ -1,76 +0,0 @@ -- name: testArray - type: string[] - meta: - label: { de: "Test Array richtext", en: "test array" } - widget: richtext - useDefaultArray: true - -- name: testArrayString - type: string[] - meta: - label: { de: "Test Array string", en: "test array" } - widget: string - useDefaultArray: true - -- name: testArrayNumber - type: number[] - meta: - label: { de: "Test Array number", en: "test array" } - widget: number - useDefaultArray: true - -- name: testArrayBool - type: boolean[] - meta: - label: { de: "Test Array checkbox", en: "test array" } - widget: checkbox - useDefaultArray: true - -- name: paymentValueObjdefault # Name des Eingabefelds für das erste Tab. - type: object[] # Datentyp des Eingabefelds, in diesem Fall ein Array von Objekten. - meta: - label: Zeilen # Tab-Label. - useDefaultArray: true - subFields: # Liste der Unterfelder für das Tab. - - name: test - type: string - meta: - label: test1 - - name: test2 - type: string - meta: - label: test2 - - name: paymentValue # Name des ersten Eingabefelds in diesem Tab. - type: number # Datentyp des Eingabefelds. - meta: - label: Überweisungswert1 # Feldlabel. - - name: paymentValuee # Name des zweiten Eingabefelds in diesem Tab. - type: number # Datentyp des Eingabefelds. - meta: - label: Überweisungswert2 # Feldlabel. - - name: paymentValueObj2 # Name des Eingabefelds für das zweite Tab. - type: object[] # Datentyp des Eingabefelds, in diesem Fall ein Array von Objekten. - meta: - label: Spalten # Tab-Label. - direction: horizontal - widget: grid - metaElements: - - test1 - - test2 - subFields: # Liste der Unterfelder für das Tab. - - name: test - type: string - meta: - label: test1 - - name: test2 - type: string - meta: - label: test2 - - name: paymentValue # Name des ersten Eingabefelds in diesem Tab. - type: number # Datentyp des Eingabefelds. - meta: - label: Überweisungswert1 # Feldlabel. - - name: paymentValuee # Name des zweiten Eingabefelds in diesem Tab. - type: number # Datentyp des Eingabefelds. - meta: - label: Überweisungswert2 # Feldlabel. diff --git a/api/collections/fields/additionalData.yml b/api/collections/fields/additionalData.yml deleted file mode 100644 index b1c6372..0000000 --- a/api/collections/fields/additionalData.yml +++ /dev/null @@ -1,5 +0,0 @@ -name: additionalData # Name des Eingabefelds. -type: object # Datentyp des Eingabefelds. -meta: - label: { de: "Zusätzliche Daten", en: "Additional Data" } # Feldlabel. - widget: jsonField # Verwendetes Widget. diff --git a/api/collections/fields/age.yml b/api/collections/fields/age.yml deleted file mode 100644 index 3833e92..0000000 --- a/api/collections/fields/age.yml +++ /dev/null @@ -1,5 +0,0 @@ -name: age # Name des Eingabefelds. -type: int # Datentyp des Eingabefelds. -meta: - label: { de: "Alter", en: "Age" } # Feldlabel. - widget: number # Verwendetes Widget. diff --git a/api/collections/fields/content.yml b/api/collections/fields/content.yml deleted file mode 100644 index 9977912..0000000 --- a/api/collections/fields/content.yml +++ /dev/null @@ -1,117 +0,0 @@ -# Der Name des Feldes ist natürlich beliebig wählbar. -name: content - -# "string" als Datentyp ist zwingend. -type: string - -meta: - label: - de: Inhalt - en: content - - # Die Bezeichnung des ContentBuilder-Widgets ist "contentbuilder". - widget: contentbuilder - - # Die Anzeige des ContentBuilder im tibi-admin geschieht innerhalb - # eines iframes. Das ist notwendig, da der ContentBuilder eigene - # Styles mitbringet, die sich nicht mit den Styles des tibi-admin - # vermischen sollten. - - # Via "baseHref" wird der -Tag im iframe gesetzt. - # somit können alle relativen Pfade im ContentBuilder (z.B. Bilder) - # aufgelöst werden. - # Wie man hier sieht, ist die Angabe via "eval" mittels möglich. - # Der Kontext ist auf Feldebene, wie bei "dependsOn" und "defaultValue". - # Alternativ kann die Angabe auch direkt als String erfolgend. - # Dann natürlich ohne die Evaluierung der Variable "$projectBase", wie hier. - baseHref: - eval: $projectBase - - # Sollen weitere CSS-Datei in das iframe geladen werden, können diese - # hier aufgelistet werden. - # Die Angabe kann direkt als Array erfolgen oder via "eval", dessen - # Code das Array der Strings mit den Dateipfaden zurückgibt. - # Auch zu beachten ist hier die relative Angabe. Da "baseHref" gesetzt - # ist, wird der Pfad relativ zu dieser Projekt-Basis innerhalb des - # tibi-server aufgelöst. - # Die Auslieferung der CSS-Dateien direkt über den tibi-server kann - # nur funktionieren, wenn "_dist_" in der "assets" Konfiguration der - # "config.yml" definiert ist. - cssHref: - - _/assets/_dist_/index.css - - # Um eine Kollektion stellvertretend als Mediathek anzubinden, sind die - # Angaben unter "imageSelect", "fileSelect" und "videoSelect" zu tätigen. - # "imageSelect" betrifft die Einbindung von Bildern, "fileSelect" die - # Einbindung von Dateien, "videoSelect" die Einbindung von Videos. - imageSelect: - - # Die Angabe "collection" ist zwingend. Hier wird die Kollektion - # definiert, die als Sammlung für die Bilder/Datei dient. - # Der Aufbau der Kollektion ist dabei frei, solange ein Upload-Feld - # für die Dateien existiert, welches die URL zur Datei zurückgibt. - collection: medialib - - # Optional kann ein Filter und View für die Einbindung der Bilder/Dateien - # definiert werden. Dies geschieht über einen "subNavigation" - # Eintrag innerhalb des "meta.subNavigation" Arrays, der Kollektion - # (hier bei "medialib"). - # Die Angabe hier ist die auszuwählende Navigation per Index des Arrays. - subNavigation: 0 - - fileSelect: - collection: medialib - subNavigation: 0 - videoSelect: - collection: medialib - subNavigation: 0 - - # "customTags" des ContentBuilder können verwendet werden um die Einbindung - # von Modulen ins HTML zu ermöglichen. - # Die folgende Auflistung ist dabei ein Beispiel für ein Modul. - customTags: - - - # Der Platzhalter wird 1:1 ins HTML übernommen und ist dabei frei - # definierbar. - # Die eigentliche Funktion eines Modul-Systems muss dann später - # im Frontend implementiert werden. - placeholder: "Mein Modul" - - # Die Benennung für die UI des ContentBuilder geschieht über die - # "label" Angabe, die mehrsprachig erfolgen kann. - label: - de: "Mein Modul" - en: "My Module" - - # Um direkt Style-Angaben in das iframe des ContentBuilder zu übernehmen, - # werden diese hier angegeben. - # Natürlich ist auch hier wieder die Angabe via "eval" möglich. - # Nachfolgendes Beispiel erzeugt im ContentBuilder eine deutliche Darstellung - # des eingebundenen Moduls. - style: | - /*css*/ - .is-builder { - max-width: 1200px; - margin: 0 auto; - } - .tibi-module { - padding: 10px; - border: 3px dashed #c4c4c4; - display: block; - text-align: center; - font-size: 14px; - color: black; - } - .tibi-module::before { - content: "\1F5BD "; - font-size: 16px; - color: black; - } - .tibi-module::after { - content: " title=\"" attr(title) "\" description=\"" attr(description) "\""; - font-size: 10px; - color: #555; - display: block; - padding-top: 5px; - } - /*!css*/ \ No newline at end of file diff --git a/api/collections/fields/date.yml b/api/collections/fields/date.yml deleted file mode 100644 index b21d4b8..0000000 --- a/api/collections/fields/date.yml +++ /dev/null @@ -1,57 +0,0 @@ -# Der Name des Feldes wird in der Datenbank zum Objekt ebenso -# wie in der Ein- und Ausgabe über die API verwendet. -name: date - -# Über "type" wird der Datentyp in der Datenbank festgelegt. -# Mögliche Typen sind weiter unten aufgelistet. -type: date - -# Direkt am Feld kann eine Index-Definition erfolgen. -# Folgende mögliche Werte können ihn die Liste aufgenommen werden: -# "single" - Standard-Index für diese Feld -# "unique" - Das Feld muss einen eindeutigen Wert haben -# "text" - Alle "text"-Indexanganben aller Felder werden zu einem -# gemeinsamen Volltext-Index kombiniert -# -# Die Angabe des Volltextindex ist besser unter "collections.X.indexes" -# vorzunehmen. -index: - - single - -# Jede Datenübertragung an des Server wird validiert, d.h. es werden -# keine Datentypen angenommen, die nicht zu "type" passen. -# Darüber hinaus kann via "validator" eine zusätzliche Validierung -# vorgenommen werden. -# Dazu gibt es ein extra Kapitel. -validator: - required: true - eval: new Date($this) > new Date() - -# Und natürlich gibt es auch hier ein "meta" Objekt zur Steuerung -# des tibi-admin. -meta: - # Das "label" des Feldes wird als Label vor dem Widget verwendet. - label: - de: Titel - en: title - - # Abgelkeitet vom "type" gibt es Standard-Widgets. für spezielle - # Aufgaben stehen aber eine Hand voll Widgets bereit, die später - # beschrieben werden. - widget: date - - # Standardwerte für neue Enträge können entweder direkt angegeben - # werden oder via Javascript client-seitig generiert werden. - # In den Kontext injizierte Variablen werden später beschrieben. - defaultValue: - # Das Ergebnis von "eval" wird hier als Standardwert verwendet. - # (hier das aktuelle Datum) - eval: new Date() - - # Sollen Felder abhängig von bestimmten Bedingungen ein- oder - # ausgeblendet werden, geschieht das über Anweisungen in "dependsOn". - dependsOn: - # Das Feld wird nur eingeblendet wenn der Wert von "type" - # (auf gleicher Ebene wie das Feld "date" selbst) - # gleich "news" ist. - eval: $parent?.type == "news" diff --git a/api/collections/fields/description.yml b/api/collections/fields/description.yml deleted file mode 100644 index 7a02cc1..0000000 --- a/api/collections/fields/description.yml +++ /dev/null @@ -1,5 +0,0 @@ -name: description # Name des Eingabefelds. -type: string # Datentyp des Eingabefelds. -meta: - label: { de: "Beschreibung", en: "Description" } # Feldlabel. - widget: richtext # Verwendetes Widget. diff --git a/api/collections/fields/employmentDetails.yml b/api/collections/fields/employmentDetails.yml deleted file mode 100644 index a14a97d..0000000 --- a/api/collections/fields/employmentDetails.yml +++ /dev/null @@ -1,60 +0,0 @@ -name: paymentValueObj -type: object[] -meta: - label: Zeilen - widget: grid - metaElements: - - test1 - - test2 - direction: vertical - pathStep: #widget spezifisch, gibt dem objekt einen namen und ein zugehöriges icon, Zeilen und spalten sind hier bereits default (Oberste Objekt zeile verschachtelte objekt spalte mit zugehörigen icons) - title: "Zeile" - icon: viewSequentialOutline - folding: - previewFolded: - eval: $this.test - previewUnfolded: - eval: $this.test -subFields: - - name: test - type: string - meta: - label: test1 - - name: test2 - type: string - meta: - label: test2 - - name: paymentValue - type: number - meta: - label: Überweisungswert1 - - name: paymentValuee - type: number - meta: - label: Überweisungswert2 - - name: paymentValueObj2 - type: object[] - meta: - label: Spalten - direction: horizontal - widget: grid - metaElements: - - test1 - - test2 - subFields: - - name: test - type: string - meta: - label: test1 - - name: test2 - type: string - meta: - label: test2 - - name: paymentValue - type: number - meta: - label: Überweisungswert1 - - name: paymentValuee - type: number - meta: - label: Überweisungswert2 diff --git a/api/collections/fields/emplymentDetails.yml b/api/collections/fields/emplymentDetails.yml deleted file mode 100644 index 1bbf627..0000000 --- a/api/collections/fields/emplymentDetails.yml +++ /dev/null @@ -1,32 +0,0 @@ -name: paymentValues # Name des Eingabefelds. -type: object # Datentyp des Eingabefelds, in diesem Fall ein Objekt. -meta: - label: "Überweisungswerte" # Feldlabel. - widget: tabs # Verwendetes Widget. Die tabs Widget wird zur Organisation von komplexen Eingaben in Tab-Form verwendet. -subFields: # Liste der Unterfelder für jedes Tab. - - name: paymentValueObj # Name des Eingabefelds für das erste Tab. - type: object[] # Datentyp des Eingabefelds, in diesem Fall ein Array von Objekten. - meta: - label: Überweisungswerte1 # Tab-Label. - subFields: # Liste der Unterfelder für das Tab. - - name: paymentValue # Name des ersten Eingabefelds in diesem Tab. - type: number # Datentyp des Eingabefelds. - meta: - label: Überweisungswert1 # Feldlabel. - - name: paymentValuee # Name des zweiten Eingabefelds in diesem Tab. - type: number # Datentyp des Eingabefelds. - meta: - label: Überweisungswert2 # Feldlabel. - - name: paymentValueObj2 # Name des Eingabefelds für das zweite Tab. - type: object[] # Datentyp des Eingabefelds, in diesem Fall ein Array von Objekten. - meta: - label: Überweisungswerte2 # Tab-Label. - subFields: # Liste der Unterfelder für das Tab. - - name: paymentValue # Name des ersten Eingabefelds in diesem Tab. - type: number # Datentyp des Eingabefelds. - meta: - label: Überweisungswert1 # Feldlabel. - - name: paymentValuee # Name des zweiten Eingabefelds in diesem Tab. - type: number # Datentyp des Eingabefelds. - meta: - label: Überweisungswert2 # Feldlabel. diff --git a/api/collections/fields/gender.yml b/api/collections/fields/gender.yml deleted file mode 100644 index 1b4bcf7..0000000 --- a/api/collections/fields/gender.yml +++ /dev/null @@ -1,23 +0,0 @@ -name: gender # Name des Eingabefelds. -type: string # Datentyp des Eingabefelds. -meta: - label: { de: "Geschlecht", en: "Gender" } # Feldlabel. - widget: select # Verwendetes Widget. - choices: # Auswahlmöglichkeiten. - - name: "männlich" # Anzeigename der Auswahl. - id: "male" # Wert der Auswahl. - - name: "weiblich" # Anzeigename der Auswahl. - id: "female" # Wert der Auswahl. - chipStyle: - backgroundImage: "linear-gradient(black 33.3%, red 33.3%, red 66.6%, gold 66.6%);" - color: white - textShadow: 0px 0px 4px black - #alternative: - #choices: - #DEPRECATED - FOREIGNKEY STATTDESSEN! - #endpoint: content - #params: - #sort: - #mapping: - #id: id - #name: path diff --git a/api/collections/fields/image.yml b/api/collections/fields/image.yml deleted file mode 100644 index 46151de..0000000 --- a/api/collections/fields/image.yml +++ /dev/null @@ -1,20 +0,0 @@ -name: image # Name des Eingabefelds. -type: string # Datentyp des Eingabefelds. -meta: - label: { de: "Bild", en: "Image" } # Feldlabel. - widget: foreignKey # Verwendetes Widget. - foreign: - collection: medialib # Name der Sammlung, in der die ausgewählten Daten gespeichert sind. - id: id # Feldname, das als eindeutige Kennung für die ausgewählten Daten verwendet wird. - subNavigation: 1 # Bestimmt, welche Navigation für die Auswahl der ausgewählten Daten angezeigt wird. - #projection: xyz - #sort: "title" - render: - #alternativ zu raw und eval kann hier auch das attribut "defaultCollectionViews" auf true gesetzt werden, dabei werden dann die ausgewählten elemente in der in collection definierten collectionview angezeigt. - raw: true - eval: | - (function() { - var out = ""; - out += "
" + $foreignEntry.title + "
"; - return out; - })() diff --git a/api/collections/fields/info.yml b/api/collections/fields/info.yml deleted file mode 100644 index 24e8259..0000000 --- a/api/collections/fields/info.yml +++ /dev/null @@ -1,51 +0,0 @@ -name: info -type: object -meta: - label: - de: Info - en: Info - direction: horizontal # vertical oder horizontal - metaElements: # macht bestimmte Widgets im Zahnrad verfügbar und entfernt sie aus dem drop down - # alternaitv wären auch diese Angabenformen anstatt von tablist möglich: - #- author - #- source: author - tablist: # macht im Modal eine tabliste - tabs: - - name: authorInfos - label: Autorkram - subFields: - - source: author - - name: publishingInfos - label: Veröffentlichungskram - subFields: - - source: published -subFields: - - name: author - type: string - meta: - label: - de: Autor - en: Author - - name: published - type: date - meta: - label: Veröffentlicht - - name: tags - type: object[] - meta: - label: - de: Tags - en: Tags - subFields: - - name: name - type: string - meta: - label: - de: Name - en: Name - - name: color - type: string - meta: - label: - de: Farbe - en: Color diff --git a/api/collections/fields/isEmployed.yml b/api/collections/fields/isEmployed.yml deleted file mode 100644 index 5ab7d57..0000000 --- a/api/collections/fields/isEmployed.yml +++ /dev/null @@ -1,5 +0,0 @@ -name: isEmployed # Name des Eingabefelds. -type: boolean # Datentyp des Eingabefelds. -meta: - label: { de: "Angestellt?", en: "Employed?" } # Feldlabel. - widget: checkbox # Verwendetes Widget. diff --git a/api/collections/fields/profilePic.yml b/api/collections/fields/profilePic.yml deleted file mode 100644 index a01f274..0000000 --- a/api/collections/fields/profilePic.yml +++ /dev/null @@ -1,5 +0,0 @@ -name: profilePic # Name des Eingabefelds. -type: file # Datentyp des Eingabefelds. -meta: - label: { de: "Profilbild", en: "Profile Picture" } # Feldlabel. - widget: file # Verwendetes Widget. diff --git a/api/collections/fields/skills.yml b/api/collections/fields/skills.yml deleted file mode 100644 index c907bac..0000000 --- a/api/collections/fields/skills.yml +++ /dev/null @@ -1,10 +0,0 @@ -name: skills # Name des Eingabefelds. -type: string[] # Datentyp des Eingabefelds. -meta: - label: { de: "Fähigkeiten", en: "Skills" } # Feldlabel. - widget: checkboxArray # Verwendetes Widget. - choices: # Auswahlmöglichkeiten. - - name: "Kochen" # Anzeigename der Auswahl. - id: "cooking" # Wert der Auswahl. - - name: "Backen" # Anzeigename der Auswahl. - id: "baking" # Wert der Auswahl. diff --git a/api/collections/fields/tags.yml b/api/collections/fields/tags.yml deleted file mode 100644 index 98be69f..0000000 --- a/api/collections/fields/tags.yml +++ /dev/null @@ -1,11 +0,0 @@ -name: tags # Name des Eingabefelds. -type: string[] # Datentyp des Eingabefelds. -meta: - label: { de: "Tags", en: "Tags" } # Feldlabel. - widget: chipArray # Verwendetes Widget. - choices: # Auswahlmöglichkeiten. - - name: "Tech" # Anzeigename der Auswahl. - id: "tech" # Wert der Auswahl. - - name: "Wissenschaft" # Anzeigename der Auswahl. - id: "science" # Wert der Auswahl. - autocomplete: true # Option für Autovervollständigung. diff --git a/api/collections/fields/title.yml b/api/collections/fields/title.yml deleted file mode 100644 index 10d9c17..0000000 --- a/api/collections/fields/title.yml +++ /dev/null @@ -1,11 +0,0 @@ -name: title -type: string -meta: - label: - de: Titel - en: Title - inputProps: - multiline: true - placeholder: Ihr Titel - openapi: - example: Demo Titel diff --git a/api/collections/fields/type.yml b/api/collections/fields/type.yml deleted file mode 100644 index 8d4c619..0000000 --- a/api/collections/fields/type.yml +++ /dev/null @@ -1,16 +0,0 @@ -name: type -type: string -meta: - label: - de: Typ - en: Type - widget: select - choices: - - name: - de: Standardseite - en: Standard page - id: page - - name: - de: News - en: News - id: news diff --git a/api/collections/forms.yml b/api/collections/forms.yml new file mode 100644 index 0000000..6bf25e4 --- /dev/null +++ b/api/collections/forms.yml @@ -0,0 +1,42 @@ +name: forms +uploadPath: ../media/forms + +meta: + label: Formulare + muiIcon: web + backup: + active: true + collectionName: backups + views: + - type: table + columns: + - source: formular + +permissions: + public: + methods: + get: true + post: true + put: false + delete: false + user: + methods: + get: true + post: true + put: true + delete: true +hooks: + post: + create: + type: javascript + file: hooks/forms/post_create.js + return: + type: javascript + file: hooks/forms/post_return.js + +fields: + - type: object + name: formular + meta: + label: Formular + widget: jsonField diff --git a/api/collections/lighthouse.yml b/api/collections/lighthouse.yml new file mode 100644 index 0000000..5c93ec4 --- /dev/null +++ b/api/collections/lighthouse.yml @@ -0,0 +1,119 @@ +name: lighthouse + +meta: + label: Lighthouse + muiIcon: web + views: + - type: table + mediaQuery: "(min-width: 600px)" + columns: + - source: insertTime + filter: true + - source: perfomance + filter: true + - source: accessibility + filter: true + - source: bestPractices + filter: true + - source: seo + filter: true + - type: simpleList + mediaQuery: "(max-width: 599px)" + primaryText: insertTime + secondaryText: performance + tertiaryText: accessibility + +permissions: + public: + methods: + get: false + post: false + put: false + delete: false + user: + methods: + get: true + post: true + put: true + delete: true + +projections: + dashboard: + +hooks: + post: + create: + type: javascript + file: hooks/lighthouse/post_create.js + +fields: + - name: analyzedPaths + type: string[] + meta: + label: Analyzed Paths + - name: performance + type: number + meta: + label: Performance + - name: accessibility + type: number + meta: + label: Accessibility + - name: bestPractices + type: number + meta: + label: Best Practices + - name: seo + type: number + meta: + label: SEO + - name: lighthouseMetrics + type: object + meta: + label: Lighthouse Metrics + subFields: + - name: FCPS + type: number + meta: + label: First Contentful Paint Score + - name: FCPV + type: number + meta: + label: First Contentful Paint Value + - name: FMPV + type: number + meta: + label: First Meaningful Paint Value + + - name: FMPS + type: number + meta: + label: First Meaningful Paint Score + + - name: SIS + type: number + meta: + label: Speed Index Score + + - name: SIV + type: number + meta: + label: Speed Index Value + - name: TTIS + type: number + meta: + label: Time to Interactive Score + + - name: TTIV + type: number + meta: + label: Time to Interactive Value + - name: FPIDS + type: number + meta: + label: First Potential Input Delay Score + + - name: FPIDV + type: number + meta: + label: First Potential Input Delay Value diff --git a/api/collections/lighthouseSubpath.yml b/api/collections/lighthouseSubpath.yml new file mode 100644 index 0000000..d378cc6 --- /dev/null +++ b/api/collections/lighthouseSubpath.yml @@ -0,0 +1,29 @@ +name: lighthouseSubpath + +meta: + label: Lighthouse Subpaths + muiIcon: web + views: + - type: table + columns: + - source: lighthouseSubpath + +permissions: + public: + methods: + get: false + post: false + put: false + delete: false + user: + methods: + get: true + post: true + put: true + delete: true + +fields: + - type: string + name: lighthouseSubpath + meta: + label: PagespeedPaths diff --git a/api/collections/medialib.yml b/api/collections/medialib.yml index e4ea372..59689b4 100644 --- a/api/collections/medialib.yml +++ b/api/collections/medialib.yml @@ -4,70 +4,39 @@ name: medialib uploadPath: ../media/medialib meta: + allowExportAll: true label: de: Medienbibliothek en: Media Library muiIcon: multimedia defaultSort: field: sort - order: MANUALLY #alternativ auch ASC und DESC möglich + order: MANUALLY + + backup: + active: true + collectionName: backups + + quickEdit: + enabled: true + fields: + - title + - alt + - file # "defaultImageFilter" dient auch hier nur zur Reduzierung der # Bildgröße bei der Anzeige im tibi-admin (Listen). # Die Bildgröße für die Einbindung ins erzeugte HTML des ContentBuilder # hat hiermit nix zu tun. - defaultImageFilter: s + defaultImageFilter: xs multiupload: - fields: - - source: description #specify wich fields should be editable in Modal, if property isnt set, then all fields will automatically be selected - prefilledFields: #specifies wich fields should have a default value, wont be visible to the user, just an informational text for wich fields will recieve an default value. - - source: title - defaultValue: - eval: | - (function(){ - return "Title" + $file.name - })() + fields: [] - # Wird unter "image-/file-/videoSelect" im ContentBuilder Feld kein - # "subNavigation" Index definiert, werden auch folgende "views" - # verwendet. views: - - type: simpleList - mediaQuery: "(min-width: 0px)" - selectionPriority: 3 #gibt an, wenn mediaQuery passt, mit welcher priorität es default mäßig ausgewählt sein soll, je niedriger, desto wichtiger - primaryText: - source: path - filter: true - - secondaryText: - source: title - filter: true - - tertiaryText: - source: description - filter: true - - fileDropArea: - label: - { - de: "Ziehen Sie Dateien per Drag and Drop hierher oder klicken Sie, um Dateien auszuwählen.", - en: "Drag and drop some files here, or click to upload.", - } - helperText: { de: "Maximale Uploadgröße: 1,54 MB", en: "Maximum upload size: 1.54MB" } - targetField: file - pageAsDropArea: true - columns: - - source: file - - source: updateTime - type: datetime - label: letztes Update - - source: title - filter: true - - source: description - filter: true - type: table - mediaQuery: "(min-width: 768px)" + mediaQuery: "(min-width: 0px)" + defaultSelect: false selectionPriority: 2 fileDropArea: label: @@ -77,16 +46,13 @@ meta: } helperText: { de: "Maximale Uploadgröße: 1,54 MB", en: "Maximum upload size: 1.54MB" } targetField: file - pageAsDropArea: true + pageAsDropArea: false columns: - source: file + name: Datei - source: updateTime type: datetime label: letztes Update - - source: title - filter: true - - source: description - filter: true - type: cardList mediaQuery: "(min-width: 1200px)" @@ -103,73 +69,27 @@ meta: fields: - source: file + name: Datei - source: updateTime type: datetime label: letztes Update - - source: title - filter: true - - source: description - filter: true - # Wird ein "subNavigation" Index für "image-/file-/videoSelect" definiert, - # wird die entsprechende Navigation aus folgender Liste angesprochen. - # "0" ist dabei der Index für das erste Element dieser Liste. subNavigation: - - # Der "name" der Navigation ist für die Mediathek nicht von Bedeutung, - # kann aber für "eval"-Code interessant sein. - name: modal - - # Auf "label" wurde hier verzichtet, damit dieses Element nicht in der - # Hauptnavigation des tibi-admin auftaucht. - - # Folgende Ansicht wird für unsere Auswahl der Datei im ContentBuilder - # angeboten. - views: - - type: cards - mediaQuery: "(min-width: 0px)" - fields: - - source: file - - source: updateTime - type: datetime - label: letztes Update - - source: title - filter: true - - source: description - filter: true - - # Damit der ContentBuilder weiß, welche Datei ausgewählt wurde, ist - # ist folgender "defaultCallback" notwendig. - # Die Funktion wird beim Klick auf die entsprechende Datei aufgerufen. - # Als Funktionsparameter steht der gesamte Datensatz der Auswahl zur - # Verfügung. - # Die Funktionen "parent.selectAsset" und "parent.focus" sind ContentBuilder - # spezifisch und schließen die Listenansicht direkt nach Übergabe der - # Datei-URL. - # Die URL setzt sich aus dem Pfad zur Datei und dem Filter "l" zusammen. - # Es wurde eine relative URL konstruiert, da das ContentBuilder-Widget - # mit "baseHref" zur Projekt-URL erstellt wird. - defaultCallback: - eval: | - //js - (entry) => { - parent.selectAsset("medialib/" + entry.id + "/" + entry.file?.src + "?filter=l") - parent.focus() - } - //!js - - name: modalForeign # Name des Eingabefelds oder der Ansicht. defaultSort: # Standard-Sortierkriterien, die angewendet werden, wenn keine anderen Sortierkriterien spezifiziert sind. field: "path" # Standardmäßig wird nach dem "path"-Feld sortiert. order: "ASC" # Standardmäßig wird in aufsteigender Reihenfolge (ASC) sortiert. views: # Liste der Ansichten, die in diesem Feld angezeigt werden können. - type: table # Es wird eine Tabellenansicht verwendet. + mediaQuery: "(min-width: 0px)" # Die Tabellenansicht wird nur angezeigt, wenn die Bildschirmbreite mindestens 0px beträgt. columns: # Liste der Spalten, die in der Tabelle angezeigt werden. - - path # Es wird nur die Spalte "path" angezeigt. + - source: file + defaultCallback: # Standard-Callback-Funktion, die ausgeführt wird, wenn keine andere spezifiziert ist. eval: | # Der Code wird als JavaScript evaluiert. //js - (entry) => { // Diese Funktion nimmt den Eintrag (entry) als Argument. - parent.selectEntry(entry) // Die Funktion selectEntry auf dem übergeordneten Objekt wird mit dem Eintrag als Argument aufgerufen. + (entry) => { + parent.selectEntry(entry) } //!js @@ -191,37 +111,76 @@ projections: dashboard: select: hooks: - delete: + post: return: type: javascript - file: hooks/medialib/delete_return.js + file: hooks/clear_cache.js + put: + return: + type: javascript + file: hooks/clear_cache.js +imageFilter: + xs: + - fit: true + height: 90 + width: 90 + resampling: lanczos + quality: 60 + s: + - fit: true + height: 300 + width: 300 + resampling: lanczos + quality: 60 + m: + - fit: true + height: 600 + width: 600 + resampling: lanczos + quality: 60 + l: + - fit: true + height: 1200 + width: 1200 + resampling: lanczos + quality: 60 + xl: + - fit: true + height: 2000 + width: 2000 + resampling: lanczos + quality: 60 fields: - # Ein Feld vom Typ "file" wird für die Mediathek natürlich - # benötigt. - name: file type: file meta: label: de: Datei en: File + + - name: alt + type: string + meta: + label: + de: Alternativtext + en: Alternative text + helperText: + de: Der Alternativtext wird angezeigt, wenn die Datei nicht geladen werden kann. + en: The alternative text is displayed if the file cannot be loaded. + - name: title type: string meta: label: de: Titel en: Title - - name: description - type: string - meta: - widget: richtext - label: - de: Kurzbeschreibung - en: Short Description + helperText: + de: Der Titel wird angezeigt, wenn die Datei geladen wird. + en: The title is displayed when the file is loaded. - name: sort type: number - meta: label: de: Manuelle Sortierung diff --git a/api/collections/module.yml b/api/collections/module.yml new file mode 100644 index 0000000..5937e4a --- /dev/null +++ b/api/collections/module.yml @@ -0,0 +1,100 @@ +name: module + +meta: + label: Module + allowExportAll: true + backup: + active: true + collectionName: backups + + views: + - type: table + columns: + - source: type + name: Typ + filter: true + + subNavigation: + - name: modal + views: + - type: table + columns: + - source: type + defaultCallback: # Standard-Callback-Funktion, die ausgeführt wird, wenn keine andere spezifiziert ist. + eval: | # Der Code wird als JavaScript evaluiert. + //js + (entry) => { // Diese Funktion nimmt den Eintrag (entry) als Argument. + parent.selectEntry(entry) // Die Funktion selectEntry auf dem übergeordneten Objekt wird mit dem Eintrag als Argument aufgerufen. + } + //!js +hooks: + post: + return: + type: javascript + file: hooks/clear_cache.js + put: + return: + type: javascript + file: hooks/clear_cache.js + +permissions: + public: + methods: + get: true + post: false + put: false + delete: false + user: + methods: + get: true + post: true + put: true + delete: true + +imageFilter: + xs: + - fit: true + height: 90 + width: 90 + resampling: lanczos + quality: 60 + s: + - fit: true + height: 300 + width: 300 + resampling: lanczos + quality: 60 + m: + - fit: true + height: 600 + width: 600 + resampling: lanczos + quality: 60 + l: + - fit: true + height: 1240 + width: 1240 + resampling: lanczos + quality: 60 + xl: + - fit: true + height: 2000 + width: 2000 + resampling: lanczos + quality: 60 + +fields: + - name: type + type: string + meta: + label: Modultyp + helperText: "Wählen Sie den Typ des Moduls aus." + widget: select + choices: + - name: { de: "Formular", en: "Form" } + id: form + - name: form + type: object + meta: + widget: containerLessObject + subFields: !include fieldLists/formular/form.yml diff --git a/api/collections/navigation.yml b/api/collections/navigation.yml new file mode 100644 index 0000000..09a59e0 --- /dev/null +++ b/api/collections/navigation.yml @@ -0,0 +1,96 @@ +name: navigation +uploadPath: ../media/navigation + +meta: + label: "Navigation" + muiIcon: navigation + allowExportAll: true + backup: + active: true + collectionName: backups + views: + - type: simpleList + mediaQuery: "(max-width:599px)" + primaryText: tree + + - type: table + mediaQuery: "(min-width:600px)" + columns: + - source: tree + name: Navigationsbaum + +permissions: + public: + methods: + get: true + post: false + put: false + delete: false + user: + methods: + get: true + post: false + put: true + delete: false +hooks: + post: + return: + type: javascript + file: hooks/clear_cache.js + put: + return: + type: javascript + file: hooks/clear_cache.js + +fields: + - name: tree + type: number + meta: + label: Baum + widget: select + helperText: Die Servicenavigation sollte Seiten wie bspw. die Datneschutzerklärung oder das Impressum umfassen. + choices: + - id: 0 + name: + de: Hauptnavigation + en: main navigation + - id: 1 + name: + de: Servicenavigation + en: service navigation + + - name: pages + type: object[] + meta: + label: + de: Seiten + en: pages + folding: + previewUnfolded: name + previewFolded: name + + widget: containerLessObjectArray + subFields: + - name: name + type: string + meta: + label: + de: Name + en: name + helperText: Dieser Name wird zur Anzeige in der Navigation verwendet. + + - name: page + type: string + meta: + label: + de: Seite + en: page + widget: select + choices: + endpoint: page + params: + sort: path + projection: navigation + mapping: + id: id + name: path diff --git a/api/collections/ssr.yml b/api/collections/ssr.yml index 5dde647..fe76e10 100644 --- a/api/collections/ssr.yml +++ b/api/collections/ssr.yml @@ -7,6 +7,7 @@ meta: label: { de: "SSR Dummy", en: "ssr dummy" } muiIcon: server rowIdentTpl: { twig: "{{ id }}" } + views: - type: simpleList mediaQuery: "(max-width: 600px)" @@ -55,6 +56,7 @@ fields: - name: path type: string index: [single, unique] + - name: content type: string meta: diff --git a/api/config.yml b/api/config.yml index b40976f..75b45f1 100644 --- a/api/config.yml +++ b/api/config.yml @@ -1,58 +1,25 @@ -# Der Namespace legt die eigentliche Projektbezeichnung und den Datenbankkontext fest. -# Er sollte nach Projektinitialisierung auf dem tibi-server nicht mehr angepasst werden. -# In den Projekteinstellungen im tibi-server kann der Namespace durch einen Datenbankeintrag -# überschrieben werden. -# Über die Bezeichnung des Namespace plus einen Prefix der in der globalen Server-Konfig -# hinterlegt ist, definiert sich der Datenbank-Name innerhalb der MongoDB. -namespace: demo +namespace: tibi_starter -# Das "meta"-Objekt ist frei definierbar, wird aber vom tibi-admin in spezieller Form erwartet. -# Mögliche Angaben, die der tibi-admin versteht, sind hier mit aufgeführt. meta: - # OpenAPI Spezifikationen openapi: - #info: - # title: Demo API - # version: 1.0.0 - # description: Eine Demo-API für den tibi-server servers: - url: https://tibi-admin-server.code.testversion.online/api/v1/_/demo description: code-server - # Pfad zu einer Bilddatei die als Projektbild im tibi-admin verwendet wird - imageUrl: - eval: "$projectBase + '_/assets/img/pic.jpg'" + dashboard: helper/dashboard.yml - # Liste möglicher Berechtigungen, die Benutzern zugeordnet werden können - permissions: - - # Name der Berechtigung - name: news - # Label für die Anzeige im Admin - # (kann string oder object mit Sprachen als keys sein) - label: - de: Neuigkeiten - en: News - - - name: pages - label: - de: Seiten - en: Pages - -# "collections" ist eine Auflistung von Kollektions-Konfigurationen. -# Hier bietet sich eine Auslagerung und Einbindung via YAML-Tag "!include" an. collections: - - !include collections/democol.yml + - !include collections/backups.yml + - !include collections/content.yml + - !include collections/forms.yml + - !include collections/lighthouse.yml + - !include collections/lighthouseSubpath.yml - !include collections/medialib.yml - # Dummy Kollektion für Hooks, die für serverseitiges Rendering benötigt werden + - !include collections/module.yml + - !include collections/navigation.yml - !include collections/ssr.yml -# Unter "jobs" können Jobs definiert werden, die regelmäßig ausgeführt werden sollen. jobs: - - !include jobs/demojob.yml - -# Werden Dateien innerhalb vom tibi-admin benötigt, bietet es sich an diese über -# "assets"-Pfade erreichbar zu machen. -assets: - - !include assets/demoassets.yml - - name: img - path: img + - cron: "0 0 * * 1" + type: javascript + file: jobs/lighthouse.js diff --git a/api/config.yml.env b/api/config.yml.env index 78e7887..bccf632 100644 --- a/api/config.yml.env +++ b/api/config.yml.env @@ -1 +1,2 @@ -TOKEN=geheim \ No newline at end of file +TOKEN=geheim +SSR_TOKEN=owshwerNwoa \ No newline at end of file diff --git a/api/helper/dashboard.yml b/api/helper/dashboard.yml new file mode 100644 index 0000000..a95f098 --- /dev/null +++ b/api/helper/dashboard.yml @@ -0,0 +1,279 @@ +majorItems: + - type: "sectionTitle" + title: { de: "Website Perfomance", en: "Website Perfomance" } + appendix: + collection: lighthouse + eval: | + (function(){ + return " " + new Date($date).toLocaleDateString() + "" + })() + - type: graph + filter: false + graphType: radialBar + until: "lastYear" + value: total + containerProps: + #optional class prop + layout: + breakBefore: false + breakAfter: false + size: + default: "col-6" + small: "col-12" + large: "col-3" + options: + { + property: plotOptions, + value: + { + radialBar: + { + hollow: { margin: 0, size: "70%" }, + track: { dropShadow: { enabled: true, top: 2, left: 0, blur: 4, opacity: 0.15 } }, + dataLabels: + { + name: { offsetY: -10, color: "#000", fontSize: "13px" }, + value: { color: "#000", fontSize: "30px", show: true }, + }, + }, + }, + } + graphs: + - collection: lighthouse + field: performance + yAxis: latestValue + graphName: { de: "Perfomance Score", en: "Perfomance Score" } + dateTimeField: insertTime + + - type: graph + filter: false + graphType: radialBar + until: "lastYear" + value: total + containerProps: + #optional class prop + layout: + breakBefore: false + breakAfter: false + size: + default: "col-6" + small: "col-12" + large: "col-3" + options: + { + property: plotOptions, + value: + { + radialBar: + { + hollow: { margin: 0, size: "70%" }, + track: { dropShadow: { enabled: true, top: 2, left: 0, blur: 4, opacity: 0.15 } }, + dataLabels: + { + name: { offsetY: -10, color: "#000", fontSize: "13px" }, + value: { color: "#000", fontSize: "30px", show: true }, + }, + }, + }, + } + graphs: + - collection: lighthouse + field: accessibility + yAxis: latestValue + graphName: { de: "Accessibility Score", en: "Accessibility Score" } + dateTimeField: insertTime + + - type: graph + filter: false + graphType: radialBar + until: "lastYear" + value: total + containerProps: + #optional class prop + layout: + breakBefore: false + breakAfter: false + size: + default: "col-6" + small: "col-12" + large: "col-3" + options: + { + property: plotOptions, + value: + { + radialBar: + { + hollow: { margin: 0, size: "70%" }, + track: { dropShadow: { enabled: true, top: 2, left: 0, blur: 4, opacity: 0.15 } }, + dataLabels: + { + name: { offsetY: -10, color: "#000", fontSize: "13px" }, + value: { color: "#000", fontSize: "30px", show: true }, + }, + }, + }, + } + graphs: + - collection: lighthouse + field: bestPractices + yAxis: latestValue + graphName: { de: "Best Practices Score", en: "Best Practices Score" } + dateTimeField: insertTime + + - type: graph + filter: false + graphType: radialBar + until: "lastYear" + value: total + containerProps: + #optional class prop + layout: + breakBefore: false + breakAfter: false + size: + default: "col-6" + small: "col-12" + large: "col-3" + options: + { + property: plotOptions, + value: + { + radialBar: + { + hollow: { margin: 0, size: "70%" }, + track: { dropShadow: { enabled: true, top: 2, left: 0, blur: 4, opacity: 0.15 } }, + dataLabels: + { + name: { offsetY: -10, color: "#000", fontSize: "13px" }, + value: { color: "#000", fontSize: "30px", show: true }, + }, + }, + }, + } + graphs: + - collection: lighthouse + field: seo + yAxis: latestValue + graphName: { de: "SEO Score", en: "SEO Score" } + dateTimeField: insertTime + + - type: swiper # Art des Elements, hier ein Swiper + containerProps: + #optional class prop + layout: + breakBefore: false + breakAfter: false + size: + default: "col-12" + small: "col-12" + large: "col-6 row-2-4" + + elements: # Liste der Elemente in diesem Swiper + - type: graph + title: + value: { de: "Ladezeit (Score)", en: "Loadtime (Score)" } + xAxis: manual + until: "lastYear" + filter: false #deaktiviert die Filter möglichkeit für den Nutzer beim diagramm, normalerweise aktiviert. Hierbei sind alle kombinationen x >= until möglich + columns: + - name: { de: '["Erstes sichtbares", "Element"]', en: '["First Contentful", "Paint"]' } + field: lighthouseMetrics.FCPS + + - name: { de: '["Erstes bedeutsames", "Element"]', en: '["First Meaningful", "Paint"]' } + field: lighthouseMetrics.FMPS + + - name: + { + de: '["Maximale potenzielle", "erste", "ingabeverzögerung"]', + en: '["Max Potential", "First Input", "Delay"]', + } + field: lighthouseMetrics.FPIDS + + - name: { de: '["Zeit bis", "zur", "Interaktivität"]', en: '["Time to", "Interactive"]' } + field: lighthouseMetrics.TTIS + + - name: { de: '["Geschwindigkeitsindex"]', en: '["Speed Index"]' } + field: lighthouseMetrics.SIS + + graphType: "bar" + graphs: + - graphName: { de: "Lighthouse Metriken", en: "Lighthouse Metrics" } + yAxis: latestValue + collection: lighthouse + dateTimeField: insertTime + - type: graph + title: + value: { de: "Ladezeit (Sekunden)", en: "Loadtime (seconds)" } + xAxis: manual + until: "lastYear" + filter: false #deaktiviert die Filter möglichkeit für den Nutzer beim diagramm, normalerweise aktiviert. Hierbei sind alle kombinationen x >= until möglich + columns: + - name: { de: '["Erstes sichtbares", "Element"]', en: '["First Contentful", "Paint"]' } + field: lighthouseMetrics.FCPV + + - name: { de: '["Erstes bedeutsames", "Element"]', en: '["First Meaningful", "Paint"]' } + field: lighthouseMetrics.FMPV + + - name: + { + de: '["Maximale potenzielle", "erste", "ingabeverzögerung"]', + en: '["Max Potential", "First Input", "Delay"]', + } + field: lighthouseMetrics.FPIDV + + - name: { de: '["Zeit bis", "zur", "Interaktivität"]', en: '["Time to", "Interactive"]' } + field: lighthouseMetrics.TTIV + + - name: { de: '["Geschwindigkeitsindex"]', en: '["Speed Index"]' } + field: lighthouseMetrics.SIV + + graphType: "bar" + graphs: + - graphName: { de: "Lighthouse Metriken", en: "Lighthouse Metrics" } + yAxis: latestValue + collection: lighthouse + dateTimeField: insertTime + + - type: "sectionTitle" + title: { de: "Seiteninhalte", en: "Page content" } + + - collection: content + type: reference + style: + upper: rgba(3, 50, 59, 0.7) + lower: rgba(3, 50, 59) + + - collection: navigation + type: reference + style: + upper: rgba(3, 50, 59, 0.7) + lower: rgba(3, 50, 59) + + - collection: forms + type: reference + style: + upper: rgba(3, 50, 59, 0.7) + lower: rgba(3, 50, 59) + + - type: "sectionTitle" + title: { de: "Aktionen", en: "Actions" } + + - collection: lighthouse + type: action + action: "Lighthouse Durchlauf starten" + backgroundAction: true + modalText: + { + de: "Zur Analyse der Website werden einige Zeitintensive prozesse gestartet, daher wird dies im Hintergrund ausgeführt. Es kann einige Minuten dauern bis das Dashboard aktuallisiert wird, bitte haben Sie etwas Geduld.", + en: "To analyze the website, some time-intensive processes are started, so this is done in the background. It may take a few minutes for the dashboard to be updated, please be patient.", + } + properties: + url: https://allkids-erfurt.de + type: post + style: + upper: rgba(3, 50, 59, 0.7) + lower: rgba(3, 50, 59) + +minorItems: [] diff --git a/api/hooks/backups/post_create.js b/api/hooks/backups/post_create.js new file mode 100644 index 0000000..8d5e9cd --- /dev/null +++ b/api/hooks/backups/post_create.js @@ -0,0 +1,92 @@ +;(function () { + let backup = context.data + const updateLogs = compareAndUpdateEntry(backup?.entry, backup?.collectionName, backup?.versionNr - 1) + backup.updateLogs = updateLogs + return { data: backup } + + function compareAndUpdateEntry(entry, collectionName, versionNr) { + let updateLogs + if (versionNr == 0) { + updateLogs = getUpdateLogs({}, entry) + } + delete entry.updateTime + let previousEntry = context.db.find("backups", { + filter: { entryId: context.data.entryId, versionNr, collectionName }, + })[0] + if (!previousEntry) { + console.error("No previous entry found") + updateLogs = getUpdateLogs({}, entry) + } else { + delete previousEntry.updateTime + updateLogs = getUpdateLogs(previousEntry.entry, entry) + } + console.log(context.json.stringify(previousEntry?.entry), context.json.stringify(entry)) + + return updateLogs + } + + function filterValidObjects(array) { + return array.filter((object) => { + for (let key in object) { + if (typeof object[key] !== "string" && object[key] !== null) { + return false + } + } + return true + }) + } + function getUpdateLogs(oldObj = {}, newObj = {}, path = "") { + let updateLogs = [] + const ignoredKeys = ["id", "insertTime", "updateTime"] + const allKeys = new Set([...Object.keys(oldObj), ...Object.keys(newObj)]) + + allKeys.forEach((key) => { + if (ignoredKeys.includes(key)) return + + const newPath = path ? `${path}.${key}` : key + const oldVal = oldObj.hasOwnProperty(key) ? oldObj[key] : "" + const newVal = newObj.hasOwnProperty(key) ? newObj[key] : "" + + // Handle Arrays + if (Array.isArray(oldVal) || Array.isArray(newVal)) { + const oldArr = oldVal || [] + const newArr = newVal || [] + + for (let i = 0; i < Math.max(oldArr.length, newArr.length); i++) { + const itemPath = `${newPath}[${i}]` + + if (oldArr[i] !== newArr[i]) { + if (typeof oldArr[i] === "object" || typeof newArr[i] === "object") { + const arrUpdates = getUpdateLogs(oldArr[i], newArr[i], itemPath) + updateLogs = updateLogs.concat(arrUpdates) + } else { + updateLogs.push({ + field: itemPath, + previous: oldArr[i] === undefined ? "" : oldArr[i].toString(), + current: newArr[i] === undefined ? "" : newArr[i].toString(), + }) + } + } + } + } + // Handle nested objects but not arrays + else if ( + (typeof oldVal === "object" && oldVal !== null) || + (typeof newVal === "object" && newVal !== null) + ) { + const nestedUpdates = getUpdateLogs(oldVal || {}, newVal || {}, newPath) + updateLogs = updateLogs.concat(nestedUpdates) + } + // Handle primitive types + else if (oldVal !== newVal) { + updateLogs.push({ + field: newPath, + previous: oldVal.toString(), + current: newVal.toString(), + }) + } + }) + + return filterValidObjects(updateLogs) + } +})() diff --git a/api/hooks/clear_cache.js b/api/hooks/clear_cache.js new file mode 100644 index 0000000..7491038 --- /dev/null +++ b/api/hooks/clear_cache.js @@ -0,0 +1,5 @@ +var utils = require("./lib/utils") + +;(function () { + utils.clearSSRCache() +})() diff --git a/api/hooks/config-client.js b/api/hooks/config-client.js index b618228..51b3fd7 100644 --- a/api/hooks/config-client.js +++ b/api/hooks/config-client.js @@ -1,6 +1,5 @@ const release = "tibi-docs.dirty" const apiClientBaseURL = "/api/" - // @ts-ignore if (release && typeof context !== "undefined") { context.response.header("X-Release", release) diff --git a/api/hooks/config.js b/api/hooks/config.js index 6504b80..ddead93 100644 --- a/api/hooks/config.js +++ b/api/hooks/config.js @@ -1,20 +1,8 @@ -const publishedFilter = { - $or: [ - { publishDate: { $exists: false } }, - { publishDate: null }, - { - publishDate: { $lte: { $date: new Date().toISOString() } }, - // publishDate: { $lte: new Date() }, - }, - ], -} - -const apiSsrBaseURL = "http://localhost:8080/api/v1/_/demo/" +const apiSsrBaseURL = "http://localhost:8080/api/v1/_/allkids_erfurt" module.exports = { - publishedFilter, apiSsrBaseURL, - ssrValidatePath: function (/** @type {string} */ path) { + ssrValidatePath: function (path) { // validate if path ssr rendering is ok, -1 = NOTFOUND, 0 = NO SSR, 1 = SSR // pe. use context.readCollection("product", {filter: {path: path}}) ... to validate dynamic urls @@ -22,16 +10,16 @@ module.exports = { // if (path == "/") return 1 // // all other sites are in db - // path = path?.replace(/^\//, "") - - // filter for path or alternativePaths + //path = path?.replace(/^\//, "") + console.log("PATH:", path) const resp = context.db.find("content", { filter: { - $and: [{ $or: [{ path }, { "alternativePaths.path": path }] }, publishedFilter], + $and: [{ path }], }, selector: { _id: 1 }, }) + console.log("RESP:", resp?.length) if (resp && resp.length) { return 1 } @@ -40,4 +28,5 @@ module.exports = { return -1 }, ssrPublishCheckCollections: ["content"], + LIGHTHOUSE_TOKEN: "AIzaSyC0UxHp3-MpJiDL3ws7pEV6lj57bfIc7GQ", } diff --git a/api/hooks/democol/post_create.js b/api/hooks/democol/post_create.js deleted file mode 100644 index e69de29..0000000 diff --git a/api/hooks/democol/post_return.js b/api/hooks/democol/post_return.js deleted file mode 100644 index e69de29..0000000 diff --git a/api/hooks/democol/post_validate.js b/api/hooks/democol/post_validate.js deleted file mode 100644 index e69de29..0000000 diff --git a/api/hooks/democol/put_bind.js b/api/hooks/democol/put_bind.js deleted file mode 100644 index e69de29..0000000 diff --git a/api/hooks/democol/put_return.js b/api/hooks/democol/put_return.js deleted file mode 100644 index e69de29..0000000 diff --git a/api/hooks/democol/put_update.js b/api/hooks/democol/put_update.js deleted file mode 100644 index e69de29..0000000 diff --git a/api/hooks/democol/put_validate.js b/api/hooks/democol/put_validate.js deleted file mode 100644 index e69de29..0000000 diff --git a/api/hooks/forms/post_create.js b/api/hooks/forms/post_create.js new file mode 100644 index 0000000..6fa08e0 --- /dev/null +++ b/api/hooks/forms/post_create.js @@ -0,0 +1,15 @@ +const { validateFields } = require("./validateFields") +;(function () { + if (context?.data?.formular?.honey) { + throw { status: 400, error: "Bot detection" } + } + delete context.data.formular.honey + /** + * @type {Array<[string, FormObj]>} + */ + let values = Object.entries(context?.data?.formular) + let validation = validateFields(values) + if (validation.length) { + throw { status: 400, error: validation } + } +})() diff --git a/api/hooks/forms/post_return.js b/api/hooks/forms/post_return.js new file mode 100644 index 0000000..ff59b4c --- /dev/null +++ b/api/hooks/forms/post_return.js @@ -0,0 +1,79 @@ +;(function () { + /** @type {FormObj} */ + let formular = context?.data?.formular + + /** @type {TempFormBefore | TempFormAfter} */ + let tempForm = {} + + let formTitle = `${formular.formTitle}` + delete formular.formTitle + delete formular["agreement"] + delete formular["honey"] + + formular?.formRows?.forEach( + /** @param {string} rowName */ + (rowName) => { + tempForm[rowName] = {} + } + ) + + /** + * @param {[string, any]} e + * @returns {any} + */ + let getValue = (e) => { + if (e[0].includes("numberLabel")) return e[1][0] + return e[1] + } + + /** @type {TempFormIndices} */ + let indices = {} + + Object.entries(formular).forEach((e) => { + if (e[0] === "formRows") return + + let key = e[0].split("_") + let newKey = key[key.length - 1] + + // @ts-ignore + let rowName = formular?.formRows[Number(key[key.length - 2])] + let index = isNaN(Number(key[key.length - 3])) ? 100 : Number(key[key.length - 3]) + + if (!rowName) return + if (!tempForm[rowName]) tempForm[rowName] = {} + + // @ts-ignore + if (tempForm[rowName][newKey]) { + // @ts-ignore + tempForm[rowName][newKey][0] += "\\" + getValue(e) + } else { + // @ts-ignore + tempForm[rowName][newKey] = [getValue(e), newKey[0] === "n", newKey.includes("invalid")] + indices[rowName] = { ...indices[rowName], [newKey]: index } + } + }) + + // Now iterate over tempForm to sort fields in each row + Object.entries(tempForm).forEach(([rowName, fields]) => { + tempForm[rowName] = Object.entries(fields) + .sort((a, b) => indices[rowName][a[0]] - indices[rowName][b[0]]) + .reduce((acc, [key, val]) => ({ ...acc, [key]: val }), {}) + }) + + Object.keys(tempForm).forEach((row) => { + tempForm[row] = Object.entries(tempForm[row]) + }) + + // @ts-ignore + delete tempForm[undefined] + context.smtp.sendMail({ + to: "allkids.erfurt@gmail.com", + from: "mail@webmakers.de", + subject: "AllKids " + formTitle, + html: context.tpl.execute(context.fs.readFile("templates/form_mail.html"), { + context: context, + formularRows: Object.entries(tempForm), + formTitle: formTitle, + }), + }) +})() diff --git a/api/hooks/forms/validateFields.js b/api/hooks/forms/validateFields.js new file mode 100644 index 0000000..e205b43 --- /dev/null +++ b/api/hooks/forms/validateFields.js @@ -0,0 +1,80 @@ +/** + * @param {Array<[string, FormObj]>} fieldsArray + * @returns {(string | (() => void))[][]} + */ +function validateFields(fieldsArray) { + /**@type {(string | (() => void))[][]} */ + const errors = [] + /**@type {number} */ + let selectedGroup + + const numberRegex = /^[+]?([.]\d+|\d+([.]\d+)?)$/ + const emailRegex = + /(?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*|"(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21\x23-\x5b\x5d-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])*")@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\[(?:(?:(2(5[0-5]|[0-4][0-9])|1[0-9][0-9]|[1-9]?[0-9]))\.){3}(?:(2(5[0-5]|[0-4][0-9])|1[0-9][0-9]|[1-9]?[0-9])|[a-z0-9-]*[a-z0-9]:(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21-\x5a\x53-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])+)\])/ + const dateRegex = /^\d{4}\-(0?[1-9]|1[012])\-(0?[1-9]|[12][0-9]|3[01])$/ + const timeRegex = /^\d{1,2}:\d{2}-\d{1,2}:\d{2}$/ + const phoneRegex = /^\s*(?:\+?(\d{1,3}))?[-. (]*(\d{3})[-. )]*(\d{3})[-. ]*(\d{4})(?: *x(\d+))?\s*$/ + + const wholeBlockInvalid = () => { + const blockContainer = document.getElementsByClassName("blockContainer")[0] + blockContainer.classList.add("invalidBlocks") + } + + /** + * + * @param {string} value + * @param {any} field + * @param {HTMLElement} element + */ + const validateNumber = (value, field, element) => { + if (!numberRegex.test(`${value}`)) { + errors.push(["block", () => element.classList.add("border-red")]) + } + } + + fieldsArray.forEach(([field, value]) => { + if (field === "blockGroups" || field.includes("numberLabel")) { + if (!field.includes("numberLabel")) return + // @ts-ignore + const [elementValue, element, group] = value + + if (!elementValue) return + + if (selectedGroup !== undefined) { + if (group !== selectedGroup) { + errors.push(["block", wholeBlockInvalid]) + } else { + validateNumber(elementValue, field, element) + } + } else { + selectedGroup = group + validateNumber(elementValue, field, element) + } + return + } + + if (!value) { + errors.push(["Eingabe ist erforderlich.", field]) + } else if (field.includes("number_")) { + if (!numberRegex.test(`${value}`)) { + errors.push(["Ungültiger numerischer Wert.", field]) + } + } else if (field.includes("agreement_")) { + if (value !== true) errors.push(["Bitte das Kontrollkästchen anklicken.", field]) + } else if (field.includes("Email_")) { + if (!emailRegex.test(value)) errors.push(["Ungültiges E-Mail-Format.", field]) + } else if (field.includes("date_")) { + if (!dateRegex.test(value)) errors.push(["Ungültiges Datumsformat.", field]) + } else if (field.includes("times_")) { + if (!timeRegex.test(value)) errors.push(["Ungültiges Zeitformat.", field]) + } else if (field.includes("Telefon_")) { + if (!phoneRegex.test(value)) errors.push(["Ungültiges Telefonnummernformat.", field]) + } + }) + + return errors +} + +module.exports = { + validateFields, +} diff --git a/api/hooks/lib/ssr-server.js b/api/hooks/lib/ssr-server.js index c0a4557..14a87b5 100644 --- a/api/hooks/lib/ssr-server.js +++ b/api/hooks/lib/ssr-server.js @@ -6,44 +6,15 @@ const { apiSsrBaseURL, ssrPublishCheckCollections } = require("../config") * * @param {string} cacheKey * @param {string} endpoint - * @param {string} query * @param {ApiOptions} options - * @returns {ApiResult} + * @returns {ApiResult} */ function ssrRequest(cacheKey, endpoint, query, options) { let url = endpoint + (query ? "?" + query : "") - if (ssrPublishCheckCollections.includes(endpoint)) { - // @ts-ignore - let validUntil = context.ssrCacheValidUntil - - // check in db for publish date to invalidate cache - const _optionsPublishSearch = Object.assign( - {}, - { filter: options?.filter }, - { - selector: { publishDate: 1 }, - // projection: null, - } - ) - const publishSearch = context.db.find(endpoint, _optionsPublishSearch) - publishSearch?.forEach((item) => { - const publishDate = item.publishDate ? new Date(item.publishDate.unixMilli()) : null - - if (publishDate && publishDate > new Date()) { - // entry has a publish date in the future, set global validUntil - if (validUntil == null || validUntil > publishDate) { - validUntil = publishDate - } - } - }) - // @ts-ignore - context.ssrCacheValidUntil = validUntil - } - // console.log("############ FETCHING ", apiSsrBaseURL + url) - const response = context.http.fetch(apiSsrBaseURL + url, { + const response = context.http.fetch(apiSsrBaseURL + "/" + url, { method: options.method, headers: options.headers, }) diff --git a/api/hooks/lib/ssr.js b/api/hooks/lib/ssr.js index d0432f6..0f1def6 100644 --- a/api/hooks/lib/ssr.js +++ b/api/hooks/lib/ssr.js @@ -34,7 +34,10 @@ function obj2str(obj) { // fetch polyfill // [MIT License](LICENSE.md) © [Jason Miller](https://jasonformat.com/) -const _f = function (url, options) { +const _f = function ( + /** @type {string | URL} */ url, + /** @type {{ method?: any; credentials?: any; headers?: any; body?: any; }} */ options +) { if (typeof XMLHttpRequest === "undefined") { return Promise.resolve(null) } @@ -99,14 +102,18 @@ const _fetch = typeof fetch === "undefined" ? (typeof window === "undefined" ? _ * * @param {string} endpoint * @param {ApiOptions} options - * @returns {Promise} + * @param {any} body + * @returns {Promise>} */ -function apiRequest(endpoint, options) { +function apiRequest(endpoint, options, body) { + // TODO cache only for GET + // first check cache if on client const cacheKey = obj2str({ endpoint: endpoint, options: options }) + options.method = options?.method || "GET" // @ts-ignore - if (typeof window !== "undefined" && window.__SSR_CACHE__) { + if (typeof window !== "undefined" && window.__SSR_CACHE__ && options?.method === "GET") { // @ts-ignore const cache = window.__SSR_CACHE__[cacheKey] console.log("SSR:", cacheKey, cache) @@ -115,7 +122,7 @@ function apiRequest(endpoint, options) { } } - let method = "GET" + let method = options?.method || "GET" let query = "&count=1" if (options?.filter) query += "&filter=" + encodeURIComponent(JSON.stringify(options.filter)) @@ -137,7 +144,7 @@ function apiRequest(endpoint, options) { if (options?.headers) headers = { ...headers, ...options.headers } - if (typeof window === "undefined") { + if (typeof window === "undefined" && method === "GET") { // server // reference via context from get hook to tree shake in client @@ -147,12 +154,18 @@ function apiRequest(endpoint, options) { } else { // client let url = endpoint + (query ? "?" + query : "") - console.log("fetch", apiClientBaseURL + url) - return _fetch(apiClientBaseURL + url, { + console.log("URL:", url) + const requestOptions = { method, mode: "cors", headers, - }).then((response) => { + } + + if (method === "POST" || method === "PUT") { + requestOptions.body = JSON.stringify(body) + } + + return _fetch(apiClientBaseURL + url, requestOptions).then((response) => { return response?.json().then((json) => { if (response?.status < 200 || response?.status >= 400) { return Promise.reject({ response, data: json }) diff --git a/api/hooks/lib/utils.js b/api/hooks/lib/utils.js index 7ea6899..c5cc25f 100644 --- a/api/hooks/lib/utils.js +++ b/api/hooks/lib/utils.js @@ -6,6 +6,39 @@ function log(str) { console.log(JSON.stringify(str, undefined, 4)) } +/** + * convert object to string + * @param {any} obj object + */ +function obj2str(obj) { + if (Array.isArray(obj)) { + return JSON.stringify( + obj.map(function (idx) { + return obj2str(idx) + }) + ) + } else if (typeof obj === "object" && obj !== null) { + var elements = Object.keys(obj) + .sort() + .map(function (key) { + var val = obj2str(obj[key]) + if (val) { + return key + ":" + val + } + }) + + var elementsCleaned = [] + for (var i = 0; i < elements.length; i++) { + if (elements[i]) elementsCleaned.push(elements[i]) + } + + return "{" + elementsCleaned.join("|") + "}" + } + + if (obj) return obj +} +var { LIGHTHOUSE_TOKEN } = require("../config") + /** * clear SSR cache */ @@ -14,7 +47,103 @@ function clearSSRCache() { context.response.header("X-SSR-Cleared", info.removed) } +function calculateAverageDynamically(dbObjs) { + const sumObj = {} + let count = 0 + + dbObjs.forEach((obj) => { + accumulate(obj, sumObj) + count++ + }) + + function accumulate(sourceObj, targetObj) { + for (const key in sourceObj) { + if (typeof sourceObj[key] === "number") { + targetObj[key] = (targetObj[key] || 0) + sourceObj[key] + } else if (typeof sourceObj[key] === "object" && sourceObj[key] !== null) { + targetObj[key] = targetObj[key] || {} + accumulate(sourceObj[key], targetObj[key]) + } + } + } + + function average(targetObj) { + for (const key in targetObj) { + if (typeof targetObj[key] === "number") { + targetObj[key] = targetObj[key] / count + } else if (typeof targetObj[key] === "object") { + average(targetObj[key]) + } + } + } + + average(sumObj) + return sumObj +} + +function run(url) { + const response = context.http + .fetch(url, { + timeout: 300, + method: "GET", + headers: { + "Content-Type": "application/json", + }, + }) + .body.json() + // needs enough traffic to be collected + const cruxMetrics = { + "First Contentful Paint": response?.loadingExperience?.metrics?.FIRST_CONTENTFUL_PAINT_MS?.category, + "First Input Delay": response?.loadingExperience?.metrics?.FIRST_INPUT_DELAY_MS?.category, + } + const lighthouse = response.lighthouseResult + const lighthouseMetrics = { + FCPS: lighthouse.audits["first-contentful-paint"].score * 100, + FCPV: lighthouse.audits["first-contentful-paint"].numericValue / 1000, + FMPS: lighthouse.audits["first-meaningful-paint"].score * 100, + FMPV: lighthouse.audits["first-meaningful-paint"].numericValue / 1000, + + SIS: lighthouse.audits["speed-index"].score * 100, + SIV: lighthouse.audits["speed-index"].numericValue / 1000, + TTIS: lighthouse.audits["interactive"].score * 100, + TTIV: lighthouse.audits["interactive"].numericValue / 1000, + + FPIDS: lighthouse.audits["max-potential-fid"].score * 100, + FPIDV: lighthouse.audits["max-potential-fid"].numericValue / 1000, + } + + let dbObject = { + cruxMetrics, + lighthouseMetrics, + performance: Math.round(lighthouse.categories.performance.score * 100), + accessibility: Math.round(lighthouse.categories.accessibility.score * 100), + bestPractices: Math.round(lighthouse.categories["best-practices"].score * 100), + seo: Math.round(lighthouse.categories.seo.score * 100), + } + return dbObject +} +function setUpQuery(subPath = "/") { + const api = "https://www.googleapis.com/pagespeedonline/v5/runPagespeed" + let params = `category=performance&category=accessibility&category=best-practices&category=seo` + + const parameters = { + url: encodeURIComponent(`https://allkids-erfurt.de/${subPath}`), + key: LIGHTHOUSE_TOKEN, + } + + let query = `${api}?` + for (let key in parameters) { + query += `${key}=${parameters[key]}&` + } + query += params // Append other parameters without URL encoding + return query +} + module.exports = { log, clearSSRCache, + obj2str, + run, + setUpQuery, + calculateAverageDynamically, } diff --git a/api/hooks/lighthouse/post_create.js b/api/hooks/lighthouse/post_create.js new file mode 100644 index 0000000..e3f1038 --- /dev/null +++ b/api/hooks/lighthouse/post_create.js @@ -0,0 +1,16 @@ +var { setUpQuery, calculateAverageDynamically, run } = require("../lib/utils") +;(function () { + let subPaths = context.db.find("lighthouseSubpath") + let urls = [] + for (let i = 0; i < subPaths.length; i++) { + urls.push(setUpQuery(subPaths[i].lighthouseSubpath)) + } + let dbObjs = [] + urls.forEach((url) => { + console.log("URL:", url) + dbObjs.push(run(url)) + }) + let dbObject = calculateAverageDynamically(dbObjs) + dbObject.analyzedPaths = [...subPaths].map((subPath) => subPath.lighthouseSubpath) + return { data: dbObject } +})() diff --git a/api/hooks/medialib/delete_return.js b/api/hooks/medialib/delete_return.js deleted file mode 100644 index 49a4bb7..0000000 --- a/api/hooks/medialib/delete_return.js +++ /dev/null @@ -1,18 +0,0 @@ -;(function () { - const request = context.request() - //get id of deleted image entry (delete request URL is : .../api/_/demo/medialib/id) - const id = request.param("id") - - //find all entrys where there is an image field with the id of this deleted one (image is an foreignKey widget, so stores the id as a string internally) - const referencingElements = context.db.find("democol", { - filter: { - image: id, - }, - }) - referencingElements.forEach((e) => { - //update all those entries to remove the image id from them, since its deleted... - context.db.update("democol", e.id, { - image: "", - }) - }) -})() diff --git a/api/hooks/ssr/get_read.js b/api/hooks/ssr/get_read.js index 116b3fb..94784ab 100644 --- a/api/hooks/ssr/get_read.js +++ b/api/hooks/ssr/get_read.js @@ -2,11 +2,10 @@ const { ssrValidatePath } = require("../config") const { log } = require("../lib/utils") -const { ssrRequest } = require("../lib/ssr-server") +const { ssrRequest } = require("../lib/ssr-server.js") ;(function () { /** @type {HookResponse} */ - // @ts-ignore let response = null const request = context.request() @@ -15,9 +14,6 @@ const { ssrRequest } = require("../lib/ssr-server") // add sentry trace id to head const trace_id = context.debug.sentryTraceId() - /** - * @param {string} content - */ function addSentryTrace(content) { return content.replace("", '') } @@ -49,22 +45,12 @@ const { ssrRequest } = require("../lib/ssr-server") }, }) if (cache && cache.length) { - const validUntil = cache[0].validUntil ? new Date(cache[0].validUntil.unixMilli()) : null - // context.debug.dump("cache validUntil", validUntil) - if (!validUntil || validUntil > new Date()) { - // context.debug.dump("using cache") - // use cache - context.response.header("X-SSR-Cache", "true") - throw { - status: 200, - log: false, - html: addSentryTrace(cache[0].content), - } - } else { - // cache is invalid, delete it - context.response.header("X-SSR-Cache", "invalid") - // @ts-ignore - context.db.delete("ssr", cache[0].id) + // use cache + context.response.header("X-SSR-Cache", "true") + throw { + status: 200, + log: false, + html: addSentryTrace(cache[0].content), } } @@ -128,7 +114,7 @@ const { ssrRequest } = require("../lib/ssr-server") } else { cacheIt = true } - } catch (/** @type {any} */ e) { + } catch (e) { // save error for later insert into html log(e.message) log(e.stack) @@ -149,8 +135,6 @@ const { ssrRequest } = require("../lib/ssr-server") // context.debug.dump("ssr", { path: url, content: tpl, - // @ts-ignore - validUntil: context.ssrCacheValidUntil, }) } diff --git a/api/jobs/demojob.js b/api/jobs/demojob.js deleted file mode 100644 index e69de29..0000000 diff --git a/api/jobs/demojob.yml b/api/jobs/demojob.yml deleted file mode 100644 index 1ab3b70..0000000 --- a/api/jobs/demojob.yml +++ /dev/null @@ -1,14 +0,0 @@ -# Jedem Job muss ein "cron" Eintrag zugeordnet werden, der die -# Ausführungszeitpunkte definiert. -# Das cron-Schema ist dem üblichen Linux cron-Schema nachempfunden. -cron: "*/10 * * * *" - -# "type" des Jobs ist derzeit immer "javascript" mit der "file"-Referenz -# relativ zur "config.yml". -type: javascript -file: jobs/demojob.js - -# Es können beliebige "meta"-Daten hinterlegt werden, die im Javascript -# des Jobs über "context.job.meta" abgerufen werden können. -meta: - name: Demo Job \ No newline at end of file diff --git a/api/jobs/lighthouse.js b/api/jobs/lighthouse.js new file mode 100644 index 0000000..c13a13d --- /dev/null +++ b/api/jobs/lighthouse.js @@ -0,0 +1,17 @@ +var { setUpQuery, calculateAverageDynamically, run } = require("../hooks/lib/utils") +;(function () { + console.log("Running lighthouse job") + let subPaths = context.db.find("lighthouseSubpath") + let urls = [] + for (let i = 0; i < subPaths.length; i++) { + urls.push(setUpQuery(subPaths[i].lighthouseSubpath)) + } + let dbObjs = [] + urls.forEach((url) => { + console.log("URL:", url) + dbObjs.push(run(url)) + }) + let dbObject = calculateAverageDynamically(dbObjs) + dbObject.analyzedPaths = [...subPaths].map((subPath) => subPath.lighthouseSubpath) + context.db.create("lighthouse", dbObject) +})() diff --git a/api/templates/email_body.html.tpl b/api/templates/email_body.html.tpl deleted file mode 100644 index e69de29..0000000 diff --git a/api/templates/email_body.txt.tpl b/api/templates/email_body.txt.tpl deleted file mode 100644 index e69de29..0000000 diff --git a/api/templates/email_subject.txt.tpl b/api/templates/email_subject.txt.tpl deleted file mode 100644 index e69de29..0000000 diff --git a/api/templates/form_mail.html b/api/templates/form_mail.html new file mode 100644 index 0000000..149de0e --- /dev/null +++ b/api/templates/form_mail.html @@ -0,0 +1,61 @@ + + + + {{formTitle}} + + + +
+

Hallo Allkids,

+

Sie haben eine neue {{formTitle}} erhalten! Hier sind die Details der Anfrage:

+ + {% for row in formularRows %} +

{{row.0}}:

+
+ {% for field in row.1 %} {% if field.0 == "" || field.1.2 %} +

{{field.1.0}}

+ {% else %} {% if field.1.1 %}
+

{{field.1.0}}

+ {% else %} +

{{field.0}}: {{field.1.0}}

+ {% endif %} {% endif %} {% endfor %} +
+ {% endfor %} + +

+ Bitte nehmen Sie Kontakt mit dem Interessenten auf, um die {{formTitle}} zu besprechen und weitere + Schritte zu planen. +

+ +

Mit freundlichen Grüßen,
Ihre Webmakers!

+
+ + diff --git a/api/templates/spa.html b/api/templates/spa.html new file mode 100644 index 0000000..d32dbbf --- /dev/null +++ b/api/templates/spa.html @@ -0,0 +1,23 @@ + + + + + + + TibiCMS + + + + + + + + +
+ + + + + + + diff --git a/docker-compose-local.yml b/docker-compose-local.yml index 50f1315..2da408b 100644 --- a/docker-compose-local.yml +++ b/docker-compose-local.yml @@ -1,17 +1,15 @@ version: "3.8" -name: tibi-docs +name: ${PROJECT_NAME} services: docpress: profiles: - docpress - image: node:20 + image: node:18 volumes: - ./:/data - ./tmp:/tmp - ./tmp/nonexistent:/nonexistent - - ./tmp/.npm:/.npm - - ./tmp/.yarn:/.yarn working_dir: /data/docs command: sh -c "yarn install && yarn docpress:serve" expose: @@ -25,15 +23,14 @@ services: profiles: - tibi - tibi-dev - image: node:20 + image: node:18 volumes: - ./:/data - ./tmp:/tmp - ./tmp/nonexistent:/nonexistent - ./tmp/.npm:/.npm - - ./tmp/.yarn:/.yarn working_dir: /data - command: sh -c "yarn install && API_BASE=http://tibiserver:8080/api/v1/_/${TIBI_NAMESPACE} yarn start" + command: sh -c "yarn install && API_BASE=http://tibiserver:8080/api/v1/_/${TIBI_NAMESPACE} yarn start${START_SCRIPT}" expose: - 3000 labels: @@ -115,7 +112,7 @@ services: tibiadmin-dev: profiles: - tibi-dev - image: node:20 + image: node:18 volumes: - ./../../cms/tibi-admin:/data working_dir: /data diff --git a/docs/README.md b/docs/README.md deleted file mode 100644 index f999706..0000000 --- a/docs/README.md +++ /dev/null @@ -1,21 +0,0 @@ -# TibiCMS Dokumentation - -![TibiCMS Aufbau](./md/tibi-aufbau.svg) - -## Einleitung - -_TibiCMS_ ist der Sammelbegriff für die Komponenten _tibi-server_ und _tibi-admin_, welche einen Rest-API Server und eine Administrationsoberfläche zur Verfügung stellen. Auf Basis dieser beiden Komponenten und der _MongoDB_ als Abhängigkeit lassen sich WebCMS Anwendungen abbilden. - -Das CMS ist multi-mandanten-fähig, d.h. es kann mehrer Projekte mit unterschiedlichen Zugriffsbeschränkungen verwalten. - -### tibi-server - -Der Server selbst kommt ohne grafische Oberfläche oder WebUI. Er ist ausschließlich nach außen über eine Rest-API erreichbar. - -Als einzige Abhängigkeit ist eine _MongoDB_ zu erwähnen. Da der Server in Go geschrieben ist, sind keine externen Bibliotheken notwendig. Er lässt sich daher prima via Docker-Container verteilen. - -### tibi-admin - -Die Administrationsoberfläche ist wie jeder andere Service, der die Rest-API des Servers nutzt, nur ein Frontend. _tibi-admin_ läuft vollständig im Browser und benötigt nur einen Webserver, der statischen Content ausliefert. - -Die Version des _tibi-admin_ sollte synchron zur _tibi-server_ Version gehalten werden, damit alle Datentypen bedient werden können. diff --git a/docs/docpress.json b/docs/docpress.json deleted file mode 100644 index ddf47c2..0000000 --- a/docs/docpress.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "docs": "md", - "markdown": { - "plugins": { - "code-include": {} - } - }, - "css": ["md/docpress.css", "md/github-dark-dimmed.css"] -} diff --git a/docs/markdown-it-code-include/index.js b/docs/markdown-it-code-include/index.js deleted file mode 100644 index 266605c..0000000 --- a/docs/markdown-it-code-include/index.js +++ /dev/null @@ -1,106 +0,0 @@ -const path = require('path'); -const fs = require('fs'); - -const INCLUDE_RE = /!{3}\s*include(.+?)!{3}/i; -const BRACES_RE = /\((.+?)\)/i; - -const include_plugin = (md, options) => { - const defaultOptions = { - root: '.', - getRootDir: (pluginOptions/*, state, startLine, endLine*/) => pluginOptions.root, - includeRe: INCLUDE_RE, - throwError: false, - bracesAreOptional: false, - notFoundMessage: 'File \'{{FILE}}\' not found.', - circularMessage: 'Circular reference between \'{{FILE}}\' and \'{{PARENT}}\'.' - }; - - if (typeof options === 'string') { - options = { - ...defaultOptions, - root: options - }; - } else { - options = { - ...defaultOptions, - ...options - }; - } - - const _replaceIncludeByContent = (src, rootdir, parentFilePath, filesProcessed) => { - filesProcessed = filesProcessed ? filesProcessed.slice() : []; // making a copy - let cap, filePath, mdSrc, errorMessage; - - // store parent file path to check circular references - if (parentFilePath) { - filesProcessed.push(parentFilePath); - } - while ((cap = options.includeRe.exec(src))) { - let includePath = cap[1].trim(); - const sansBracesMatch = BRACES_RE.exec(includePath); - - if (!sansBracesMatch && !options.bracesAreOptional) { - errorMessage = `INCLUDE statement '${src.trim()}' MUST have '()' braces around the include path ('${includePath}')`; - } else if (sansBracesMatch) { - includePath = sansBracesMatch[1].trim(); - } else if (!/^\s/.test(cap[1])) { - // path SHOULD have been preceeded by at least ONE whitespace character! - /* eslint max-len: "off" */ - errorMessage = `INCLUDE statement '${src.trim()}': when not using braces around the path ('${includePath}'), it MUST be preceeded by at least one whitespace character to separate the include keyword and the include path.`; - } - - if (!errorMessage) { - filePath = path.resolve(rootdir, includePath); - - // check if child file exists or if there is a circular reference - if (!fs.existsSync(filePath)) { - // child file does not exist - errorMessage = options.notFoundMessage.replace('{{FILE}}', filePath); - } else if (filesProcessed.indexOf(filePath) !== -1) { - // reference would be circular - errorMessage = options.circularMessage.replace('{{FILE}}', filePath).replace('{{PARENT}}', parentFilePath); - } - } - - // check if there were any errors - if (errorMessage) { - if (options.throwError) { - throw new Error(errorMessage); - } - mdSrc = `\n\n# INCLUDE ERROR: ${errorMessage}\n\n`; - } else { - // get content of child file - mdSrc = fs.readFileSync(filePath, 'utf8'); - // check if child file also has includes - mdSrc = _replaceIncludeByContent(mdSrc, path.dirname(filePath), filePath, filesProcessed); - // remove one trailing newline, if it exists: that way, the included content does NOT - // automatically terminate the paragraph it is in due to the writer of the included - // part having terminated the content with a newline. - // However, when that snippet writer terminated with TWO (or more) newlines, these, minus one, - // will be merged with the newline after the #include statement, resulting in a 2-NL paragraph - // termination. - const len = mdSrc.length; - if (mdSrc[len - 1] === '\n') { - mdSrc = mdSrc.substring(0, len - 1); - } - } - - const labelStyle = `padding: 0 4px; font-size: 12px; font-weight: bold; color: #ffffff; background: #444444; opacity: .6;` - - const fileLabel = `
${includePath}
\n\n` - const fileExt = includePath.replace(/^.+\./, "") - - // replace include by file content - src = src.slice(0, cap.index) + fileLabel + "```" + fileExt + "\n" + mdSrc + "\n```" + src.slice(cap.index + cap[0].length, src.length); - } - return src; - }; - - const _includeFileParts = (state, startLine, endLine/*, silent*/) => { - state.src = _replaceIncludeByContent(state.src, options.getRootDir(options, state, startLine, endLine)); - }; - - md.core.ruler.before('normalize', 'include', _includeFileParts); -}; - -module.exports = include_plugin; \ No newline at end of file diff --git a/docs/markdown-it-code-include/package.json b/docs/markdown-it-code-include/package.json deleted file mode 100644 index 80c4eaa..0000000 --- a/docs/markdown-it-code-include/package.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "name": "markdown-it-code-include", - "version": "0.0.0", - "description": "A markdown-it plugin to include code blocks.", - "main": "./index.js", - "scripts": { - }, - "keywords": [ - "markdown", - "markdown-it", - "markdown-it-plugin", - "code-blocks", - "fence" - ], - "license": "MIT", - "dependencies": { - "node-html-parser": "^1.3.1" - }, - "devDependencies": { - "markdown-it": "^12.0.0", - "markdown-it-testgen": "^0.1.6", - "path": "^0.12.7" - } -} \ No newline at end of file diff --git a/docs/md/README.md b/docs/md/README.md index 59f2132..69874bf 100644 --- a/docs/md/README.md +++ b/docs/md/README.md @@ -52,56 +52,3 @@ - [charset](server-javascript-kontext/packages/charset.md) - [pdf](server-javascript-kontext/packages/pdf.md) - [debug](server-javascript-kontext/packages/debug.md) - -- [TibiCMS](../README.md) -- [Begriffe](begriffe.md) -- Servergrundlagen - - - [Konfiguration](servergrundlagen/konfiguration.md) - - [Entitäten](servergrundlagen/entitaeten.md) - - [SSR & htaccess](servergrundlagen/ssr&htaccess.md) - -- RestAPI Endpunkte - - [/login](restapi/login.md) - - [/user](restapi/user.md) - - [/project](restapi/project.md) - - [/\_/NS/COLLECTION](restapi/collection.md) - - [/_/NS/_/assets/ASSETSNAME](restapi/assets.md) -- Projekt Konfiguration - - [Ordnerstruktur](projektkonfig/ordnerstruktur.md) - - [config.yml](projektkonfig/config.yml.md) - - [collections](projektkonfig/collections.md) - - [fields](projektkonfig/collections/fields.md) - - [Datentypen](projektkonfig/collections/fields/datentypen.md) - - [Admin Widgets](projektkonfig/collections/fields/widgets.md) - - [· ContentBuilder](projektkonfig/collections/fields/widgets/contentbuilder.md) - - [indexes](projektkonfig/collections/indexes.md) - - [hooks](projektkonfig/collections/hooks.md) - - [imageFilter](projektkonfig/collections/imageFilter.md) - - [meta](projektkonfig/collections/meta.md) - - [jobs](projektkonfig/jobs.md) - - [assets](projektkonfig/assets.md) - - [dashboard](projektkonfig/dashboard.md) -- Admin Javascript Kontext - - [Allgemeines](admin-javascript-kontext/allgemeines.md) - - [collection.meta..eval](admin-javascript-kontext/collection.meta..eval.md) - - [field.meta..eval](admin-javascript-kontext/field.meta..eval.md) -- Server Javascript Kontext - - [Allgmeines](server-javascript-kontext/allgemeines.md) - - Packages - - [user](server-javascript-kontext/packages/user.md) - - [response](server-javascript-kontext/packages/response.md) - - [cookie](server-javascript-kontext/packages/cookie.md) - - [db](server-javascript-kontext/packages/db.md) - - [http](server-javascript-kontext/packages/http.md) - - [smtp](server-javascript-kontext/packages/smtp.md) - - [fs](server-javascript-kontext/packages/fs.md) - - [tpl](server-javascript-kontext/packages/tpl.md) - - [jwt](server-javascript-kontext/packages/jwt.md) - - [pdf](server-javascript-kontext/packages/pdf.md) - - [image](server-javascript-kontext/packages/image.md) - - [bcrypt](server-javascript-kontext/packages/bcrypt.md) - - [xml](server-javascript-kontext/packages/xml.md) - - [charset](server-javascript-kontext/packages/charset.md) - - [pdf](server-javascript-kontext/packages/pdf.md) - - [debug](server-javascript-kontext/packages/debug.md) diff --git a/docs/md/admin-javascript-kontext/allgemeines.md b/docs/md/admin-javascript-kontext/allgemeines.md deleted file mode 100644 index 5a10059..0000000 --- a/docs/md/admin-javascript-kontext/allgemeines.md +++ /dev/null @@ -1,47 +0,0 @@ -# Javascript-Kontext im tibi-admin - -Diverse `meta`-Angaben ermöglichen neben der eigentliche Angabe eines festen Wertes wie z.B: - -```yaml -defaultValue: "Hallo Welt" -``` - -auch die Angabe eines Javascript-Ausdrucks, der zur Laufzeit ausgewertet wird. Dieser Ausdruck wird in einem Javascript-Kontext clientseitig ausgeführt und ist mit diversen Variablen vorbelegt. -Die Angabe des Javascript-Codes erfolgt dabei meist mit dem `eval`-Attribut dessen Wert der String des Codes ist: - -```yaml -defaultValue: - eval: "new Date().toISOString().substr(0, 10)" -``` - -In den Fällen in denen ein Oneliner nicht ausreiched ist, bieten sich "selbst ausführende Funktionen" an, wie z.B.: - -```js -(function() { - return new Date().toISOString().substr(0, 10) -})() -``` - -Um diese im YAML unterzubringen nutzt man YAML-Multiline-Modifizierer: - -```yaml -defaultValue: - eval: | - (function() { - return new Date().toISOString().substr(0, 10) - })() -``` - -## Kontext-Variablen - -Der Javascript-Kontext ist mit folgenden Variablen standardmäßig angereichert: - -| Variable | Datentyp | Bedeutung | -| --- | --- | --- | --- | --- | -| `$namespace` | string | Der Namespacebezeichner des aktuellen Projekts | -| `$apiBase` | string | Basis-URL des API-Endpunkts | -| `$projectBase` | string | Basis-URL des Projekts-API-Endpunkts (`$apiBase`_/`$namespace`/) | -| `$auth` TODO | object | Das aktuelle Auth-Objetc des eingeloggten Benutzers | -| `$project` | object | Das aktuelle Projekt-Objekt, siehe [API /project](./../restapi/project.md) | - -Die `meta`-Daten der Collections und Fields bekommen in den Javascript-Kontext der `eval`-Eigenschaften noch jeweils zusätzliche Variablen. \ No newline at end of file diff --git a/docs/md/admin-javascript-kontext/collection.meta..eval.md b/docs/md/admin-javascript-kontext/collection.meta..eval.md deleted file mode 100644 index bed42ab..0000000 --- a/docs/md/admin-javascript-kontext/collection.meta..eval.md +++ /dev/null @@ -1,9 +0,0 @@ -# collection.meta..eval Javascript-Kontext - -Die `eval`-Properties der Eigenschaften (wo möglich) bekommen unterhalb des `collection.meta`-Objektes zusätzlich zu den bereits bekannten Variablen (siehe [Allgemeines zum Kontext](./allgemeines.md)) folgende Variable zur Verfügung: - - -| Variable | Datentyp | Bedeutung | -| --- | --- | --- | --- | --- | -| `$object` | object | Das aktuelle Kollektion-Objekt, siehe [API /collection](./../restapi/collection.md) | -| `$navigation` | object | Das aktuelle Navigation-Objekt, also den entsprechenden aktiven Eintrag aus `meta.subNavigation` | \ No newline at end of file diff --git a/docs/md/admin-javascript-kontext/field.meta..eval.md b/docs/md/admin-javascript-kontext/field.meta..eval.md deleted file mode 100644 index a9b449c..0000000 --- a/docs/md/admin-javascript-kontext/field.meta..eval.md +++ /dev/null @@ -1,104 +0,0 @@ -# field.meta..eval Javascript-Kontext - -Zuätzlich zu den allgemeinen und Kollektions-spezifischen Variablen, die im Javascript-Kontext der `eval`-Eigenschaften unterhalb des zur Verfügung stehen, gibt es noch folgende Variablen unterhalb des `field.meta`-Objektes für die Evaluierung: - -| Variable | Datentyp | Bedeutung | -| --- | --- | --- | --- | --- | -| `$field` TODO | object | Das aktuelle Feld-Objekt | -| `$method` | `"post"`/`"put"` | `"put"` bedeuted, dass der Datensatz gerade in Bearbeitung ist, `"post"` = Datensatz soll angelegt werden | -| `$this` | any | Der aktuelle Wert des Feldes | -| `$` | object | Das gesamte Objekt des Dokuments | -| `$parent` | object oder array | Der Wert des Elternknotens zum aktuellen Feld | -| `$stack` | array | Der Stack bis zum Ursprung des gesamten Objekts | - -## Der Stack - -Um die Abhängigkeiten zu bestimmten Werten ausdrücken zu können (z.B. in `meta.dependsOn.eval`), sind die Variablen `$this`, `$`, `$parent` und `$stack` verfügbar. - -Folgendes Beispiel eines Datensatzes verdeutlicht die Belegung, während die Maske zum Editieren im *tibi-admin* geöffnet ist: - - -```json -{ - "title": "Mein Datensatz", - "meta": { - "keywords": [ - { - "key": "pla", - "description": "Ah Plah" - }, - { - "key": "blup", - "description": "Buh Blup" - } - ] - } -} -``` - -wobei wir den `"key": "pla"` betrachten, wären die Inhalte der Variablen folgende: - -`$this`: - -plah - -`$parent` und `$stack[0]`: - -```json -{ - "key": "pla", - "description": "Ah Plah" -} -``` - -`$stack[1]`: - -```json -[ - { - "key": "pla", - "description": "Ah Plah" - }, - { - "key": "blup", - "description": "Buh Blup" - } -] -``` - -`$stack[2]`: - -```json -{ - "keywords": [ - { - "key": "pla", - "description": "Ah Plah" - }, - { - "key": "blup", - "description": "Buh Blup" - } - ] -} -``` - -`$stack[3]`, `entry` und `$`: - -```json -{ - "title": "Mein Datensatz", - "meta": { - "keywords": [ - { - "key": "pla", - "description": "Ah Plah" - }, - { - "key": "blup", - "description": "Buh Blup" - } - ] - } -} -``` diff --git a/docs/md/begriffe.md b/docs/md/begriffe.md deleted file mode 100644 index bd7b449..0000000 --- a/docs/md/begriffe.md +++ /dev/null @@ -1,53 +0,0 @@ -# Begriffe - -## TibiCMS - -Oberbegrff der den gesamten Stack, bestehend aus _tibi-server_ mit *MongoDB\*\* und *tibi-admin\* beschreibt. - -## tibi-server - -Rest-API Server des _TibiCMS_ Stack - -## tibi-admin - -Admin-UI/Backend zur Verwaltung der Inhalte im _tibi-server_ - -## API - -Schnittstelle (hier Rest-API) des _tibi-server_ (im Projektkontext ebenso für Projektspezifische Schnittstelle vrwendet) - -## project / Projekt - -Projekt innerhalb des _TibiCMS_ welches üblicherweise die Datengrundlage für eine Website im _TibiCMS_ ist - -## collection / Kollektion - -Datensammlung innerhalb eines Projekte (z.B. Newsartikel), in relationalen Datenbanken oft eine Tabelle - -## field / Feld - -Ein Datenfeld innerhalb einer Kollektion mit einem bestimmten Datentyp (z.B. string, number, ...) - -## validator / Validator - -Code oder Anweisung zur Überprüfung der Gültigkeit von Feld-Daten - -## filter / Filter - -Bildfilter zum Verkleinern oder Bearbeiten von Bildern beim Abruf von der API - -## projection / Projektion - -Abbildung der Daten auf ein Subset der Originaldaten - -## hook - -Vorerst nur in Javascript geschriebene Algorithmen, die die sich in die API einklinken um Daten oder Abläufe zu manipulieren - -## user / Benutzer - -Ein Benutzer mit Login innerhalb des _TibiCMS_ - -## permission / Berechtigung - -Berechtigung innerhalb eines Projektes, welche einem Benutzer zugeordnet werden kann diff --git a/docs/md/docpress.css b/docs/md/docpress.css deleted file mode 100644 index 30f1db9..0000000 --- a/docs/md/docpress.css +++ /dev/null @@ -1,34 +0,0 @@ -.title, h1, h2, h3, h4, h5, .link.title.link-index { - color: #531414!important; -} - -.link.title { - color: black!important; -} - -.toc-menu .link.-active, .toc-menu .hlink.-active { - box-shadow: inset -2px 0 #7c2828!important; -} - -ul.heading-list .hlink, ul.heading-list .hlink:visited { - color: #414141!important; -} - -.menu-toggle:hover, .footer-nav a:hover, .footer-nav a:hover:after, .footer-nav a:hover:before { - color: #7c2828!important; -} - -.code-file-label { - background: #dcd9d9!important; - color: #3a0909!important; - right: 0px; - opacity: 1!important; -} - -a { - color: #7c2828!important; -} - -code { - color:#3a0909!important; -} \ No newline at end of file diff --git a/docs/md/github-dark-dimmed.css b/docs/md/github-dark-dimmed.css deleted file mode 100644 index 7da106d..0000000 --- a/docs/md/github-dark-dimmed.css +++ /dev/null @@ -1,130 +0,0 @@ -/*! - Theme: GitHub Dark Dimmed - Description: Dark dimmed theme as seen on github.com - Author: github.com - Maintainer: @Hirse - Updated: 2021-05-15 - - Colors taken from GitHub's CSS -*/ - -.hljs, pre, pre code { - color: #adbac7!important; - background: #22272e!important; -} - -.hljs-doctag, -.hljs-keyword, -.hljs-meta .hljs-keyword, -.hljs-template-tag, -.hljs-template-variable, -.hljs-type, -.hljs-variable.language_, -.pl-k { - /* prettylights-syntax-keyword */ - color: #f47067!important; -} - -.hljs-title, -.hljs-title.class_, -.hljs-title.class_.inherited__, -.hljs-title.function_i, -.pl-s { - /* prettylights-syntax-entity */ - color: #dcbdfb!important; -} - -.hljs-attr, -.hljs-attribute, -.hljs-literal, -.hljs-meta, -.hljs-number, -.hljs-operator, -.hljs-variable, -.hljs-selector-attr, -.hljs-selector-class, -.hljs-selector-id, -.pl-e { - /* prettylights-syntax-constant */ - color: #6cb6ff!important; -} - -.hljs-regexp, -.hljs-string, -.hljs-meta .hljs-string, -.pl-s { - /* prettylights-syntax-string */ - color: #96d0ff!important; -} - -.hljs-built_in, -.hljs-symbol, -.pl-c1 { - /* prettylights-syntax-variable */ - color: #f69d50!important; -} - -.hljs-comment, -.hljs-code, -.hljs-formula, -.pl-c { - /* prettylights-syntax-comment */ - color: #768390!important; -} - -.hljs-name, -.hljs-quote, -.hljs-selector-tag, -.hljs-selector-pseudo { - /* prettylights-syntax-entity-tag */ - color: #8ddb8c!important; -} - -.hljs-subst { - /* prettylights-syntax-storage-modifier-import */ - color: #adbac7!important; -} - -.hljs-section { - /* prettylights-syntax-markup-heading */ - color: #316dca!important; - font-weight: bold!important; -} - -.hljs-bullet { - /* prettylights-syntax-markup-list */ - color: #eac55f!important; -} - -.hljs-emphasis { - /* prettylights-syntax-markup-italic */ - color: #adbac7!important; - font-style: italic!important; -} - -.hljs-strong { - /* prettylights-syntax-markup-bold */ - color: #adbac7!important; - font-weight: bold!important; -} - -.hljs-addition { - /* prettylights-syntax-markup-inserted */ - color: #b4f1b4!important; - background-color: #1b4721!important; -} - -.hljs-deletion { - /* prettylights-syntax-markup-deleted */ - color: #ffd8d3!important; - background-color: #78191b!important; -} - -.hljs-char.escape_, -.hljs-link, -.hljs-params, -.hljs-property, -.hljs-punctuation, -.hljs-tag { - /* purposely ignored */ -} \ No newline at end of file diff --git a/docs/md/projektkonfig/api-ordner.png b/docs/md/projektkonfig/api-ordner.png deleted file mode 100644 index dc45560..0000000 Binary files a/docs/md/projektkonfig/api-ordner.png and /dev/null differ diff --git a/docs/md/projektkonfig/assets.md b/docs/md/projektkonfig/assets.md deleted file mode 100644 index 25d0b37..0000000 --- a/docs/md/projektkonfig/assets.md +++ /dev/null @@ -1,6 +0,0 @@ -# assets - -Folgende Angaben sind in der `assets`-Sektion der [config.yml](./config.yml.md) geführt als Liste möglich: - - -!!!include(../api/assets/demoassets.yml)!!! \ No newline at end of file diff --git a/docs/md/projektkonfig/collections.md b/docs/md/projektkonfig/collections.md deleted file mode 100644 index c1bc6bf..0000000 --- a/docs/md/projektkonfig/collections.md +++ /dev/null @@ -1,17 +0,0 @@ -# collections - -Die Konfiguration einer Kollektion sollte zur besseren Übersicht innerhalb einer gesonderten Datei im Unterorder **api/collections/** erfolgen und via `!include` in die [config.yml](./config.yml.md) eingebunden werden. - -## Grundlegender Aufbau - -Eine solche Datei hat folgenden Aufbau: - -!!!include(../api/collections/democol.yml)!!! - -### siehe - -- [fields](./collections/fields.md) -- [indexes](./collections/indexes.md) -- [hooks](./collections/hooks.md) -- [imageFilter](./collections/imageFilter.md) -- [meta](./collections/meta.md) \ No newline at end of file diff --git a/docs/md/projektkonfig/collections/dependsOn.webm b/docs/md/projektkonfig/collections/dependsOn.webm deleted file mode 100644 index 144b7da..0000000 Binary files a/docs/md/projektkonfig/collections/dependsOn.webm and /dev/null differ diff --git a/docs/md/projektkonfig/collections/fields.md b/docs/md/projektkonfig/collections/fields.md deleted file mode 100644 index 2694c0f..0000000 --- a/docs/md/projektkonfig/collections/fields.md +++ /dev/null @@ -1,237 +0,0 @@ -# fields - -Felder im _tibi-server_ müssen einen bestimmten Datentyp haben. Über den _tibi-admin_ können die Felder über Widgets in unterschiedlichen Ausprägungen dargestellt werden (view-Widgets), bzw. dem Benutzer eine Eingabe abverlangen (input-Widgets). - -Es gibt grundlegende Angaben, die jedes Feld haben muss um vom _tibi-server_ akzeptiert zu werden. Darüber hinaus kann auch jedes Feld ein `meta` Objekt haben, was dem _tibi-admin_ mitteilt, wie er dieses Feld für Ausgabe und Eingabe behandel soll. - -Zunächst folgt der grundlegende Aufbau des Feld-Objektes: - -!!!include(../api/collections/fields/date.yml)!!! - -## validator Objekt - - - -Wie im Beispiel von **fields/date.yml** unter `validator` zu sehen ist, wird dort ein Datum nach dem aktuellen erwartet. Wie der Validator sich auf die UI auswirkt, ist im obigen Video zu sehen. - -Das `validator` Objekt wird _tibi-server_ seitig genutzt um die Daten zu validieren. Da das `validator` Objekt dem _tibi-admin_ ebenso zur Verfügung steht, kann vorab eine client-seitige Validierung zusätzlich durchgeführt werden. - -Attribute des Objektes: - -| Attribut | Datentyp | Beschreibung | -| ----------- | -------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `required` | boolean | wenn `true`, dann ist zwingend eine Eingabe zu diesem Feld nötig | -| `allowZero` | boolean | in Kombination mit `required: true`, wenn `true`, dann ist der jeweilige "Null"-Wert des Datentyps erlaubt

z.B. `type: string` erlaubt den leeren String und `type: number` erlaubt `0` | -| `eval` | string | Javascript-Code der zu true evaluieren muss um den Wert des Feldes als gültig zu definieren | - -### eval-Attribut - -Der Javascript-Code in diesem Attribut kann folgende Rückgabe-Werte haben: - -| Wert | Bedeutung | -| -------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -| `true` | Der Wert des Feldes ist gültig | -| `false` | Der Wert des Feldes ist ungültig | -| `"Text"` | Wird ein String zurückgegeben ist, wird der Wert es Feldes ebenso als ungültig erachtet und der String selbst ist eine benutzerdefinierte Fehlermeldung, die in der Serverantwort gelesen werden kann. | - -Da der `eval` Code serverseitig immer ausgeführt wird und ein Fehlschlag zwangsläufig zum Abbruch der Serveraktion führt, ist es wichtig, dass der Validator berücksichtigt wird. - -Optional kann der Code auch zusätzlich über eine Lauffähigkeit ohne Fehler (z.B. keine Verwendung nicht vorhandender Kontext-Variablen oder Verwendung von `try ... catch`) im _tibi-admin_ verfügen. Das hat den Vorteil, dass eine Vorab-Validierung stattfindet, bevor der Datensatz an der Server gesendet wird. - -Sollte der `eval` Code im _tibi-admin_ nicht lauffähig sein (nicht abgefangene Exception), wird der Validator clientseitig ingoriert und nur die serverseitige Prüfung beeinflusst die Aktion. - -#### siehe - -- [Server Javascript Kontext](./../../server-javascript-kontext/allgemeines.md) - -## dependsOn - - - -Obige Darstellung wie im Video wird beispielsweise durch folgende Feld-Konfiguration erreicht: - -```yaml -# in einer Kollektions-Konfiguration -fields: - - name: type - type: string - meta: - label: - de: Typ - en: Type - widget: select - choices: - - name: - de: Standardseite - en: Standard page - id: page - - name: - de: News - en: News - id: news - - - name: title - type: string - meta: - label: - de: Titel - en: Title - - - name: date - type: date - meta: - label: - de: Titel - en: title - widget: date - defaultValue: - eval: new Date() - dependsOn: - eval: $parent?.type == "news" - -``` - -`meta.dependsOn` kann als Objekt mit `eval`-Attribut für Javascript oder als `string` mit dem Feldnamen (Punktschreibweise, z.B. `"additionalData.author"`) angegeben werden. - -Wird der Feldname verwendet wird nur geprüft, ob das Feld belegt ist. TODO - -Die `eval` Variante verwendet als Javascript-Kontext Variablen die auf folgenden Seite beschrieben werden: - -- [Admin Javascript Kontext](./../../admin-javascript-kontext/allgemeines.md) -- [collection.meta..eval](./../../admin-javascript-kontext/collection.meta..eval.md) -- [field.meta..eval](./../../admin-javascript-kontext/field.meta..eval.md) - -Die Rückgabe des Javascript-Codes beeinflusst die Einblendung des betroffenen Feldes in folgender Weise: - -| Rückgabe | Bedeutung | -| -------- | -------------------------- | -| `true` | Das Feld wird angezeigt | -| `false` | Das Feld wird ausgeblendet | - -## defaultValue - -Für die Vorlegung neu anzulegender Datensätze kann in `field.meta.defaultValue` direkt der Standardwert hinterlegt werden, oder über `field.meta.defaultValue.eval` ein Javascript-Code angegeben werden, der den Wert ermittelt. Die Rückgabe des Javascript-Codes, sowie auch die direkte Vergabe des Wertes muss dem Datentyp des Feldes entsprechen. - -Der Javascript-Kontext ist der gleiche wie bei `field.meta.dependsOn.eval`. - -## containerProps - -Um Felder auf breiten Bildschirmen eine schmalere Breite zu geben, wird das containerProps Attribut empfohlen. Es hat ein class Attribut, welches klassen ins HTML injiziert. Es gibt außerdem noch das Layout attribut mit breakBefore und breakAfter, welche dafür sorgen, dass vorher bzw. nachher keine weiteren HTML Elemente platz finden. Hier ist des weiteren das size Objekt drin, welches 3 attribute hat. Die attribute sollten col-1 bis col-12 beeinhalten, diese klassen werden ins html injiziert, können also dem zufolge auch misbraucht werden. Die klassen bei den attributen werden bei unterschiedlichen Bildschirmbreiten aktiv. - -```yaml -containerProps: - #optional class prop - layout: - breakBefore: false - breakAfter: false - size: - default: "col-8" - small: "col-12" - large: "col-4" -``` - -## inputProps - -Wenn man das Input element direkt bearbeiten möchte (Bspw. readonly oder ähnliches), so kann man diese hier als Objekt übergeben: - -## hide - -möchte man, dass ein bestimmtes Feld nicht im TibiAdmin sichtbar ist, so muss man die property hide auf true setzen. - -```yaml -inputProps: { readonly: true, placeholder: { de: "Wert wird automatisch gesetzt", en: "Value is set automatically" } } -``` - -## direction - -Für type Object[] gibt es im Meta objekt das direction attribut, dies kann entweder: - -- `horizontal`: flex-direction: row - oder -- `vertical`: flex-direction: column - annehmen. - -## metaElements - -Möchte man bestimmte Elemente über das Zahnrad greifbar machen (bei type: Object[]), so kann man dies über dieses Attribut tun. Es ist entweder über eine Liste, oder über tablist möglich. -!!!include(../api/collections/fields/info.yml)!!! - -## folding - -Das folding Objekt ist ebenfalls ein Teil im Meta object und dient dazu, type ObjectArray einen Wert in den Header im HTML einzuschreiben (von den einzelnen Objekten). Es wird vorallem dazu genutzt, die Rows bzw. Columns der Website rein zu rendern, um praktisch ein direktes Prview zu haben. Ebenfalls gibt es das force attribut, welches dafür sorgt, dass die objekte IMMER geöffnet sind und man sie nicht schließen kann. Sinnvoll für Rows. die Generelle struktur verdeutlicht folgendes Code Beispiel: - -```yaml -folding: - force: false - previewUnfolded: - raw: true - eval: | - //js - (() => { - return $this?.title ? "

" + $this.title + "

" : "" - })() - //!js - previewFolded: - eval: | - //js - (async () => { - const { getRenderedElement, Row } = await import($projectBase + "_/assets/dist/admin.mjs") - - const container = getRenderedElement(Row, { - props: { - row: Object.assign({}, $this), - contentId: $?.id, - apiBaseURL: $projectBase, - }, - addCss: [ - $projectBase + "_/assets/dist/index.css", - $projectBase + "_/assets/dist/admin.css", - ], - }) - let style = "max-width: 1220px;" - container.style = style - return container - })() - //!js -``` - -Hierbei ist raw dafür da, das ganze als HTML direkt zu rendern, wenn es true ist. Der prefiewFolded bereich rendert letzten endes die Seite selbst, für diese Funktionallität ist mehreres notwendig. - -- `Row und Column Komponenten`: Dies sind letzenendes jene komponenten die gerendert werden, daher muss man sie natürlich auch bereits programmiert haben. -- `admin.ts file`: Dieses file wird im src Folder platziert und durch ES-Build über den oben genutzen Pfad verfügbar gemacht. Hier ist ein Beispiel: - -```ts -import Row from "./components/Row.svelte" -import Col from "./components/Col.svelte" - -function getRenderedElement(component, options?: { props: { [key: string]: any }; addCss?: string[] }) { - const el = document.createElement("div") - el.attachShadow({ mode: "open" }) - - const target = document.createElement("body") - el.shadowRoot.appendChild(target) - - options?.addCss?.forEach((css) => { - const link = document.createElement("link") - link.rel = "stylesheet" - link.href = css - link.type = "text/css" - el.shadowRoot.appendChild(link) - }) - - new component({ - target: target, - props: options?.props, - }) - - return el -} - -export { getRenderedElement, Row, Col } -``` - -Das props Attribut nimmt ein Objekt entgegen, welches als keys die namen hat, wie in der svelte Komponente über export exportiert wurde. Die Komponenten werden in eine Shadow Dom geladen, um sie seperat vom restlichen code halten zu können. diff --git a/docs/md/projektkonfig/collections/fields/datentypen.md b/docs/md/projektkonfig/collections/fields/datentypen.md deleted file mode 100644 index 0b41cae..0000000 --- a/docs/md/projektkonfig/collections/fields/datentypen.md +++ /dev/null @@ -1,43 +0,0 @@ -# Datentypen - -Via `type` wird der Datentyp des Feldes definiert. Diese Angaben sind für den Tibi Server relevant. Folgende Datentypen sind möglich: - -## string - -String wird für Zeichenketten verwendet. Das Standardwidget ohne weitere Angabe ist bei der Ausgabe die direkte Textausgabe und bei der Eingabe ein HTML `` Element mit dem Attribut `type="text"`. - -## number - -Number wird sowohl für ganze Zahlen, wie auch für Gleitkommawerte definiert. Auch hier ist das Standard-Widget für die Eingabe ein HTML `` Element, allerdings mit dem Attribut `type="number"`. - -## boolean - -Ein boolcher Wert, also `true` oder `false`, wird über den Typ `"boolean"` definiert und standardmäßig als Checkbox dargestellt. - -## date - -`"date"` als Datentyp kann sowohl Datumsangabe mit, als auch ohne Uhrzeit aufnehmen. Das Standardwidget ist die einfache Datumseingabe ohne Uhrzeit. - -## file - -Der Datentyp `"file"` ist für Dateiuploads vorgesehen. Es daher standardmäßig ein Datei-Auswahl-Dialog als Widget für die Eingabe angeboten. - -## string[] - -Für `"string[]` Arrays ist die Angabe des Widgets zwingend notwendig. - -## number[] - -Auch für `"number[]"` Arrays wird die Widget-Angabe erwartet. - -## object - -`"object"` ist ein spezieller Datentyp der zur Strukturierung der API und der Eingabe dient. Dieser Datentyp fasst `subFields` zusammen. - -## object[] - -Wie `"object"` fasst auch das `"object[]"` Array `subFields` zusammen. Diese allerdings als Liste von Objekten, anstatt als Einzelobjekt. - -## any - -Felder vom Typ `"any"` können beliebige Daten aufnehmen. Die Validierung schlägt auf Basis der Typ-Validierung hier nie fehl. diff --git a/docs/md/projektkonfig/collections/fields/defaultArray.png b/docs/md/projektkonfig/collections/fields/defaultArray.png deleted file mode 100644 index a4d9ac6..0000000 Binary files a/docs/md/projektkonfig/collections/fields/defaultArray.png and /dev/null differ diff --git a/docs/md/projektkonfig/collections/fields/foreign.png b/docs/md/projektkonfig/collections/fields/foreign.png deleted file mode 100644 index 8640f07..0000000 Binary files a/docs/md/projektkonfig/collections/fields/foreign.png and /dev/null differ diff --git a/docs/md/projektkonfig/collections/fields/widgets.md b/docs/md/projektkonfig/collections/fields/widgets.md deleted file mode 100644 index bb00939..0000000 --- a/docs/md/projektkonfig/collections/fields/widgets.md +++ /dev/null @@ -1,97 +0,0 @@ -# Widgets - -Die Verwendung von Widgets innerhalb der Anwendung tibi-admin dient zur Handhabung von Dateninputs und -outputs. Das genutzte Widget wird über das meta.widget Feld in der Konfiguration spezifiziert. Dabei wird der Name des Widgets als Textzeichenkette (String) angegeben. - -Es ist zu beachten, dass nicht jedes Widget für jeden Datentyp geeignet ist. Im Weiteren werden die kompatiblen Datentypen für jedes Widget aufgeführt. Zusätzlich werden spezielle Konfigurationsmöglichkeiten für jedes Widget erläutert. - -## Texteingabefeld-Widgets: string / text / input - -Diese Bezeichnungen stehen alle für dasselbe Widget. Es handelt sich hierbei um ein Texteingabefeld. Dieses Widget wird für den Datentyp String verwendet. Sollte ein größeres Textfeld (Textarea) anstatt eines einfachen Eingabefeldes (Input) gewünscht sein, so kann dies erreicht werden, indem das Attribut multiline im inputProps Objekt auf true gesetzt wird. -!!!include(../api/collections/fields/title.yml)!!! - -## Numerische Eingabefeld-Widgets: number / int / integer / float / double - -Diese unterschiedlichen Bezeichnungen stehen alle für dasselbe Widget. Hierbei handelt es sich um ein Eingabefeld für Zahlen. Es wird für den Datentyp Number verwendet. -!!!include(../api/collections/fields/age.yml)!!! - -## Auswahl-Widgets: boolean / bool / check / switch / checkbox - -Diese verschiedenen Bezeichnungen repräsentieren dasselbe Widget. Dieses Widget wird in Form einer Auswahlbox (Checkbox) dargestellt und wird für den Datentyp Boolean verwendet. -!!!include(../api/collections/fields/isEmployed.yml)!!! - -## Auswahl-Widgets für mehrere Optionen: select / selectArray - -Diese beiden Widgets sind im Prinzip das Gleiche, nur mit unterschiedlichen Namen. Intern wird die Unterscheidung zwischen Mehrfachauswahl und einfacher Auswahl anhand des Datentyps getroffen. Bei Datentypen mit einem "[]" am Ende wird die Mehrfachauswahl verwendet. Der Einsatz von selectArray ist für String-Arrays vorgesehen, select für einzelne Strings. Aktuell sind nur Strings möglich, da das Element alle Werte zu Strings konvertiert. Anpassungen sind jedoch bei Bedarf möglich. Es ist wichtig zu beachten, dass das name-Attribut den visuell dargestellten Wert darstellt, während die id den gespeicherten Wert repräsentiert. Wenn choices als Objekt angegeben wird, wird eine Anfrage an den spezifizierten Endpunkt mit den angegebenen Parametern gesendet und das gemappte name-Attribut davon angezeigt. Die id der ausgewählten Elemente wird intern als String gespeichert. Weiterhin ist die Angabe von chipStyle: (style) möglich. Dieser wird als Stil in das Element gerendert und ermöglicht zum Beispiel die visuelle Darstellung von Flaggen. -!!!include(../api/collections/fields/gender.yml)!!! - -## Bezug zu anderen Datenbankeinträgen: foreignKey - -Dieses Widget wird verwendet, um eine Referenz zu einem anderen Datenbankeintrag herzustellen. Neben der Angabe von widget: foreignKey gibt es das foreign Attribut, welches die referenzierte Sammlung (collection) angibt. Zudem gibt es ein id Feld, welches die spezifische id für die Sicherheitsüberprüfung angibt. Wird hier "id" angegeben, wird es automatisch auf \_id gemappt, da dies der Name des ID-Feldes in MongoDB ist. Des Weiteren gibt es eine subNavigation, die die Struktur des Modals spezifiziert und neben dem Üblichen a) modal heißen sollte (Konvention) und b) einen defaultCallback haben sollte, der ausgelöst wird, wenn auf den Eintrag geklickt wird. Für die Auswahl gibt es auf dem Fensterobjekt (window Objekt) eine selectEntry Methode, die den ForeignEntry auswählt. Es gibt auch ein sort Attribut, falls die Auswahlmöglichkeiten sortiert werden sollen. Dieses wird einfach an die Anfrage angehängt. Wenn die zurückgegebenen Felder eingeschränkt werden sollen, kann eine Projektion (projection) für die Sammlung spezifiziert werden. Schließlich gibt es das render Attribut, welches ein Objekt ist und ein eval Feld enthält. Hier kann man unter anderem auf $foreignEntry und somit auf alle Werte der ausgewählten Projektion zugreifen. Der zurückgegebene Wert wird schließlich gerendert. Wenn das HTML roh gerendert werden soll, kann das raw Attribut auf true gesetzt werden. - -!!!include(../api/collections/fields/image.yml)!!! -!!!include(../api/collections/medialib.yml)!!! - -Setzt man defaultCollectionViews auf true, so könnte das ergebnis wie folgt aussehen: -![defaultCollectionViews auf ture](foreign.png) - -## Datums-Widgets: date / dateTime - -Diese beiden Widgets können für den Typ "date" verwendet werden. date erzeugt ein Widget (nur das Datum), während dateTime ein Widget erzeugt (Datum und Uhrzeit). -!!!include(../api/collections/fields/date.yml)!!! - -## Textbearbeitungs-Widgets: richtext / html - -Diese beiden Bezeichnungen stehen für dasselbe Widget. Es handelt sich um ein Textfeld (Textarea) mit erweiterten Bearbeitungsmöglichkeiten (ähnlich wie in Word), wobei die Eingabe als HTML in einen String geladen wird. Das HTML kann auch manuell angepasst werden, indem die "source" Checkbox aktiviert wird. -!!!include(../api/collections/fields/description.yml)!!! - -## Datei-Upload-Widgets: file / image / mediaLibraryFile - -Diese verschiedenen Bezeichnungen stehen alle für das gleiche Widget. Es wird für den Datentyp File verwendet. -!!!include(../api/collections/fields/profilePic.yml)!!! - -## Mehrfachauswahl-Widgets: checkboxArray - -Hierbei handelt es sich um eine Reihe von Auswahlboxen (Checkboxen). Jede einzelne Auswahlbox spiegelt das Array choices wider. Dies entspricht genau dem, was auch im selectArray geschieht, nur dass es hier anders dargestellt wird. -!!!include(../api/collections/fields/skills.yml)!!! - -## Eingabe mit Vorschlägen: chipArray - -Dieses Widget hat eine ähnliche Funktion wie select, wird jedoch visuell anders dargestellt. Es bietet ein Eingabefeld, in dem nur Elemente akzeptiert werden, wenn ein Objekt im choices Array den gleichen name Wert wie das Eingabeelement hat. Darüber hinaus kann man im meta Objekt autocomplete auf true setzen, um die Autovervollständigung zu aktivieren. Dadurch werden dem Benutzer die möglichen Einträge angezeigt und können direkt ausgewählt werden, was die Benutzerfreundlichkeit erhöht. -!!!include(../api/collections/fields/tags.yml)!!! - -## object - -Dieses Widget erfordert die weitere Angabe von subFields, die außerhalb des meta Objekts spezifiziert werden müssen. Hier werden die Felder angegeben, die in diesem Objekt enthalten sein sollen. -!!!include(../api/collections/fields/info.yml)!!! - -## objectArray / object[] - -Genau das gleiche wie object, nur das hier mehrere Objekte erstellt werden können. - -## grid - -Für Datentyp object[], dient als übersichtliche object[] alternative, speziell für pagebuilder entwickelt. -!!!include(../api/collections/fields/employmentDetails.yml)!!! - -## jsonField - -Wird für Daten genutzt, wo man die Struktur nicht absehen kann. -!!!include(../api/collections/fields/additionalData.yml)!!! - -## tabs - -Dieses Widget hat im Prinzip die gleiche Funktion wie dasjenige in der Collection Meta-Konfiguration, ist jedoch etwas anders strukturiert. Ähnlich wie beim object Widget werden subFields verwendet, wobei das label von jedem subField der jeweilige Tab-Name ist. Würde man type auf number setzen, so hätte man in diesem Fall einfach einen Tab mit dem Namen "xyz" und ein number Feld im Tab mit dem gleichen Namen. Sinnvoller ist es natürlich, type auf object zu setzen, um mehrere Felder in einen Tab zu packen. - -!!!include(../api/collections/fields/emplymentDetails.yml)!!! - -# useDefaultArray - -Wenn ein belibiger Datentyp in einem Array gefordert ist, so kann man jedes beliebige Widget dafür nutzten, indem man useDefaultArray: true benutzt. Damit kann jedes widget in das defaultArray widget gepackt werden. Wird Object[] in kombination mit useDefaultArray verwendet, so wird die einfache Objektdarstellung in diese darstellung implementiert. - -![useDefaultArray auf true](defaultArray.png) - -!!!include(../api/collections/fieldLists/useDefaultArray.yml)!!! - -## contentbuilder - DEPRECATED - -siehe: [ContentBuilder](./widgets/contentbuilder.md) diff --git a/docs/md/projektkonfig/collections/fields/widgets/contentbuilder-medialib.webm b/docs/md/projektkonfig/collections/fields/widgets/contentbuilder-medialib.webm deleted file mode 100644 index 8b7a0a0..0000000 Binary files a/docs/md/projektkonfig/collections/fields/widgets/contentbuilder-medialib.webm and /dev/null differ diff --git a/docs/md/projektkonfig/collections/fields/widgets/contentbuilder-module.webm b/docs/md/projektkonfig/collections/fields/widgets/contentbuilder-module.webm deleted file mode 100644 index 4963686..0000000 Binary files a/docs/md/projektkonfig/collections/fields/widgets/contentbuilder-module.webm and /dev/null differ diff --git a/docs/md/projektkonfig/collections/fields/widgets/contentbuilder.md b/docs/md/projektkonfig/collections/fields/widgets/contentbuilder.md deleted file mode 100644 index e2e2e11..0000000 --- a/docs/md/projektkonfig/collections/fields/widgets/contentbuilder.md +++ /dev/null @@ -1,35 +0,0 @@ -# contentbuilder - -> Der ContentBuilder ist ein Drittanbieter-Produkt und steht nicht in jeder Lizenz zur Verfügung. Bitte kontaktieren Sie uns, wenn Sie Interesse an diesem Widget haben. - -Für die Gestaltung von HTML-Inhalten ist der ContentBuilder eine einfache und intuitive Lösung. Es sind Layout-Hilfmittel wie Spalten und Zeilen ebenso verfügbar, wie die Möglichkeit Dateien (Bilder, Video, Downloads) direkt in den HTML-Code einzubinden. - -Wie der ContentBuilder an einem Feld konfiguriert wird verdeutlicht folgendes Beispiel: - -!!!include(../api/collections/fields/content.yml)!!! - -## Mediathek Kollektion - - - -Wie aus der obigen Definition unterhalb von z.B. "imageSelect" zu lesen, bedarf es einer eigenen Kollektion für Bilder und andere Dateien. Diese Kollektion könnte wie folgt aussehen: - -> Die Bedeutung der hier nicht beschriebenen Eigenschaften ist unter [collections](./../../../collections.md) zu finden. - -!!!include(../api/collections/medialib.yml)!!! - -## Module (customTags) - -Die Einbindung des konfigurierten Beispiel-Moduls aus obiger Definition erfolgt im ContentBuilder wie im folgenden Video zu sehen ist: - - - -Wie oben schon erwähnt, sind die `placeholder` frei wählbar. Eine HTML5-Schreibweise bietet sich aber sowohl für das Styling, als auch für die spätere Einbindung in ein Frontend an. - -In unserem Beispiel hier wurden zusättzlich zum eigentlichen Modul-Tag noch Attribute (`title` und `description`) definiert. Diese können dann im Frontend das eigentliche Modul beeinflussen. - -Im Frontend könnte ein Modul dann später als "Custom Element" implementiert werden oder es wird ein HTML-Parser verwendet, der die Tags durch eigene Komponenten ersetzt, wie er im Anhang [TODO] zu finden ist. diff --git a/docs/md/projektkonfig/collections/hooks.md b/docs/md/projektkonfig/collections/hooks.md deleted file mode 100644 index aed5a71..0000000 --- a/docs/md/projektkonfig/collections/hooks.md +++ /dev/null @@ -1,104 +0,0 @@ -# hooks - -Hooks in Tibi sind spezielle Funktionen, die bestimmte Teile der HTTP-Anfragen und -Antworten manipulieren können. Sie erlauben Ihnen, den Datenfluss und die Abläufe zu bestimmten Zeitpunkten im Lebenszyklus einer HTTP-Anfrage zu beeinflussen. - -Jeder Hook ist einer bestimmten HTTP-Methode (z.B. GET, POST, PUT, DELETE) und einem bestimmten Schritt in diesem Prozess zugeordnet. Die verfügbaren Schritte variieren je nach Methode und können beinhalten: - -- read (GET) -- return (GET, POST, PUT, DELETE) -- bind (POST, PUT) -- validate (POST, PUT) -- create (POST) -- update (PUT) -- delete (DELETE) - -Jeder dieser Schritte wird an einem spezifischen Punkt während der Verarbeitung einer HTTP-Anfrage oder -Antwort ausgeführt. Die genaue Reihenfolge und das Verhalten der Hooks ist in der jeweiligen Methode definiert. - -## Hook Implementierung - -Jeder Hook ist in einer separaten JavaScript-Datei implementiert, die im hooks-Ordner Ihres Projekts gespeichert ist. Der Pfad zu dieser Datei wird in der jeweiligen collection yml Datei angegeben. - -Ein Hook ist eine Funktion, die eine context-Variable zur Verfügung hat, welche Informationen und Methoden für die aktuelle Anfrage bereitstellt. Der Rückgabewert dieser Funktion wird verwendet, um die Verarbeitung der Anfrage oder Antwort zu beeinflussen. - -Zwei spezielle Typen, `HookResponse` und `HookException`, werden in Hooks verwendet, um Daten zu manipulieren und Fehler zu signalisieren. - -### HookResponse - -Die HookResponse ist das Objekt, das von einem Hook zurückgegeben wird. Es kann verwendet werden, um Daten zu manipulieren, die in die Datenbank geschrieben oder an den Benutzer zurückgegeben werden. - -Es beinhaltet: - -- `data`: Daten, die in die Datenbank geschrieben werden. Sie können diese Daten im Hook ändern, bevor sie in die Datenbank geschrieben werden. -- `results`: Daten, die an den Benutzer zurückgegeben werden. Sie können diese Daten im Hook ändern, bevor sie an den Benutzer zurückgegeben werden. - -### HookException - -Eine HookException ist ein Fehler, der in einem Hook geworfen werden kann. Sie können eine HookException verwenden, um einen Fehler zu signalisieren und die Verarbeitung der Anfrage oder Antwort zu stoppen. - -Eine HookException kann folgende Eigenschaften haben: - -- `status`: - HTTP-Statuscode des Fehlers. -- `html`: - HTML-Nachricht des Fehlers. -- `message`: - Textnachricht des Fehlers. -- `bytes`: - Binäre Daten des Fehlers. -- `json`: - JSON-Daten des Fehlers. -- `file`: - Dateipfad der Fehlermeldung. -- `log`: - Wenn true, wird der Fehler im Serverprotokoll aufgezeichnet. - -### Hook Beispiel - -Hier ist ein Beispiel für einen Hook, der die GET-Methode bearbeitet: - -```js -;(function () { - /** @type {HookResponse}*/ // @ts-ignore - let hookResponse - let request = context.request() - if (request.query("rateIt")) { - let orderNumber - orderNumber = Number(request.query("orderNumber")) - - if (isNaN(orderNumber)) - throw { - status: 400, - message: "Invalid order number.", - } - - /** @type {Order} */ // @ts-ignore - let order = context.db.find("order", { - filter: { - sequence: orderNumber, - }, - })[0] - - if (!order) - throw { - status: 400, - message: "No entry with this order number.", - } - - if (order.deliveryAddress.postcode != request.query("postalcode")) - throw { - status: 403, - message: "Error", - } - - hookResponse = { - filter: { - orderId: order.id, - }, - } - - return hookResponse - } -})() -``` - -In diesem Beispiel wird zuerst die Anfrage analysiert und eine Bedingung überprüft. Wenn die Bedingung erfüllt ist, wird ein bestimmtes Element in der Datenbank gesucht. Wenn das Element gefunden wird und bestimmte Kriterien erfüllt, wird ein HookResponse-Objekt erstellt und zurückgegeben. Wenn während des Prozesses Fehler auftreten, werden entsprechende HookException-Objekte geworfen. diff --git a/docs/md/projektkonfig/collections/imageFilter.md b/docs/md/projektkonfig/collections/imageFilter.md deleted file mode 100644 index 267aef4..0000000 --- a/docs/md/projektkonfig/collections/imageFilter.md +++ /dev/null @@ -1,30 +0,0 @@ -# imageFilter Objekt - -Die Bildmanipulation von hochgeladen Bildern zu einer Kollektion kann über das `imageFilter` Objekt definiert werden. -Der Filter wird angewandt, wenn an die Bild-URL der Parameter `filter=...` angehangen wird. - -Der Prozess selbst erfolgt beim ersten Abruf des Bildes und wird zwischengespeichert. - -Eine beispielhafte Konfiguration, die die Bilder nur verkleinert sieht so aus: - -!!!include(../api/collections/democol/imageFilter.yml)!!! - -Folgende Attribute können Filter-Eintrage haben, wobei `fit` und `fill` exklusiv sind: - -| Attribut | Typ | Beschreibung | -| --- | --- | --- | -| `fit` | boolean | passt das Bild in ein Rechteck ein | -| `fill` | boolean | streckt/staucht das Bild, so dass es das Rechteck komplett ausfüllt | -| `height` | number | Höhe des Rechtecks | -| `width` | number | Breite des Rechtecks | -| `blur` | number | Verwischungsgrad | -| `brightness` | number | Helligkeit | -| `contrast` | number | Konrast | -| `gamma` | number | Gamma-Wert | -| `saturation` | number | Sättigung | -| `sharpen` | number | Schärfe | -| `invert` | boolean | Farben invertieren | -| `grayscale` | boolean | Schwarz-Weiß | -| `resampling` | "lanczos"
"nearestNeighbor"
"linear"
"catmullRom" | Resampling-Algorithmus | -| `quality` | number | Ausgabequalität 0..100 | - diff --git a/docs/md/projektkonfig/collections/indexes.md b/docs/md/projektkonfig/collections/indexes.md deleted file mode 100644 index 3304e65..0000000 --- a/docs/md/projektkonfig/collections/indexes.md +++ /dev/null @@ -1,30 +0,0 @@ -# indexes Liste - -Die indexes-Anweisung in der Konfigurationsdatei einer Sammlung (collection.yml) ist ein Array von Indexdefinitionen. Indizes werden in Datenbanken verwendet, um die Suchleistung zu optimieren. Indem Sie die richtigen Indizes definieren, können Sie die Effizienz Ihrer Anwendung verbessern. Es ist NICHT MÖGLICH einen gesetzten Index über die yml Datei wieder zu entfernen, hierfür muss man direkt in die Datenbank gehen. - -Jede Indexdefinition ist ein Objekt mit bestimmten Eigenschaften: - -- `name`: - Ein eindeutiger Name für den Index. Es ist optional, wird jedoch empfohlen, um den Index später leicht identifizieren zu können. - -- `key`: - Bestimmt, auf welche Felder der Index angewendet werden soll. Dies kann ein einfacher String sein, wenn der Index nur ein Feld umfasst, oder ein Array von Strings, wenn der Index mehrere Felder umfasst. - - Zum Beispiel key: ["$text:$**"] definiert einen Volltextindex über alle Felder. Der spezielle Operator $text wird verwendet, um einen Volltextindex zu erstellen, und der Operator $\*\* bezeichnet alle Felder in der Sammlung. - - Eine andere mögliche Indexdefinition könnte so aussehen: key: ["file.type"]. Dies würde einen Index auf dem Feld type innerhalb des Unterobjekts file erstellen. - -- `unique`: - Wenn auf true gesetzt, erzwingt dies, dass der Index eindeutige Werte enthält. Wenn Sie versuchen, einen Eintrag mit einem bereits indizierten Wert hinzuzufügen, wird ein Fehler ausgelöst und der Vorgang abgebrochen. - -- `background`: - Wenn auf true gesetzt, erstellt die Datenbank den Index im Hintergrund, um die Leistungsauswirkungen auf andere Operationen zu minimieren. - -- `defaultLanguage`: - Wird verwendet, um die Sprache für Textindizes festzulegen. Dies ist wichtig für die Volltextsuche, da verschiedene Sprachen unterschiedliche Tokenisierungs- und Stemmungsregeln haben. - -Ein Beispiel für die Verwendung von Indizes in der Sammlungskonfigurationsdatei könnte so aussehen: - -!!!include(../api/collections/democol/textindex.yml)!!! - -In diesem Beispiel wird ein Textindex namens textindex erstellt, der alle Felder der Sammlung abdeckt. Der Index wird im Hintergrund erstellt und verwendet Deutsch als Standardtextsprache. diff --git a/docs/md/projektkonfig/collections/meta.md b/docs/md/projektkonfig/collections/meta.md deleted file mode 100644 index fddfb9e..0000000 --- a/docs/md/projektkonfig/collections/meta.md +++ /dev/null @@ -1,87 +0,0 @@ -# meta Objekt - -Wie bereits an anderer Stelle beschrieben, dient das `meta` Objekt zur Definition von Merkmalen, die im _tibi-admin_ finden. Zum Anlegen der Struktur in der Datenbank und Definition der API haben diese Angaben keine Relevanz. - -Folgende Angaben sind möglich: - -!!!include(../api/collections/democol/meta.yml)!!! - -## views Liste - -`views` werden für die Darstellung der Kollektion-Daten im _tibi-admin_ benötigt. Die Auswahl des passenden View erfolgt über CSS Media-Queries. - -Optionale Unternavigationen können eigene `views` haben. -Möchte man, dass in der view selection Navbar vor den View namen bestimme Icons angezeigt werden, so kann man diese einfach per muiIcon im jeweiligen View Objekt angeben. - -Folgende möglche Einträge für `views` gibt es derzeit: - -### simpleList - -!!!include(../api/collections/democol/simpleList.yml)!!! - -### table - -!!!include(../api/collections/democol/table.yml)!!! - -### cardList - -!!!include(../api/collections/democol/cardList.yml)!!! - -## quickEdit - -```yml -# wenn keine fields gesetzt sind, werden alle Felder der Kollektion angezeigt -quickEdit: - enabled: true # Standardmäßig ist die Schnellbearbeitung aktiviert - fields: - - title - - age - - date -``` - -### dashboardSimpleList - -Fürs dashboard type: table - -```yml -type: dashboardSimpleList -mediaQuery: "(max-width: 600px)" -primaryText: email -secondaryText: subject -``` - -### dashboardTable - -Fürs dashboard type: table - -```yml -type: dashboardTable -mediaQuery: "(min-width: 600px)" -columns: - - subject - - file - - file - - subject - - file -``` - -## tablist - -Wird die `tablist` verwendet, ist sicher zu stellen, dass alle Felder in der Definition aufgenommen werden. Werden Felder nicht in die `tablist` aufgenommen, sind diese weiterhin in einer Gesamtliste unterhalb der Tabs und bringen das Layout durcheinander. - - backup: - active: true - collectionName: backups - -## multiupload - -Der mutliupload kann bei jedem view type verwendet werden. Über $file kann man in eval auf das aktuelle file Objekt zugreifen. Hier ist eine Beispielscollection, welchen diesen verwendet. - -!!!include(../api/collections/medialib.yml)!!! - -## backups - -im meta Objekt einer collection können backups für diese collection konfiguriert werden. Die backups werden in der Datenbank gespeichert und können über das tibi-admin in der selben collection angewandt werden. Wird ein collectoneintrag gelöscht, kann man diesen über den gelöschte einträge checkbox wiederherstellen. -folgende collection ist ein beispiel für eine backup collection - -!!!include(../api/collections/backups.yml)!!! diff --git a/docs/md/projektkonfig/collections/validator.webm b/docs/md/projektkonfig/collections/validator.webm deleted file mode 100644 index 6a34e05..0000000 Binary files a/docs/md/projektkonfig/collections/validator.webm and /dev/null differ diff --git a/docs/md/projektkonfig/config.yml.md b/docs/md/projektkonfig/config.yml.md deleted file mode 100644 index 64773fa..0000000 --- a/docs/md/projektkonfig/config.yml.md +++ /dev/null @@ -1,17 +0,0 @@ -# config.yml - -Die Datei **config.yml** ist der Einstieg in die API-Konfiguration eines Projekts. Die Datei kann sich an einem beliebigen Ort befinden. Die einzige Bedingung ist, dass sie durch den tibi-server lesbar ist. - -Es hat sich jedoch als günstig erwiesen bei Webprojekten die Datei und alle anderen Datein, die zur API-Konfiguration gehören, im ordner [api/](./ordnerstruktur.md) unterhalb des eigentlichen Webprojektes anzuordnen. Die Quellen des Frontends und der API können somit in ein Mono-Repo eingecheckt werden. - -## Aufbau - -!!!include(../api/config.yml)!!! - -### siehe - - -- [dashboard](./dashboard.md) -- [collections](./collections.md) -- [jobs](./jobs.md) -- [assets](./assets.md) diff --git a/docs/md/projektkonfig/dashboard.png b/docs/md/projektkonfig/dashboard.png deleted file mode 100644 index 64a2b6b..0000000 Binary files a/docs/md/projektkonfig/dashboard.png and /dev/null differ diff --git a/docs/md/projektkonfig/jobs.md b/docs/md/projektkonfig/jobs.md deleted file mode 100644 index d43814f..0000000 --- a/docs/md/projektkonfig/jobs.md +++ /dev/null @@ -1,11 +0,0 @@ -# jobs - -In dem ein oder anderen Projekt werden sicherlich Jobs im Hintergrund benötigt, die zu bestimmten Zeiten oder Intervallweise ausgeführt werden müssen (z.B. Datenbereinigung). Diese Jobs können innerhalb der [config.yml](./config.yml.md) definiert werden. - -Wie in allen YAML-Definitionen können auch die Jobs via `!include` ausgelagert werden. - -Der Aufbau eines Jobs ausgelagert in einer Datei sieht beispielsweise folgendermaßen aus: - -!!!include(../api/jobs/demojob.yml)!!! - -Die Möglichkeiten innerhalb der Javascript-Datei werden im Kapitel [Javascript Kontext](./../server-javascript-kontext/allgemeines.md) beschrieben. diff --git a/docs/md/projektkonfig/ordnerstruktur.md b/docs/md/projektkonfig/ordnerstruktur.md deleted file mode 100644 index 849002c..0000000 --- a/docs/md/projektkonfig/ordnerstruktur.md +++ /dev/null @@ -1,65 +0,0 @@ -# Ordnerstruktur - -Als Konvention für neue Projekte hat sich folgende Ordnerstruktur etabliert: - -![Ordnerstruktur](api-ordner.png) - -Die Aufteilung der YAML-Konfiguration ist durch den YAML-Tag `!include` möglich. Genaueres dazu wird auf den nachfolgenden Seiten beschrieben. - -## /api - -Der Einstiegsordner in die Konfiguration ist frei wählbar. "/api" innerhalb des Projektrepositories hat sich jedoch bewährt. - -Die Einstiegsdatei in die Gesamt-Konfiguration liegt hier und heißt [config.yml](./config.yml.md). In dieser können Umgebungsvariablen erstetzt werden, welche in [config.yml.env](./config.yml.md) definiert sind. - -Ebenso sind alle nachfolgenden Unterordner beliebig zu benennen. Da aber ein JSON-Schema und VSCode-Konfiguration zur Validierung der YAML Dateien existiert, ist folgende Struktur hilfreich. - -### JSON-Schema - -Das JSON-Schema ist in die package.json einzubinden via: - -```json - ... - "devDependencies": { - ..., - "tibi-types": "https://gitbase.de/cms/tibi-types.git" - }, - ... -``` - -Die im Projekt liegende VSCode-Konfig sollte dementsprechend ergänzt werden: - -```json - ... - "yaml.schemas": { - "node_modules/tibi-types/schemas/api-config/config.json": "api/config.y*ml", - "node_modules/tibi-types/schemas/api-config/collection.json": "api/collections/*.y*ml", - "node_modules/tibi-types/schemas/api-config/field.json": "api/collections/fields/*.y*ml", - "node_modules/tibi-types/schemas/api-config/fieldArray.json": "api/collections/fieldLists/*.y*ml" - }, - "yaml.customTags": ["!include scalar"], - ... -``` - -Sollte Yarn2 verwendet werden ist die Verlinkung von **node_modules** nötig. Dazu ist folgendes in der **.yarnrc.yml** einzutragen: - -```yaml -... -nodeLinker: node-modules -``` - -## /api/collections - -Bei Aufteilung der Kollektionskonfigurationen in einzelne Dateien, sollten diese in diesem Ordner gespeichert werden. Für jede Kollektion sollte eine eigene Datei verwendet werden, hier im Beispiel [api/collections/democol.yml](./collections.md). - -### /api/collections/fields - -Sollten Feldkonfigurationen wieder verwendet werden, können diese im [api/collections/fields/](./collections/fields.md) Unterordner gepeichert werden. Diese sind pro Feldkonfiguration als einzelne Datei aufzuführen. - -### /api/hooks - -Jede Javascript-Datei, die einen Hook bedient sollte im Unterordner benannt nach der Kollektion im Ordner [api/hooks/](./collections/hooks.md) sein. Der Name der Datei sollte sich nach den Hook richten. Z.B. **get_return.js** ist zustängig für den GET-Hook nach dem Lesen der Daten, bevor diese zurück gegeben werden. Mehr dazu unter [Hooks](./collections/hooks.md). - -### /api/templates - -Ist es nötig im Projekt Templates zu rendern (z.B. für den Email-Versand), sind diese im Ordner **templates** gut aufgehoben. \ No newline at end of file diff --git a/docs/md/restapi/assets.md b/docs/md/restapi/assets.md deleted file mode 100644 index 8907ee9..0000000 --- a/docs/md/restapi/assets.md +++ /dev/null @@ -1,27 +0,0 @@ -# /assets - -Die /assets-API ist dazu gedacht, den Zugriff auf bestimmte Ordnerpfade zu ermöglichen, die direkt über den Tibi-Server erreichbar sind. Diese Pfade werden in der Konfigurationsdatei (config.yml) definiert und relativ zu dieser Datei interpretiert. Jeder dieser Pfade wird durch einen eindeutigen Namen identifiziert, der in der URL verwendet wird. - -## URL-Struktur - -Die Struktur der URL für den Zugriff auf die Assets ist wie folgt: - -- TIBI-SERVER-URL/api/v1/_/NAMESPACE/_/assets/NAME/ - -Hierbei steht NAME für den in der Konfigurationsdatei festgelegten Namen für den Pfad. Wenn beispielsweise ein Pfad mit dem Namen _dist_ definiert ist, der auf den Ordner ../frontend/_dist_ relativ zur config.yml zeigt, würde die entsprechende URL so aussehen: - -- TIBI-SERVER-URL/api/v1/_/NAMESPACE/_/assets/_dist_/ - -## Zugriffsmethode - -Über die /assets-API ist ausschließlich ein unbeschränkter Lesezugriff (GET-Methode) möglich. Dies bedeutet, dass Sie über diese API Dateien aus den definierten Pfaden abrufen können, aber keine Änderungen vornehmen oder Dateien hochladen können. -Konfigurationsbeispiel - -In der config.yml könnten Sie einen Asset-Pfad wie folgt definieren: - -```yaml -name: _dist_ -path: ../frontend/_dist_ -``` - -Dies würde den Zugriff auf Dateien im Ordner ../frontend/_dist_ relativ zur config.yml über die URL TIBI-SERVER-URL/api/v1/_/NAMESPACE/_/assets/_dist_/ ermöglichen. diff --git a/docs/md/restapi/collection.md b/docs/md/restapi/collection.md deleted file mode 100644 index 542a71e..0000000 --- a/docs/md/restapi/collection.md +++ /dev/null @@ -1,239 +0,0 @@ -# `/_/NAMESPACE/COLLECTION` - -Dieser Endpoint ermöglicht Interaktionen mit den Collectionen, die flexible Strukturen zur Organisation und Kategorisierung von Daten darstellen. Sie können einen Collectioneintrag abrufen, aktualisieren, erstellen und löschen. Jede Collection wird durch einen eindeutigen Namespace und Namen identifiziert. - -## GET /{namespace}/{collection} - -Diese Anforderung ruft alle Einträge einer bestimmten Collection ab. Sie nimmt den Namespace und den Namen der Collection sowie optionale API-Parameter für die Anpassung der Anfrage als Parameter an. - -### Antwort - -Die Antwort ist ein Objekt mit folgenden Eigenschaften: - -- `data`: Ein Array von CollectionEntry Objekten. - -- `count`: Die Gesamtzahl der Einträge. - -```ts -interface Collection { - name: string - meta?: CollectionMeta - permissions?: { - public?: CollectionPermission - user?: CollectionPermission - [token: string]: CollectionPermission - } - projections?: { - [projectionName: string]: { - select: { - [field: string]: 1 | 0 - } - } - } - fields: CollectionField[] -} -``` - -## GET /{namespace}/{collection}/{id} - -Diese Anforderung ruft einen bestimmten Eintrag in einer Collection ab. Sie nimmt den Namespace und Namen der Collection sowie die ID des abzurufenden Eintrags als Parameter an. - -### Anforderungsparameter - -- `id`: Die ID des abzurufenden Eintrags. - -### Antwort - -Die Antwort ist das entsprechende CollectionEntry Objekt. - -## PUT /{namespace}/{collection}/{id} - -Diese Anforderung aktualisiert die Daten eines vorhandenen Eintrags in einer Collection. Sie nimmt den Namespace und den Namen der Collection, die ID des zu aktualisierenden Eintrags und ein Änderungssatz-Objekt, das die zu aktualisierenden Daten enthält, als Parameter an. - -### Anforderungsparameter - - id: Die ID des zu aktualisierenden Eintrags. - - data: Ein Änderungssatz-Objekt, das die zu aktualisierenden Daten enthält. - -### Antwort - -Die Antwort ist das aktualisierte CollectionEntry Objekt. - -## POST /{namespace}/{collection} - -Diese Anforderung erstellt einen neuen Eintrag in einer Collection. Sie nimmt den Namespace und den Namen der Collection und ein Datenobjekt, das die Informationen des neuen Eintrags enthält, als Parameter an. Optional kann eine Funktion für den Fortschritt des Uploads übergeben werden. - -### Anforderungsparameter - -- `data`: Ein Datenobjekt, das die Informationen des neuen Eintrags enthält. - -### Antwort - -Die Antwort ist das neu erstellte CollectionEntry Objekt. - -## DELETE /{namespace}/{collection}/{id} - -Diese Anforderung löscht einen vorhandenen Eintrag in einer Collection. Sie nimmt den Namespace und den Namen der Collection und die ID des zu löschenden Eintrags als Parameter an. - -### Anforderungsparameter - -- `id`: Die ID des zu löschenden Eintrags. - -### Antwort - -Die Antwort ist ein boolean, das true zurückgibt, wenn das Löschen erfolgreich war. - -Jede Collection besteht aus mehreren Feldern (CollectionField), die verschiedene Datenpunkte repräsentieren. Jedes Feld hat einen Namen, einen Typ und ggf. eine Reihe von Subfeldern. Die Metadaten eines Feldes (CollectionFieldMeta) können zusätzliche Informationen über das Feld enthalten, wie z.B. ein Label, Hilfstexte, Widget-Typen, InputProps und mehr. - -Eine Collection kann auch Metadaten (CollectionMeta) enthalten, die Informationen über die Collection selbst enthalten. - -```ts -interface CollectionNavigation { - label?: I18Text - muiIcon?: string - defaultSort?: { - field: string - order?: "ASC" | "DESC" | "MANUALLY" - } - defaultImageFilter?: string - views?: View[] - filter?: { [key: string]: any } - defaultCallback?: - | "edit" - | "view" - | { - eval: string - } -} - -interface CollectionMeta extends CollectionNavigation { - singleton: boolean - rowIdentTpl?: - | string - | { - twig: string - } - - subNavigation?: CollectionNavigation[] - - tablist?: { - activeTab?: string - tabs: CollectionMetaTab[] - } - - [key: string]: any -} - -interface CollectionMetaTab { - name: string - label: I18Text - dependsOn?: DependsOn - subFields: { - source: string - name?: string - }[] - _resolvedSubFields?: CollectionField[] - _hide?: boolean -} - -interface EntryViewTab { - name: string - meta: { - [key: string]: any - } -} - -interface CollectionPermission { - methods?: MethodPermission - filter?: any - validProjections?: string[] -} - -interface CollectionField { - name: string - type?: string - index?: ("single" | "unique")[] - meta?: CollectionFieldMeta - subFields?: CollectionField[] -} - -type CssWithEval = string | { [key: string]: string | number } | { eval: string } - -interface ContainerProps { - class?: string - style?: string - layout?: { - breakBefore: boolean - breakAfter: boolean - size: { - default: string - small: string - large: string - } - } -} - -interface CollectionFieldMeta { - source?: string - label?: I18Text - helperText?: I18Text - widget?: string - valueMap?: { - [value: "string" | number]: { - name?: I18Text - muiIcon?: string - style?: string - } - } - containerProps?: ContainerProps - choices?: ArrayFieldChoice[] | EndpointOptions - filter?: boolean | FilterConfig - defaultValue?: DefaultValue - addAllowed?: boolean - props?: { - step?: string | number - [key: string]: string | number | boolean - } - inputProps?: { - step?: string | number - [key: string]: any - } - dependsOn?: DependsOn - - css?: { - input?: { - wrapper?: CssWithEval - element?: CssWithEval - foreignEntry?: CssWithEval - } - view?: { - wrapper?: CssWithEval - element?: CssWithEval - foreignEntry?: CssWithEval - } - filter?: { - wrapper?: CssWithEval - element?: CssWithEval - foreignEntry?: CssWithEval - } - } - folding?: { - unfolded?: boolean - previewFolded?: - | string - | { - eval: string - raw?: boolean - } - previewUnfolded?: - | string - | { - eval: string - raw?: boolean - } - } - - [key: string]: any -} -``` diff --git a/docs/md/restapi/login.md b/docs/md/restapi/login.md deleted file mode 100644 index e3e4b8b..0000000 --- a/docs/md/restapi/login.md +++ /dev/null @@ -1,63 +0,0 @@ -# `/login` - -## POST /login - -Dieser Endpoint ermöglicht es Benutzern, sich in das System einzuloggen. Dabei wird eine Authentifizierung durchgeführt und bei erfolgreicher Authentifizierung ein Token zurückgegeben, der für nachfolgende API-Aufrufe verwendet wird. - -## Anforderungsparameter - -Der /login Endpoint erwartet folgende Daten im Body: - -- `username`: Der Benutzername des Benutzers, der sich anmelden möchte. Typ: String. - -- `password`: Das Passwort des Benutzers, der sich anmelden möchte. Typ: String. - -Die Daten müssen als LoginData Objekt übergeben werden. - -```ts -const loginData: LoginData = { - username: "IhrBenutzername", - password: "IhrPasswort", -} -``` - -## Antwort - -Bei erfolgreicher Anmeldung gibt der /login Endpoint ein LoginResponse Objekt zurück. Dieses Objekt enthält: - -- `token`: Ein Authentifizierungstoken, das für nachfolgende API-Aufrufe verwendet wird. Typ: String. - -- `user`: Ein User Objekt, das Informationen über den eingeloggten Benutzer enthält. - -```ts -interface User { - id: string // Eindeutige ID des Benutzers - insertTime: string // Zeitpunkt der Erstellung des Benutzerkontos - updateTime: string // Letzter Zeitpunkt der Aktualisierung des Benutzerkontos - username: string // Benutzername des Benutzers - role: number // Rolle des Benutzers im System (0=admin, 1 = editor, 2 = user) - permissions: any[] // Berechtigungen des Benutzers - meta: { - // Weitere optionale Benutzerinformationen - [key: string]: any - } -} -``` - -## Beispielaufruf - -```ts -const loginData: LoginData = { - username: "IhrBenutzername", - password: "IhrPasswort", -} - -postLogin(loginData) - .then((response) => { - console.log("Erfolgreiche Anmeldung! Token: ", response.token) - console.log("Benutzerinformationen: ", response.user) - }) - .catch((error) => { - console.log("Fehler beim Login: ", error) - }) -``` diff --git a/docs/md/restapi/project.md b/docs/md/restapi/project.md deleted file mode 100644 index 468c418..0000000 --- a/docs/md/restapi/project.md +++ /dev/null @@ -1,99 +0,0 @@ -# `/project` - -Dieser Endpoint bietet eine Schnittstelle für den Zugriff und die Manipulation von Projektdaten. Benutzer können Projekte erstellen, abrufen, aktualisieren und löschen. - -## GET /project - -Mit dieser Funktion können Sie eine Liste aller Projekte abrufen. Diese Funktion nimmt optionale Parameter an, die verwendet werden können, um die abgerufenen Projekte zu sortieren oder zu filtern. - -Diese request ruft eine Liste aller Projekte ab. Sie kann optionale Parameter verwenden, um die abgerufenen Projekte zu sortieren oder zu filtern. - -### Antwort - -Die Antwort auf diese request ist ein Objekt mit zwei Eigenschaften: - -- `data`: Ein Array von Projekt-Objekten. -- `count`: Die Gesamtzahl der Projekte die es gibt. - -Jedes Projekt-Objekt hat die folgenden Eigenschaften: - -```ts -interface Project { - id?: string // Eindeutiger Identifikator für das Projekt - insertTime?: string // Zeitpunkt der Erstellung des Projekts - updateTime?: string // Letzter Zeitpunkt der Aktualisierung des Projekts - configFile: string // Pfad zur config.yml des Projekts - name: string // Name des Projekts - description: string // Beschreibung des Projekts - users?: string[] // Array von Benutzer-IDs mit Zugriff auf das Projekt - api?: ProjectAPI // Zusätzliche Projektinformationen - yourPermissions?: { - // Berechtigungen des aktuellen Benutzers für das Projekt - [collectionName: string]: MethodPermission - } -} -``` - -## PUT /project/{id} - -Diese Anforderung aktualisiert ein vorhandenes Projekt. Sie nimmt die ID des zu aktualisierenden Projekts und ein Änderungsset als Parameter an. Das Änderungsset ist ein Objekt, das die zu ändernden Eigenschaften und ihre neuen Werte enthält. -Anforderungsparameter - -- `id`: Die ID des zu aktualisierenden Projekts. - -- `data`: Ein Objekt, das die zu ändernden Eigenschaften und ihre neuen Werte enthält. - -### Antwort - -Die Antwort ist das aktualisierte Project Objekt. - -## DELETE /project/{id} - -Diese Anforderung löscht ein vorhandenes Projekt. Sie nimmt die ID des zu löschenden Projekts als Parameter an. - -### Anforderungsparameter - -- `id`: Die ID des zu löschenden Projekts. - -### Antwort - -Die Antwort ist ein Objekt mit einer message Eigenschaft, die eine Bestätigungsnachricht enthält. - -## POST /project - -Diese Anforderung erstellt ein neues Projekt. Sie nimmt ein Objekt als Parameter an, das die Eigenschaften des zu erstellenden Projekts enthält. -Anforderungsparameter - -- `data`: Ein Objekt vom typ Project. - -### Antwort - -Die Antwort ist ein Objekt mit einer message Eigenschaft, die eine Bestätigungsnachricht enthält. - -```ts -interface MethodPermission { - get: boolean - post: boolean - put: boolean - delete: boolean -} - -interface ProjectPermission { - name: string - label: I18Text -} - -type ProjectImageUrl = string | EvalObject - -interface ProjectAPI { - isOnline: boolean - namespace: string - meta?: { - imageUrl?: ProjectImageUrl - permissions?: ProjectPermission[] - dashboard?: Dashboard - [key: string]: any - } - collections: Collection[] -} -``` diff --git a/docs/md/restapi/user.md b/docs/md/restapi/user.md deleted file mode 100644 index 9ee3276..0000000 --- a/docs/md/restapi/user.md +++ /dev/null @@ -1,81 +0,0 @@ -# `/user` - -Dieser Endpoint bietet eine Schnittstelle für den Zugriff und die Manipulation von Benutzerdaten. Sie können Benutzerinformationen abrufen, aktualisieren, erstellen und löschen. Jeder Benutzer wird durch eine eindeutige Benutzer-ID identifiziert. - -## GET /user - -Diese Anforderung ruft eine Liste aller Benutzer ab. Sie kann optionale Parameter verwenden, um die abgerufenen Benutzerdaten zu sortieren oder zu filtern. - -### Antwort - -Die Antwort auf diese Anforderung ist ein Users Objekt mit folgenden Eigenschaften: - -- `data`: Ein Array von User Objekten. - -- `count`: Die Gesamtzahl der Benutzer. - -Jedes User Objekt hat die folgenden Eigenschaften: - -```ts -interface User { - id: string // Eindeutiger Identifikator des Benutzers - insertTime: string // Zeitpunkt der Erstellung des Benutzers - updateTime: string // Letzter Zeitpunkt der Aktualisierung des Benutzers - username: string // Benutzername des Benutzers - role: number // Rolle des Benutzers, repräsentiert durch eine Zahl - permissions: any[] // Array von Berechtigungen des Benutzers - meta: { - // Zusätzliche Informationen über den Benutzer - [key: string]: any - } -} -``` - -## GET /user/{id} - -Diese Anforderung ruft einen bestimmten Benutzer ab. Sie nimmt die ID des abzurufenden Benutzers als Parameter an. -Anforderungsparameter - -- `id`: Die ID des abzurufenden Benutzers. - -### Antwort - -Die Antwort ist das entsprechende User Objekt. - -## POST /user - -Diese Anforderung erstellt einen neuen Benutzer. Sie nimmt ein Objekt als Parameter an, das die Eigenschaften des zu erstellenden Benutzers enthält. - -### Anforderungsparameter - -- `data`: Ein Objekt, das die Eigenschaften des zu erstellenden Benutzers enthält. - -### Antwort - -Die Antwort ist ein Objekt, das das neu erstellte User Objekt enthält. - -## PUT /user/{id} - -Diese Anforderung aktualisiert die Daten eines vorhandenen Benutzers. Sie nimmt die ID des zu aktualisierenden Benutzers und ein Objekt, das die zu aktualisierenden Daten enthält, als Parameter an. - -### Anforderungsparameter - -- `id`: Die ID des zu aktualisierenden Benutzers. - -- `data`: Ein Objekt, das die zu aktualisierenden Daten enthält. - -### Antwort - -Die Antwort ist ein Objekt, das das aktualisierte User Objekt enthält. - -## DELETE /user/{id} - -Diese Anforderung löscht einen vorhandenen Benutzer. Sie nimmt die ID des zu löschenden Benutzers als Parameter an. - -### Anforderungsparameter - - `id`: Die ID des zu löschenden Benutzers. - -### Antwort - -Die Antwort ist ein boolean, das true zurückgibt, wenn das Löschen erfolgreich war. diff --git a/docs/md/server-javascript-kontext/allgemeines.md b/docs/md/server-javascript-kontext/allgemeines.md deleted file mode 100644 index 1fffe22..0000000 --- a/docs/md/server-javascript-kontext/allgemeines.md +++ /dev/null @@ -1,71 +0,0 @@ -Das HookContext-Interface bietet ein zentrales Objekt, um Zugang zu verschiedenen Attributen und Paketen zu erhalten. Es wird als context in den Hooks des tibi-server genutzt und stellt wichtige Funktionalitäten zur Verfügung, die zur Manipulation der Daten und Abläufe in den HTTP-Methoden und Schritten der API benötigt werden. - -Das HookContext-Interface setzt sich aus mehreren Schnittstellen zusammen, darunter GetHookData, GetHookGetOnlyData, PostHookData, JobData, request und mehrere third-party Pakete. Hierbei sind mit ausnahme von den request und den third-party-paketen attributen alle attribute direkt auf dem context Objekt vorhanden. Request ist eine funktion die ihre Objekte zurückgibt und ist somit rechenaufwendig. Daher ist es ratsam bei mehrfacher nutzung des request attributs, sich den Wert in einer variable zwischen zu speichern. Die Attribute auf den paketen werden über context.paketname.attribut aufgerufen. - -## GetHookData - -Das GetHookData-Interface enthält Attribute, die spezifisch für die Manipulation von GET-Anfragen in den Hooks sind: - -- `filter`: Ein Filter-Objekt, das die Anfragebedingungen für die zu abrufenden Dokumente enthält. -- `selector`: Ein Selektor-Objekt, das festlegt, welche Felder in den zurückgegebenen Dokumenten enthalten sein sollten. -- `offset`: Ein numerischer Wert, der den Startpunkt für die Rückgabe von Dokumenten festlegt. -- `limit` Ein numerischer Wert, der die maximale Anzahl von Dokumenten festlegt, die zurückgegeben werden sollen. -- `sort`: Ein String oder ein Array von Strings, der die Sortierreihenfolge der zurückgegebenen Dokumente bestimmt. -- `pipelineMod`: Eine Funktion, die es ermöglicht, die MongoDB-Abfragepipeline zu modifizieren. - -## PostHookData Interface - -Das PostHookData-Interface enthält ein Attribut, das speziell für POST- und PUT-Hooks relevant ist: - -`data`: Das Dokument oder die Daten, die gesendet wurden. Dies ist ein CollectionDocument-Objekt und wird in die Datenbank geschrieben. Will man den Datenbankeinträge im hook also modifizieren, so muss dieses Objekt modifiziert werden. Mann muss dieses Objekt idealerweise also einfach modifiziert in dem HookResponse data attribut abspeichern, dies wird nämlich zwischen allen Hooks immer ausgetauscht. Demzufolge ist das veränderte data Objekt dann auch so im nächsten Hook verfügbar. - -## JobConfig und JobData Interfaces - -Das JobConfig-Interface definiert die Konfiguration für einen Cron-Job, diese ist jene Konfig die im zugehörigen yaml definiert wurde: - -- `meta`: Ein Metadatenobjekt. -- `cron`: Ein String, der die Cron-Job-Intervallspezifikation enthält. -- `type`: Der Typ des Jobprogramms. Derzeit wird nur "javascript" unterstützt. -- `file`: Der Pfad zur Datei des Jobprogramms. - -Das JobData-Interface enthält ein job-Attribut, das ein JobConfig-Objekt ist und die Konfiguration des aktuellen Jobs repräsentiert. - -## request - -Die request Funktion liefert ein Objekt zurück, das Informationen über die HTTP-Anfrage enthält: - -- `method`: Die HTTP-Methode der Anfrage (GET, POST, PUT, DELETE etc.). -- `remoteAddr`: Die remote IP-Adresse der Anfrage. -- `clientIp()`: Funktion zum Abrufen der Client-IP-Adresse der Anfrage. -- `host`: Der Host der Anfrage. -- `url`: Die vole URL der Anfrage. -- `path`: Der Pfad der Anfrage. -- `param(p: string)`: Funktion zum Abrufen von URL-Parametern. -- `query(q: string`: Funktion zum Abrufen von URL-Abfrageparametern. -- `header(h: string)`: Funktion zum Abrufen von HTTP-Headern. -- `body()`: Funktion zum Abrufen des HTTP-Body. -- `bodyBytes()`: Funktion zum Abrufen des HTTP-Body als byte array. Wird z.B. für die Umwandlung von iso8859 zu utf8 genutzt. - -## Pakete - -Jedes der folgenden Attribute ist ein Paket, das spezifische Funktionen bereitstellt: - -- `db`: Stellt Funktionen zur Interaktion mit der Datenbank zur Verfügung (DbPackage). -- `smtp`: Bietet Funktionen zum Senden von E-Mails (SmtpPackage). -- `fs`: Bietet Funktionen zum Interagieren mit dem Dateisystem (FsPackage). -- `tpl`: Stellt Funktionen zum Arbeiten mit Templates zur Verfügung (TplPackage). -- `http`: Bietet Funktionen zum Senden von HTTP-Anfragen (HttpPackage). -- `debug`: Stellt Funktionen zum Debuggen zur Verfügung (DebugPackage). -- `response`: Bietet Funktionen zur Manipulation der HTTP-Antwort (ResponsePackage). -- `user`: Bietet Funktionen zum Arbeiten mit Benutzern (UserPackage). -- `bcrypt`: Stellt Funktionen zum Hashen und Überprüfen von Passwörtern zur Verfügung (BcryptPackage)` -- `jwt`: Bietet Funktionen zum Arbeiten mit JSON Web Tokens (JwtPackage). -- `charset`: Bietet Funktionen zur Arbeit mit Zeichensätzen (CharsetPackage). -- `image`: Bietet Funktionen zur Arbeit mit Bildern (ImagePackage). -- `xml`: Stellt Funktionen zum Arbeiten mit XML-Daten zur Verfügung (XmlPackage). -- `cookie`: Bietet Funktionen zum Arbeiten mit Cookies (CookiePackage). -- `pdf`: Bietet Funktionen zum Arbeiten mit PDF-Dokumenten (PdfPackage). -- `crypt`: Bietet Funktionen für Kryptografie (CryptoPackage). -- `json`: Bietet Funktionen zum Arbeiten mit JSON-Daten (JsonPackage). - -Diese Pakete erweitern die Möglichkeiten des Context Objektes und ermöglichen es, eine Vielzahl von Aufgaben auszuführen. Für detaillierte Informationen zu jedem Paket, siehe die spezifische Dokumentation des jeweiligen Pakets. diff --git a/docs/md/server-javascript-kontext/packages/bcrypt.md b/docs/md/server-javascript-kontext/packages/bcrypt.md deleted file mode 100644 index 0c4e24f..0000000 --- a/docs/md/server-javascript-kontext/packages/bcrypt.md +++ /dev/null @@ -1,34 +0,0 @@ -## bcrypt - -Das BcryptPackage-Interface bietet Funktionen zur Passworthashing und -überprüfung mit dem bcrypt-Algorithmus. Es beinhaltet folgende Methoden: - -- `hash(password: string, options?: {}: string`: - Diese Methode nimmt ein Klartextpasswort und optionale Hashing-Optionen entgegen und gibt das gehashte Passwort zurück. Die Optionen können den "cost"-Parameter steuern, der die Komplexität des Hashings bestimmt. - -- `check(password: string, hash: string): boolean`: - Diese Methode nimmt ein Klartextpasswort und ein gehashtes Passwort entgegen und gibt zurück, ob das Klartextpasswort nach dem Hashing mit dem gehashten Passwort übereinstimmt. - -```ts -interface BcryptPackage { - /** - * hash password via bcrypt algo - * - * @param password clear text password - * @param options hashing options - */ - hash( - password: string, - options?: { - cost?: number - } - ): string - - /** - * check password against hashed password via bcrypt algo - * - * @param password clear text password - * @param hash hashed password - */ - check(password: string, hash: string): boolean -} -``` diff --git a/docs/md/server-javascript-kontext/packages/charset.md b/docs/md/server-javascript-kontext/packages/charset.md deleted file mode 100644 index dd6bd82..0000000 --- a/docs/md/server-javascript-kontext/packages/charset.md +++ /dev/null @@ -1,17 +0,0 @@ -## charset - -Das CharsetPackage-Interface bietet Funktionen zur Zeichensatzkonvertierung. Es enthält folgende Methode: - -- `iso8859ToUtf8(iso8859: string): string`: - Diese Methode nimmt einen String im ISO-8859-Zeichensatz entgegen und konvertiert ihn in den UTF-8-Zeichensatz. Dies kann verwendet werden, um Kompatibilität zwischen verschiedenen Systemen und Standards zu gewährleisten. - -```ts -interface CharsetPackage { - /** - * convert iso8859 to utf8 - * - * @param iso8859 iso string - */ - iso8859ToUtf8(iso8859: string): string -} -``` diff --git a/docs/md/server-javascript-kontext/packages/cookie.md b/docs/md/server-javascript-kontext/packages/cookie.md deleted file mode 100644 index 12fa52c..0000000 --- a/docs/md/server-javascript-kontext/packages/cookie.md +++ /dev/null @@ -1,39 +0,0 @@ -## cookie - -Das CookiePackage-Interface bietet Funktionen zur Verwaltung von HTTP-Cookies. Es beinhaltet folgende Methoden: - -- `get(name: string): string`: - Diese Methode nimmt den Namen eines Cookies entgegen und gibt den Wert dieses Cookies zurück. - -- `set(name: string, value: string, options?: {}): void`: - Diese Methode nimmt den Namen und den Wert eines Cookies sowie optionale Cookie-Optionen entgegen und setzt das Cookie. Die Optionen können das Ablaufdatum, den Pfad, die Domain und die Secure- und HttpOnly-Flags steuern. - -```ts -interface CookiePackage { - /** - * get cookie from http header - * - * @param name cookie name - */ - get(name: string): string - - /** - * set cookie via http header - * - * @param name cookie name - * @param value cookie value - * @param options cookie options - */ - set( - name: string, - value: string, - options?: { - maxAge?: number - path?: string - domain?: string - secure?: boolean - httpOnly?: boolean - } - ): void -} -``` diff --git a/docs/md/server-javascript-kontext/packages/db.md b/docs/md/server-javascript-kontext/packages/db.md deleted file mode 100644 index 0858a76..0000000 --- a/docs/md/server-javascript-kontext/packages/db.md +++ /dev/null @@ -1,87 +0,0 @@ -## db - -Das Database (Db) Paket stellt Methoden bereit, um Operationen auf einer Datenbank auszuführen. Es umfasst die folgenden Hauptmethoden: - -- `find(colName: string, options?: DbReadOptions): CollectionDocument[]`: - Diese Methode ermöglicht das Suchen von Dokumenten in einer bestimmten Sammlung basierend auf den bereitgestellten Optionen. - -- `count(colName: string, options?: DbReadOptions): number`: - Diese Methode gibt die Anzahl der Dokumente in einer bestimmten Sammlung zurück, die den Optionen entsprechen. - -- `update(colName: string, id: string, data: CollectionDocument): CollectionDocument:`: - Diese Methode aktualisiert das Dokument in einer bestimmten Sammlung, welches die angegebene ID besitzt. - -- `delete(colName: string, id: string): { message: "ok" }:`: - Diese Methode entfernt ein Dokument aus einer bestimmten Sammlung, das die angegebene ID besitzt. -- `deleteMany(colName: string, options?: DbReadOptions): { message: "ok"; removed: number }:` - Diese Methode entfernt mehrere Dokumente aus einer bestimmten Sammlung, die den bereitgestellten Optionen entsprechen. - -- `create(colName: string, data: CollectionDocument): CollectionDocument` - Diese Methode fügt ein neues Dokument in eine bestimmte Sammlung ein. - -```ts -interface DbPackage { - /** - * read results from a collection - * - * @param colName collection name - * @param options options map - */ - find(colName: string, options?: DbReadOptions): CollectionDocument[] - - /** - * read count of documents for filter from a collection - * - * @param colName collection name - * @param options options map (only filter is valid) - */ - count(colName: string, options?: DbReadOptions): number - - /** - * create a document in a collection - * - * @param colName collection name - * @param data data map - */ - create(colName: string, data: CollectionDocument): CollectionDocument - - /** - * update a document in a collection - * - * @param colName collection name - * @param id id of entry - * @param data new/changed data - */ - update(colName: string, id: string, data: CollectionDocument): CollectionDocument - - /** - * deletes one document by id from collection - * - * @param colName collection name - * @param id id of entry - */ - delete(colName: string, id: string): { message: "ok" } - - /** - * deletes documents by filter from collection - * - * @param colName collection name - * @param options options map, only filter valid - */ - deleteMany(colName: string, options?: DbReadOptions): { message: "ok"; removed: number } -} - -interface DbReadOptions { - filter?: { - [key: string]: any - } - selector?: { - [key: string]: any - } - projection?: string - offset?: number - limit?: number - sort?: string[] - pipelineMod?: (pipe: { [key: string]: any }[]) => { [key: string]: any }[] -} -``` diff --git a/docs/md/server-javascript-kontext/packages/debug.md b/docs/md/server-javascript-kontext/packages/debug.md deleted file mode 100644 index dbf705b..0000000 --- a/docs/md/server-javascript-kontext/packages/debug.md +++ /dev/null @@ -1,25 +0,0 @@ -## debug - -Das DebugPackage-Interface bietet Funktionen zur Fehlersuche. Es enthält folgende Methoden: - -- `dump(...toDump): any`: - void: Diese Methode nimmt eine oder mehrere Datenvariablen entgegen und schreibt diese Daten sowohl in den Server-Log als auch in den Header. Dies kann zur Fehlersuche und -behebung verwendet werden. - -- `sentryTraceId(): string`: - Diese Methode gibt die ID des aktuellen Sentry-Trace zurück, der zur Überwachung und Nachverfolgung von Fehlern verwendet werden kann. - -```ts -interface DebugPackage { - /** - * dumps data to header and server log - * - * @param toDump data to dump - */ - dump(...toDump: any): void - - /** - * get Sentry trace id - */ - sentryTraceId(): string -} -``` diff --git a/docs/md/server-javascript-kontext/packages/fs.md b/docs/md/server-javascript-kontext/packages/fs.md deleted file mode 100644 index e62349f..0000000 --- a/docs/md/server-javascript-kontext/packages/fs.md +++ /dev/null @@ -1,93 +0,0 @@ -## fs - -Das FsPackage-Interface bietet Funktionen zur Datei- und Verzeichnisverwaltung. Es beinhaltet folgende Methoden: - -- `configDir(): string`: - Diese Methode gibt den Pfad zum Verzeichnis der API-Konfigurationsdatei zurück. - -- `readFile(path: string, options?: {}): string | any`: - Diese Methode nimmt einen relativen Pfad zu einer Datei und optionale Leseoptionen entgegen und gibt den Inhalt dieser Datei zurück. Die Optionen können steuern, ob der Inhalt als Byte-Array oder als Zeichenkette zurückgegeben wird. - -- `writeFile(path: string, data: string | any): null`: - Diese Methode nimmt einen relativen Pfad zu einer Datei und Daten entgegen und schreibt diese Daten in die Datei. - -- `stat(path: string): {}`: - Diese Methode nimmt einen Pfad zu einer Datei oder einem Verzeichnis entgegen und gibt Informationen über diese Datei oder dieses Verzeichnis zurück. - -- `readDir(path: string): {}[]`: - Diese Methode nimmt einen Pfad zu einem Verzeichnis entgegen und gibt eine Liste der darin enthaltenen Dateien und Verzeichnisse zurück. - -- `mkDir(path: string): void`: - Diese Methode nimmt einen Pfad entgegen und erstellt an diesem Ort ein neues Verzeichnis. - -- `remove(path: string): void`: - Diese Methode nimmt einen Pfad entgegen und löscht die Datei oder das leere Verzeichnis an diesem Pfad. - -```ts -interface FsPackage { - /** - * get directory path of api config file - * - */ - configDir(): string - - /** - * read a file relative to config dir and return its content - * - * @param path relative file path - * @param options optional options - */ - readFile( - path: string, - options?: { - bytes: boolean // if true return []byte instead of string - } - ): string | any - - /** - * write data to a file relative to config dir - * - * @param path relative file path - * @param data string or []byte data - */ - writeFile(path: string, data: string | any): null - - /** - * stat file or directory - * - * @param path - */ - stat(path: string): { - name: string - size: number - isDir: boolean - modTime: string - } - - /** - * list directory entries - * - * @param path - */ - readDir(path: string): { - name: string - size: number - isDir: boolean - modTime: string - }[] - - /** - * make directory and all missing sub directories, no error if directory already exists - * - * @param path - */ - mkDir(path: string): void - - /** - * remove file or empty directory - * - * @param path - */ - remove(path: string): void -} -``` diff --git a/docs/md/server-javascript-kontext/packages/http.md b/docs/md/server-javascript-kontext/packages/http.md deleted file mode 100644 index 8f56cb5..0000000 --- a/docs/md/server-javascript-kontext/packages/http.md +++ /dev/null @@ -1,37 +0,0 @@ -## http - -Das HttpPackage-Interface bietet Funktionen zum Senden von HTTP-Anfragen. Es enthält die folgende Methode: - -- `fetch(url: string, options?: {}): {}`: - Diese Methode nimmt eine URL und optionale Anforderungsoptionen entgegen und sendet eine HTTP-Anfrage an die angegebene URL. Die Optionen können die HTTP-Methode, Header, den Body und das Timeout steuern. Die Methode gibt ein Objekt zurück, das den Status, den StatusText, die Header, den Trailer, die URL und den Body der Antwort enthält. - -```ts -interface HttpPackage { - /** - * http request - * - * @param url url for request - * @param options request options - */ - fetch( - url: string, - options?: { - method?: string - headers?: { [key: string]: string } - body?: string - // timeout in seconds - timeout?: number - } - ): { - status: number - statusText: string - headers: { [key: string]: string } - trailer: { [key: string]: string } - url: string - body: { - text(): string - json(): any - } - } -} -``` diff --git a/docs/md/server-javascript-kontext/packages/image.md b/docs/md/server-javascript-kontext/packages/image.md deleted file mode 100644 index 3b695e2..0000000 --- a/docs/md/server-javascript-kontext/packages/image.md +++ /dev/null @@ -1,39 +0,0 @@ -## image - -ImagePackage Interface - -Das ImagePackage-Interface bietet Funktionen zur Bildmanipulation. Es enthält folgende Methode: - -- `filter(sourceFile: string, targetFile: string, filters: {}[]): void`: - Diese Methode nimmt den Pfad zur Quellbilddatei, den Pfad zur Zieldatei und eine Reihe von Filtern entgegen und wendet diese Filter auf das Bild an. Die Filter können Aspekte des Bildes wie Größe, Helligkeit, Sättigung, Kontrast, Gamma, Unschärfe, Schärfe, Inversion, Graustufen und Qualität steuern. - -```ts -interface ImagePackage { - /** - * convert image from source file to target file with filters - * - * @param sourceFile - * @param targetFile - * @param filters - */ - filter( - sourceFile: string, - targetFile: string, - filters: { - fit?: boolean - fill?: boolean - width?: number - height?: number - brightness?: number - saturation?: number - contrast?: number - gamma?: number - blur?: number - sharpen?: number - invert?: boolean - grayscale?: boolean - quality?: number - }[] - ): void -} -``` diff --git a/docs/md/server-javascript-kontext/packages/jwt.md b/docs/md/server-javascript-kontext/packages/jwt.md deleted file mode 100644 index f5e4b2c..0000000 --- a/docs/md/server-javascript-kontext/packages/jwt.md +++ /dev/null @@ -1,59 +0,0 @@ -## jwt - -JwtPackage Interface - -Das JwtPackage-Interface bietet Funktionen zum Erstellen und Analysieren von JWT (JSON Web Token). Es enthält folgende Methoden: - -- `create(claims: { [key: string]: any }, options?: { secret?: string, validityDuration?: number }): string`: - Diese Methode nimmt ein claims-Objekt und optionale Einstellungen entgegen und gibt einen signierten JWT-String zurück. Mit dieser Methode können Sie JWTs erstellen, die Daten enthalten und mit einem geheimen Schlüssel signiert sind. - -- `parse(token: string, options?: { secret?: string }): { error?: string, valid: boolean, method: { Name: string, Hash: number }, header: { alg: string, typ: string }, claims: { exp?: number, [key: string]: any } }`: - Diese Methode nimmt einen JWT-String und Einstellungen entgegen, welche den Token secret beeinhalten, und gibt ein Objekt zurück, das Informationen über den Token enthält. Mit dieser Methode können Sie JWTs analysieren und die in ihnen enthaltenen Daten extrahieren. - -```ts -interface JwtPackage { - /** - * create a jwt signed token string - * - * @param claims data object - * @param options options (secret, validityDuration = expiry in X seconds) - */ - create( - claims: { - [key: string]: any - }, - options?: { - secret?: string - validityDuration?: number - } - ): string - - /** - * parse jwt token string - * - * @param token token string - * @param options options (secret) - */ - parse( - token: string, - options?: { - secret?: string - } - ): { - error?: string - valid: boolean - method: { - Name: string - Hash: number - } - header: { - alg: string - typ: string - } - claims: { - exp?: number - [key: string]: any - } - } -} -``` diff --git a/docs/md/server-javascript-kontext/packages/pdf.md b/docs/md/server-javascript-kontext/packages/pdf.md deleted file mode 100644 index 5f8bfc7..0000000 --- a/docs/md/server-javascript-kontext/packages/pdf.md +++ /dev/null @@ -1,113 +0,0 @@ -## pdf - -PdfPackage Interface - -Das PdfPackage-Interface bietet Funktionen zur Erzeugung und Manipulation von PDF-Dateien. Es enthält folgende Methoden: - -- `fromHTML(html: string, options?: {}): an`: - Diese Methode nimmt einen HTML-String und optionale Einstellungen entgegen und gibt die binären Daten eines PDF-Dokuments zurück. Mit dieser Methode können Sie ein PDF-Dokument aus HTML-Inhalten erstellen. Die optionalen Einstellungen ermöglichen es Ihnen, verschiedene Aspekte des PDF-Dokuments zu steuern, einschließlich der Ausrichtung, Seitengröße, Ränder, Kopf- und Fußzeilen und vieles mehr. - -- `cpu(command: "watermark" | "stamp" | "merge" | "rotate" | "create", pdfData: any | any[], options?: {}): any`: - Diese Methode nimmt einen Befehl, PDF-Daten und optionale Einstellungen entgegen und gibt die binären Daten eines neuen PDF-Dokuments zurück. Mit dieser Methode können Sie verschiedene Operationen auf einem oder mehreren PDF-Dokumenten durchführen, einschließlich: - - - `watermark`: Fügen Sie ein Wasserzeichen zum PDF hinzu. - - `stamp`: Fügen Sie einen Stempel zum PDF hinzu. - - `merge`: Kombinieren Sie mehrere PDF-Dokumente zu einem. - - `rotate`: Drehen Sie Seiten im PDF. - - `create`: Erstellen Sie ein neues PDF. - - Die pdfData-Parameter können die binären Daten eines einzelnen PDF-Dokuments, ein Array von PDF-Dokumenten (zum Zusammenführen) oder ein Objekt mit einer Beschreibung (zum Erstellen) enthalten. Die optionalen Einstellungen variieren je nach Befehl und ermöglichen es Ihnen, verschiedene Aspekte der Operation zu steuern. - -```ts -interface PdfPackage { - /** - * generate pdf from html - * - * @param html html string - * @param options options - * - * @returns []byte of pdf data - */ - fromHTML( - html: string, - options?: { - copies?: number // Number of copies to print into the pdf file (default 1) - dpi?: number // Change the dpi explicitly (this has no effect on X11 based systems) - grayscale?: boolean // PDF will be generated in grayscale - imageDpi?: number // When embedding images scale them down to this dpi (default 600) - imageQuality?: number // When jpeg compressing images use this quality (default 94) - lowQuality?: boolean // Generates lower quality pdf/ps. Useful to shrink the result document space - marginBottom?: number // Set the page bottom margin - marginLeft?: number // Set the page left margin (default 10mm) - marginRight?: number // Set the page right margin (default 10mm) - marginTop?: number // Set the page top margin - noCollate?: boolean // Do not collate when printing multiple copies (default collate) - noPdfCompression?: boolean // Do not use lossless compression on pdf objects - orientation?: "Portrait" | "Landscape" // Set orientation to Landscape or Portrait (default Portrait) - pageHeight?: number // Page height - pageSize?: string // Set paper size to: A4, Letter, etc. (default A4) - pageWidth?: number // Page width - title?: string // The title of the generated pdf file (The title of the first document is used if not specified) - // page settings - printMediaType?: boolean // Use print media-type instead of screen - footerCenter?: string // Centered footer text - footerFontName?: string // Set footer font name (default Arial) - footerFontSize?: number // Set footer font size (default 12) - footerLeft?: string // Left aligned footer text - footerLine?: boolean // Display line above the footer - footerRight?: string // Right aligned footer text - footerSpacing?: number // Spacing between footer and content in mm (default 0) - footerHTML?: string // URL to footer html - headerCenter?: string // Centered header text - headerFontName?: string // Set header font name (default Arial) - headerFontSize?: number // Set header font size (default 12) - headerLeft?: string // Left aligned header text - headerLine?: boolean // Display line below the header - headerRight?: string // Right aligned header text - headerSpacing?: number // Spacing between header and content in mm (default 0) - headerHTML?: string // URL to header html - } - ): any - - /** - * process existing pdf data - * - * @param command pdfcpu command - * @param pdfData []byte of pdf data, multiple []byte as array of pdf's to merge or object with description to create - * @param options options - * - * @returns []byte of new pdf data - */ - cpu( - command: "watermark" | "stamp" | "merge" | "rotate" | "create", - pdfData: any | any[], - options?: { - pages?: (string | number)[] - description?: { - fontname?: string - points?: number - rtl?: boolean - position?: "full" | "tl" | "tc" | "tr" | "l" | "c" | "r" | "bl" | "bc" | "br" - offset?: string - scalefactor?: number | string - aligntext?: "left" | "center" | "right" | "justified" - strokecolor?: string - fillcolor?: string - backgroundcolor?: string - rotation?: number - diagonal?: 1 | 2 - opacity?: number - rendermode?: 0 | 1 | 2 - margins?: number | string - border?: number | string - url?: string - } - mode?: "text" | "image" | "pdf" - bytes?: any // []byte of watermark image - file?: string // file for pdf watermark - text?: string // text for text watermark - rotation?: number - } - ): any -} -``` diff --git a/docs/md/server-javascript-kontext/packages/response.md b/docs/md/server-javascript-kontext/packages/response.md deleted file mode 100644 index 3592b6e..0000000 --- a/docs/md/server-javascript-kontext/packages/response.md +++ /dev/null @@ -1,18 +0,0 @@ -## image - -Das ResponsePackage-Interface bietet Funktionen zur Manipulation von HTTP-Antwort-Headern. Es enthält die folgende Methode: - -- `header(name: string, value: any): void`: - Diese Methode nimmt den Namen und den Wert eines Headers entgegen und setzt diesen Header in der HTTP-Antwort. - -```ts -interface ResponsePackage { - /** - * set response header - * - * @param name header name - * @param value value - */ - header(name: string, value: any): void -} -``` diff --git a/docs/md/server-javascript-kontext/packages/smtp.md b/docs/md/server-javascript-kontext/packages/smtp.md deleted file mode 100644 index 00e8e2f..0000000 --- a/docs/md/server-javascript-kontext/packages/smtp.md +++ /dev/null @@ -1,32 +0,0 @@ -## smtp - -Das Smtp-Paket ermöglicht das Senden von E-Mails. Es stellt eine sendMail Methode zur Verfügung, die eine E-Mail an einen oder mehrere Empfänger sendet. Die Methode nimmt eine Reihe von Parametern, einschließlich des SMTP-Hosts, des Benutzernamens und Passworts für die Authentifizierung, der Empfängeradressen, des Betreffs, des Absenders und der Nachricht, sowie optionaler Anhänge, entgegen. -Das SmtpPackage-Interface bietet Funktionen zum Senden von E-Mails. Es enthält die folgende Methode: - -- `sendMail(options: {}): void`: - Diese Methode nimmt eine Reihe von Optionen für das Senden einer E-Mail entgegen und sendet die E-Mail entsprechend diesen Optionen. Die Optionen können den SMTP-Host, den Benutzernamen und das Passwort für die Authentifizierung, die Empfänger, den Betreff, den Absender und den Inhalt der E-Mail sowie optionale Anhänge steuern. - -```ts -interface SmtpPackage { - /** - * send an email - * - * @param options email options map - */ - sendMail(options: { - host?: string - username?: string - password?: string - to: string | string[] - cc?: string | string[] - bcc?: string | string[] - subject?: string - from: string - fromName?: string - replyTo?: string - plain?: string - html?: string - attach?: string | string[] - }): void -} -``` diff --git a/docs/md/server-javascript-kontext/packages/tpl.md b/docs/md/server-javascript-kontext/packages/tpl.md deleted file mode 100644 index c224a9e..0000000 --- a/docs/md/server-javascript-kontext/packages/tpl.md +++ /dev/null @@ -1,23 +0,0 @@ -## tpl - -Das TplPackage-Interface bietet Funktionen zur Ausführung von Template-Code. Es enthält folgende Methode: - -`execute(code: string, contextData?: { [key: string]: any }): string`: -Diese Methode nimmt einen Template-Code und optionale Kontextdaten entgegen und gibt das Ergebnis der Template-Ausführung als String zurück. Mit dieser Methode können Sie dynamischen Code ausführen und das Ergebnis in Ihrem Programm verwenden. Genutzt wird dies meist um E-Mail templates zu rendern. - -```ts -interface TplPackage { - /** - * execute a template code and return result - * - * @param code template code - * @param contextData template context map - */ - execute( - code: string, - contextData?: { - [key: string]: any - } - ): string -} -``` diff --git a/docs/md/server-javascript-kontext/packages/user.md b/docs/md/server-javascript-kontext/packages/user.md deleted file mode 100644 index 5fed688..0000000 --- a/docs/md/server-javascript-kontext/packages/user.md +++ /dev/null @@ -1,20 +0,0 @@ -## user - -Das UserPackage-Interface bietet Funktionen zur Arbeit mit den Informationen des derzeit authentifizierten Benutzers. Es enthält die folgende Methode: - -- `auth(): {}`: - Diese Methode gibt ein Objekt zurück, das die ID, den Benutzernamen, die Rolle und die Berechtigungen des derzeit authentifizierten Benutzers enthält. Es ist wichtig zu beachten, dass diese Informationen nur dann verfügbar sind, wenn der Benutzer authentifiziert ist. - -```ts -interface UserPackage { - /** - * get JWT authentication - */ - auth(): { - id: string - username: string - role: number - permissions: string[] - } -} -``` diff --git a/docs/md/server-javascript-kontext/packages/xml.md b/docs/md/server-javascript-kontext/packages/xml.md deleted file mode 100644 index 0c825e8..0000000 --- a/docs/md/server-javascript-kontext/packages/xml.md +++ /dev/null @@ -1,29 +0,0 @@ -## xml - -Das XmlPackage-Interface bietet Funktionen zum Erstellen und Analysieren von XML-Strings. Es enthält folgende Methoden: - -- `create(data: any, options?: {}): string`: - Diese Methode nimmt ein Objekt oder ein Array als Daten sowie optionale Einstellungen entgegen und gibt einen XML-String zurück. Mit dieser Methode können Sie beispielsweise ein JavaScript-Objekt oder -Array in einen XML-String umwandeln. - -- `parse(xml: string, options?: {}): any`: - Diese Methode nimmt einen XML-String und optionale Einstellungen entgegen und gibt ein JavaScript-Objekt zurück. Mit dieser Methode können Sie XML-Strings analysieren und in ein Format umwandeln, das in JavaScript leichter zu handhaben ist. - -```ts -interface XmlPackage { - /** - * create xml string - * - * @param data object or array - * @param options options - */ - create(data: any, options?: {}): string - - /** - * parse xml string to json - * - * @param xml xml string - * @param options options - */ - parse(xml: string, options?: {}): any -} -``` diff --git a/docs/md/servergrundlagen/entitaeten.md b/docs/md/servergrundlagen/entitaeten.md deleted file mode 100644 index 579ed83..0000000 --- a/docs/md/servergrundlagen/entitaeten.md +++ /dev/null @@ -1,26 +0,0 @@ -# Entitäten - -## Projekt - -Jedes Projekt hat eine eigene Konfig-Datei im YAML-Format [config.yml](../projektkonfig/config.yml.md) deren Aufbau später beschrieben wird. - -Wird der Server als "root" ausgeführt, so werden die individuellen Projekt-Threads mit der Benutzer- und Gruppenberechtigung der [config.yml](../projektkonfig/config.yml.md) Datei ausgeführt. Somit ist ein Multi-Mandanten-Server mit getrennten Dateisystem-Berechtigungen möglich. - -Die Projektkonfiguration ist zwingend notwendig und wird beim Anlegen oder Bearbeiten von Projekten über die Rest-API neu eingelesen. - -## Benutzer - -Im Tibi gibt es 3 Benutzerarten: - -- `admin`: Zugriff auf alle Projekte & alle Berechtigungen auf diesen Projekten. -- `editor`: Zugrff auf jene Projekte, denen er zugeordnet wird. -- `user`: Kein Zugriff auf Tibi admin Oberfläche, jedoch über API auf jene Projekte, denen er zu gewiesen wurde und in den jeweiligen Collections jene Berechtigungen, die er über das Permissions Objekt in der Collection erhalten hat. - ```yaml - permissions: - user: - methods: - get: true - post: true - put: true - delete: true - ``` diff --git a/docs/md/servergrundlagen/konfiguration.md b/docs/md/servergrundlagen/konfiguration.md deleted file mode 100644 index 0f0790b..0000000 --- a/docs/md/servergrundlagen/konfiguration.md +++ /dev/null @@ -1,3 +0,0 @@ -# Serverkonfiguration - -TODO \ No newline at end of file diff --git a/docs/md/servergrundlagen/ssr&htaccess.md b/docs/md/servergrundlagen/ssr&htaccess.md deleted file mode 100644 index ed2b3c6..0000000 --- a/docs/md/servergrundlagen/ssr&htaccess.md +++ /dev/null @@ -1,143 +0,0 @@ -# Funktionsweise von SSR: - -## Teil 1: Apache-Konfigurationsdokumentation - -## Allgemeine Informationen - -Diese Konfigurationsdatei ist für einen Apache Webserver bestimmt und beinhaltet spezielle Regeln für das Umleiten von Anfragen und die Verarbeitung von Single Page Applications (SPAs). - -## htaccess Konfigurationsdetails - -- MIME-Type Definition für .mjs Dateien - - AddType application/javascript .mjs - - Diese Anweisung sorgt dafür, dass Dateien mit der Endung .mjs als JavaScript-Dateien (application/javascript) behandelt werden. -- Default Directory Index - - DirectoryIndex noindex - - Legt noindex als Standard-Indexdatei fest, wenn ein Verzeichnis aufgerufen wird. Dies verhindert, dass Apache automatisch eine Datei wie index.html oder spa.html lädt, wenn keine spezifische Datei in der URL angegeben ist. -> Emöglicht SSR -- mod_rewrite Konfiguration - - IfModule mod_rewrite.c - - Diese Sektion ist nur aktiv, wenn das mod_rewrite-Modul verfügbar ist. mod_rewrite ermöglicht die Umleitung und Umformung von URLs. - - RewriteEngine On - - Aktiviert die Umleitungsfunktionen von mod_rewrite. - - RewriteBase / - - Setzt den Basispfad für Rewrite-Regeln auf das Wurzelverzeichnis. - - API-Umleitung - - RewriteRule ^/?api/(.*)$ http://tibi-server:8080/api/v1/_/vde8_tibi_2023/$1 [P,QSA,L] - - Leitet Anfragen, die mit /api/ beginnen, an einen anderen Server (tibi-server) um. Behält den Rest des Pfades bei und fügt ihn an den Ziel-URL an. Die Flags bedeuten: - - [P] Proxy: Die Anfrage wird intern an den angegebenen Server weitergeleitet. - - [QSA] Query String Append: Erhält bestehende Query-Parameter. - - [L] Last: Keine weiteren Regeln werden verarbeitet, wenn diese Regel greift. - - Fallback für Nichtexistierende Dateien/Verzeichnisse - - RewriteCond %{REQUEST_FILENAME} !-f und RewriteCond %{REQUEST_FILENAME} !-d - - Prüft, ob der angeforderte Pfad weder einer existierenden Datei noch einem Verzeichnis entspricht. - - RewriteRule ^/?(.*)$ http://tibi-server:8080/api/v1/_/vde8_tibi_2023/ssr?token=XYZ&url=/$1 [P,QSA,L] - - Leitet Anfragen, die nicht existierenden Dateien/Verzeichnissen entsprechen, an einen Server-seitigen Rendering-Prozess weiter. - - token=XYZ muss an den SSR_TOKEN angepasst werden (welcher auch in der server seinigen env steht.) -- Kommentierte Regel - - #RewriteRule (.*) /spa.html [QSA,L] - - Eine auskommentierte Regel, die alle Anfragen zu spa.html umleiten würde. Da sie auskommentiert ist, hat sie keinen Effekt. - -### Zusätzliche Hinweise - -- Die Konfiguration ist speziell für die Handhabung von Single Page Applications und API-Anfragen zugeschnitten. -- Es ist wichtig, dass das mod_rewrite-Modul aktiviert ist, damit diese Regeln funktionieren. -- Die Reihenfolge der Regeln ist entscheidend für die korrekte Funktionsweise. - -## Teil 2: Grundlegender SSR-Prozess - -- Initiale Anfrage und Umleitung - - Anfragen für spa.html werden durch die .htaccess-Datei umgeleitet zur SSR-Collection. - - Der originale Pfad wird als URL-Query-Parameter an die neue URL angehängt. - - Beispiel: Eine Anfrage an /dimitrisBuecher/veraltet wird umgeleitet, da die /api/ Rewrite-Regel nicht greift. -- Verarbeitung im Tibi-Server - - Gibt die Angefrage Seite zurück. - -## Teil 3: Detaillierte Erklärung des Caching und Rendering-Prozesses im SSR-Kontext - -- URL-Extraktion im SSR-Hook - - Der Prozess beginnt mit der Extraktion der URL im SSR-Hook. - - Diese Extraktion dient als Grundlage für die nachfolgenden Schritte des Rendering-Prozesses. -- Optionale Unterbindung von Caching - - Ein Boolean-Feld namens „Caching“ kann in der Content-Collection implementiert werden, um Caching selektiv zu steuern oder zu unterbinden. - - URL-Normalisierung und Existenzprüfung - - Die URL wird normalisiert, um Konsistenz zu gewährleisten. - - Anschließend wird überprüft, ob die normalisierte URL bereits in der SSR-Collection vorhanden ist. - - Für zeitlich begrenzte Sichtbarkeit von Seiten wird ein validUntil-Feld im Cache eingeführt und überprüft.(Nur wenn es für die Seite notwendig ist implementieren - aktuell in vde8 mit drin) -- Validierung des Pfades - - Der Pfad wird validiert, indem geprüft wird, ob die URL als Pfad in der Content-Collection existiert. - - Rückgabewerte bei der Validierung: - - -1, wenn der Pfad nicht gefunden wird (not found). - - 0, wenn der Pfad existiert, aber nicht gecacht werden darf. - - 1, wenn der Pfad existiert und gecacht werden darf. -- Cache-Vorbereitung bei Erlaubnis - - Bei Erlaubnis zum Cachen wird im Kontext-Objekt das ssrCache-Objekt sowie die ssrRequest-Funktion initialisiert. - - Diese Initialisierung ist entscheidend für das serverseitige App-Rendering. -- Serverseitiges App-Rendering - - In Server-Umgebungen (überprüft durch typeof window == "undefined") werden keine normalen Fetch-Requests ausgeführt, sondern stattdessen die ssrRequest-Funktion verwendet. - - Zugriff auf das Kontext-Objekt ist auch im serverseitigen App-Reader möglich, was die Nutzung der ssrRequest-Funktion ermöglicht. -- Setzen von ValidUntil und Durchführung der SSR-Request - - ValidUntil wird gesetzt, indem relevante Datensätze über context.db.find abgerufen werden. - - Überprüfung, ob Datensätze ein publishDate-Feld haben und ob dieses Datum relevant für das validUntil-Datum ist. - - Eine Request wird an die URL gesendet, das Ergebnis wird dann im ssrCache gespeichert. -- Cache-Key Generierung - - Der Cache-Key wird generiert, indem ein Objekt, das aus dem Endpoint und relevanten Parametern besteht, in einen String konvertiert wird. - - Als Wert wird die standardmäßige Response aus dem Frontend verwendet. -- Speicherung von Header und Body des Renderings - - Nach dem App-Rendering werden Header und Body in Variablen head und html gespeichert. - - Ein script-Tag, das window.**SSR_CACHE** auf context.ssrCache setzt, wird zum Header hinzugefügt. -- Clientseitige Fetch-Request-Optimierung - - Überprüfung, ob die aktuelle Anfrage bereits im window.**SSR_CACHE** vorhanden ist. - - Bei vorhandenen Anfragen wird der gespeicherte Wert über Promise.resolve() zurückgegeben, um redundante Anfragen zu vermeiden. -- Deaktivierung von SSR-Caching für spezielle Seiten - - Für Seiten wie Produktseiten wird empfohlen, das SSR-Caching über den Boolean zu deaktivieren, um zu verhindern, dass solche Anfragen in den Cache gelangen. -- Finalisierung des HTML-Dokuments - - Das Standard-spa.html-Dokument wird verwendet und mit den ermittelten Werten für Head, Body, Fehlermeldungen und Kommentaren ergänzt. - - Das resultierende HTML-Dokument wird in der SSR-Collection gespeichert und als Response an den Client gesendet. -- Ergebnis - - Der Client erhält eine vollständig gerenderte HTML-Seite, die serverseitig verarbeitet wurde, was die Effizienz erhöht und die Notwendigkeit zahlreicher Requests reduziert. - -## Teil 3: SSR-Cache-Management - -- Cache-Management in der Content-Collection - - Löschung der SSR-Collection bei jedem POST und PUT-Request. -- Workflow-Integration - - Als Teil des Workflows wird der SSR-Cache gelöscht, um die Auslieferung veralteter Seiten zu verhindern. - -### Dokumentation: SSR in der Entwicklungsumgebung - -#### Überblick - -In der Entwicklungsumgebung unterscheidet sich der Umgang mit Server-Side Rendering (SSR) von der Produktion, da hier die .htaccess keine Rolle spielt. Es sind spezielle Maßnahmen bei der Konfiguration von esbuild erforderlich. - -#### Schritte für die SSR-Konfiguration in der Entwicklungsumgebung - -- Anpassung der .env-Datei - - Setzen von START_SCRIPT=:ssr in der .env-Datei. - - Diese Einstellung wird in der Docker-compose-Datei verwendet, um zu bestimmen, welches Startskript für das Frontend verwendet werden soll. - - Auch auf dem Server muss logischerweise der SSR_TOKEN in der env gesetzt sein, damit einerseits die yml config Datei darauf zugreifen kann, aber esbuild auch darauf zugreifen kann (in der htaccess wird er statisch geschrieben) -- Verwendung von start:ssr - - Bei Verwendung von start:ssr wird die SSR-Variable gesetzt. - - Diese Variable ist notwendig für esbuild, um zu entscheiden, ob ein Proxy aktiviert werden soll. - - Proxy-Funktionalität in esbuild - - Der Proxy in esbuild übernimmt die Rolle der .htaccess. - - Er leitet Anfragen, die normalerweise an spa.html gehen würden, an die SSR-Collection weiter. -- Handhabung von Frontend-Änderungen - - Änderungen am Frontend werden nicht automatisch in SSR übernommen. - - Um die serverseitig vorliegende Version der App zu aktualisieren, muss yarn Build:server ausgeführt werden. -- Bewusster manueller Prozess - - Eine automatische Übernahme von Änderungen könnte die Ladezeiten nach einem Reload erheblich erhöhen. - - Um die Effizienz der Entwicklungsumgebung zu erhalten, wird der manuelle Prozess bevorzugt. -- Notwendige Nachbearbeitung nach Updates - - Nach dem Neubau der serverseitigen App-Version müssen aktuelle SSR-Einträge gelöscht werden. - - Ein Reboot des Tibi-Servers (durch Speichern in den Einstellungen) ist erforderlich, damit dieser die neue App-Version in den Cache aufnimmt. -- Integration von SSR im Entwicklungsprozess - - Aufgrund des aufwendigeren Prozesses wird empfohlen, SSR erst in einem späteren Stadium der Entwicklung zu integrieren. - - Dies ermöglicht eine effizientere Entwicklung ohne SSR, bevor dieses für die finale Version implementiert wird. - -### Anmerkungen: - -Anzumerken ist, dass alle zugriffe auf window, document, oder Funktionen wie setTimeout in der frontend app beim SSR Fehler werfen werden, daher muss immer eine Prüfung sicherstellen, das window nicht undefined ist. - -In der notFound komponente sollte man idealerweise context.is404 auf true setzen, damit sichergestellt wird, das die Seite unter keinen umständen gecached wird (backup zur vorherigen Prüfung in isValidPath Funktion…) - -Natürlich muss in der Serverseitigen env der entsprechende key für SSR access gesetzt werden. Dieser wird in esbuild gelesen und ist damit notwendig diff --git a/docs/md/tibi-aufbau.svg b/docs/md/tibi-aufbau.svg deleted file mode 100644 index c6a0ce8..0000000 --- a/docs/md/tibi-aufbau.svg +++ /dev/null @@ -1,5 +0,0 @@ - - - - - tibi-servertibi-server{}Datenbanktibi-admin- Datenpflege- getrennter Webspace (Sicherheit)/api/apiWebsite- beliebige Programmiersprache- losgelöstmobile App- gemeinsame Datenbasis mit z.B. Website über gleiches CMSBesucherRedakteuroptionalesserverseitigesRendern (JS)optionalesserverseitigesRendern (JS)SEO, Pagespeed, ...GoogleVorschauskalierbar (Cluster)JSONJSONJSONReplikationEmailHTMLJSONtibiCMS+ headless+ serverseitiges Rendering für SEO (Wiederverwendung Website-Javascript)+ in Go geschrieben -> Performance -> Sicherheit+ skalierbar{}Datenbank \ No newline at end of file diff --git a/docs/package.json b/docs/package.json deleted file mode 100644 index 86e720b..0000000 --- a/docs/package.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "name": "tibi-docs", - "version": "1.0.0", - "main": "README.md", - "repository": "https://gitbase.de/cms/tibi-docs", - "author": "Sebastian Frank ", - "license": "MIT", - "packageManager": "yarn@3.2.4", - "scripts": { - "docpress:serve": "docpress serve", - "docpress:build": "docpress build" - }, - "devDependencies": { - "docpress": "^0.8.2" - }, - "dependencies": { - "markdown-it-code-include": "./markdown-it-code-include" - } -} diff --git a/docs/yarn.lock b/docs/yarn.lock deleted file mode 100644 index 32e820e..0000000 --- a/docs/yarn.lock +++ /dev/null @@ -1,7181 +0,0 @@ -# This file is generated by running "yarn install" inside your project. -# Manual changes might be lost - proceed with caution! - -__metadata: - version: 6 - cacheKey: 8 - -"@gar/promisify@npm:^1.1.3": - version: 1.1.3 - resolution: "@gar/promisify@npm:1.1.3" - checksum: 4059f790e2d07bf3c3ff3e0fec0daa8144fe35c1f6e0111c9921bd32106adaa97a4ab096ad7dab1e28ee6a9060083c4d1a4ada42a7f5f3f7a96b8812e2b757c1 - languageName: node - linkType: hard - -"@npmcli/fs@npm:^2.1.0": - version: 2.1.2 - resolution: "@npmcli/fs@npm:2.1.2" - dependencies: - "@gar/promisify": ^1.1.3 - semver: ^7.3.5 - checksum: 405074965e72d4c9d728931b64d2d38e6ea12066d4fad651ac253d175e413c06fe4350970c783db0d749181da8fe49c42d3880bd1cbc12cd68e3a7964d820225 - languageName: node - linkType: hard - -"@npmcli/move-file@npm:^2.0.0": - version: 2.0.1 - resolution: "@npmcli/move-file@npm:2.0.1" - dependencies: - mkdirp: ^1.0.4 - rimraf: ^3.0.2 - checksum: 52dc02259d98da517fae4cb3a0a3850227bdae4939dda1980b788a7670636ca2b4a01b58df03dd5f65c1e3cb70c50fa8ce5762b582b3f499ec30ee5ce1fd9380 - languageName: node - linkType: hard - -"@tootallnate/once@npm:2": - version: 2.0.0 - resolution: "@tootallnate/once@npm:2.0.0" - checksum: ad87447820dd3f24825d2d947ebc03072b20a42bfc96cbafec16bff8bbda6c1a81fcb0be56d5b21968560c5359a0af4038a68ba150c3e1694fe4c109a063bed8 - languageName: node - linkType: hard - -"@types/babel-types@npm:*, @types/babel-types@npm:^7.0.0": - version: 7.0.11 - resolution: "@types/babel-types@npm:7.0.11" - checksum: 9b02719c7cf5062c9ab656a3b4efe3dd79e7a4ab49b5a2ce18d4ec1cb326588a1b40fc03863c24c9dec962f56762c53ed06cdc2a1c241c84e76e54a37a6195fc - languageName: node - linkType: hard - -"@types/babylon@npm:^6.16.2": - version: 6.16.6 - resolution: "@types/babylon@npm:6.16.6" - dependencies: - "@types/babel-types": "*" - checksum: c011e028bc09457b9a488e5ad8bc081b43c0c7919419343eaef95aeda5e5bb825dc93c323af8e60d97373702d94ae006016e7c641a9be24fef0d9f5ecc2e54c0 - languageName: node - linkType: hard - -"@types/keyv@npm:^3.1.1": - version: 3.1.4 - resolution: "@types/keyv@npm:3.1.4" - dependencies: - "@types/node": "*" - checksum: e009a2bfb50e90ca9b7c6e8f648f8464067271fd99116f881073fa6fa76dc8d0133181dd65e6614d5fb1220d671d67b0124aef7d97dc02d7e342ab143a47779d - languageName: node - linkType: hard - -"@types/node@npm:*": - version: 18.14.0 - resolution: "@types/node@npm:18.14.0" - checksum: d83fcf5e4ed544755dd9028f5cbb6b9d46235043159111bb2ad62223729aee581c0144a9f6df8ba73d74011db9ed4ebd7af2fd5e0996714e3beb508a5da8ac5c - languageName: node - linkType: hard - -"@types/responselike@npm:^1.0.0": - version: 1.0.0 - resolution: "@types/responselike@npm:1.0.0" - dependencies: - "@types/node": "*" - checksum: e99fc7cc6265407987b30deda54c1c24bb1478803faf6037557a774b2f034c5b097ffd65847daa87e82a61a250d919f35c3588654b0fdaa816906650f596d1b0 - languageName: node - linkType: hard - -"JSONStream@npm:^1.0.3": - version: 1.3.5 - resolution: "JSONStream@npm:1.3.5" - dependencies: - jsonparse: ^1.2.0 - through: ">=2.2.7 <3" - bin: - JSONStream: ./bin.js - checksum: 2605fa124260c61bad38bb65eba30d2f72216a78e94d0ab19b11b4e0327d572b8d530c0c9cc3b0764f727ad26d39e00bf7ebad57781ca6368394d73169c59e46 - languageName: node - linkType: hard - -"abbrev@npm:^1.0.0": - version: 1.1.1 - resolution: "abbrev@npm:1.1.1" - checksum: a4a97ec07d7ea112c517036882b2ac22f3109b7b19077dc656316d07d308438aac28e4d9746dc4d84bf6b1e75b4a7b0a5f3cb30592419f128ca9a8cee3bcfa17 - languageName: node - linkType: hard - -"absolute@npm:0.0.1": - version: 0.0.1 - resolution: "absolute@npm:0.0.1" - checksum: b420573b0680e89f45aab54c9e3880a3fe4abedfbebde6a57a477832df1721f866482b1aad8a8028c80ae1dd0a37a1db6291a43e9b381cae4db91062675af645 - languageName: node - linkType: hard - -"accepts@npm:~1.3.5": - version: 1.3.8 - resolution: "accepts@npm:1.3.8" - dependencies: - mime-types: ~2.1.34 - negotiator: 0.6.3 - checksum: 50c43d32e7b50285ebe84b613ee4a3aa426715a7d131b65b786e2ead0fd76b6b60091b9916d3478a75f11f162628a2139991b6c03ab3f1d9ab7c86075dc8eab4 - languageName: node - linkType: hard - -"acorn-globals@npm:^3.0.0": - version: 3.1.0 - resolution: "acorn-globals@npm:3.1.0" - dependencies: - acorn: ^4.0.4 - checksum: d6919d5e6c6f72b620ce93b9b762031bd100948dd1f947cf639f0760af29c57844c99bb4c3e4519b94d1da085afa62d56fc7c72d5592b8e5614cc52eb29671a1 - languageName: node - linkType: hard - -"acorn-node@npm:^1.2.0, acorn-node@npm:^1.3.0, acorn-node@npm:^1.5.2": - version: 1.8.2 - resolution: "acorn-node@npm:1.8.2" - dependencies: - acorn: ^7.0.0 - acorn-walk: ^7.0.0 - xtend: ^4.0.2 - checksum: 02e1564a1ccf8bd1fcefcd01235398af4a9effaf032c5397994ddd275590a72894cb3e26e4b82579ccdda1e48ade7486aef61e771ddae3563ca452b927f443d8 - languageName: node - linkType: hard - -"acorn-walk@npm:^7.0.0": - version: 7.2.0 - resolution: "acorn-walk@npm:7.2.0" - checksum: 9252158a79b9d92f1bc0dd6acc0fcfb87a67339e84bcc301bb33d6078936d27e35d606b4d35626d2962cd43c256d6f27717e70cbe15c04fff999ab0b2260b21f - languageName: node - linkType: hard - -"acorn@npm:^3.1.0": - version: 3.3.0 - resolution: "acorn@npm:3.3.0" - bin: - acorn: ./bin/acorn - checksum: d24aee1c838a3467c5ab493601ed4b646e4fd0599ca19b16f47f764e7929d0ffcb4d536935283a8d823d64ca3817d27dd5f93830bb86f592249d9feb0fcf78f9 - languageName: node - linkType: hard - -"acorn@npm:^4.0.4, acorn@npm:~4.0.2": - version: 4.0.13 - resolution: "acorn@npm:4.0.13" - bin: - acorn: ./bin/acorn - checksum: 1b7105ba91dc7797dbcfa6262e1b79b062e6e1bf9c9c627db0bf3454f97ba5ddc671c1da1b4a3b637d88dc453c839cb902263123d281998f0cfd876dfe8616b9 - languageName: node - linkType: hard - -"acorn@npm:^5.2.1": - version: 5.7.4 - resolution: "acorn@npm:5.7.4" - bin: - acorn: bin/acorn - checksum: f51392a4d25c7705fadb890f784c59cde4ac1c5452ccd569fa59bd2191b7951b4a6398348ab7ea08a54f0bc0a56c13776710f4e1bae9de441e4d33e2015ad1e0 - languageName: node - linkType: hard - -"acorn@npm:^7.0.0": - version: 7.4.1 - resolution: "acorn@npm:7.4.1" - bin: - acorn: bin/acorn - checksum: 1860f23c2107c910c6177b7b7be71be350db9e1080d814493fae143ae37605189504152d1ba8743ba3178d0b37269ce1ffc42b101547fdc1827078f82671e407 - languageName: node - linkType: hard - -"agent-base@npm:6, agent-base@npm:^6.0.2": - version: 6.0.2 - resolution: "agent-base@npm:6.0.2" - dependencies: - debug: 4 - checksum: f52b6872cc96fd5f622071b71ef200e01c7c4c454ee68bc9accca90c98cfb39f2810e3e9aa330435835eedc8c23f4f8a15267f67c6e245d2b33757575bdac49d - languageName: node - linkType: hard - -"agentkeepalive@npm:^4.2.1": - version: 4.2.1 - resolution: "agentkeepalive@npm:4.2.1" - dependencies: - debug: ^4.1.0 - depd: ^1.1.2 - humanize-ms: ^1.2.1 - checksum: 39cb49ed8cf217fd6da058a92828a0a84e0b74c35550f82ee0a10e1ee403c4b78ade7948be2279b188b7a7303f5d396ea2738b134731e464bf28de00a4f72a18 - languageName: node - linkType: hard - -"aggregate-error@npm:^3.0.0": - version: 3.1.0 - resolution: "aggregate-error@npm:3.1.0" - dependencies: - clean-stack: ^2.0.0 - indent-string: ^4.0.0 - checksum: 1101a33f21baa27a2fa8e04b698271e64616b886795fd43c31068c07533c7b3facfcaf4e9e0cab3624bd88f729a592f1c901a1a229c9e490eafce411a8644b79 - languageName: node - linkType: hard - -"align-text@npm:^0.1.1, align-text@npm:^0.1.3": - version: 0.1.4 - resolution: "align-text@npm:0.1.4" - dependencies: - kind-of: ^3.0.2 - longest: ^1.0.1 - repeat-string: ^1.5.2 - checksum: b4970e6bcca5b436b1f5645d4efca4d8ea18fd3d0f2dfcbde79df92aa21019076def35d9b5b0428d1c69ee77b21290f8f108f86c497e6f834cddf270dccb5829 - languageName: node - linkType: hard - -"alter@npm:~0.2.0": - version: 0.2.0 - resolution: "alter@npm:0.2.0" - dependencies: - stable: ~0.1.3 - checksum: 6a6620004fe250e7aec7284a8e0b372fbfa703cefd65b8696dcd0cc0703b03adaaf16231146b7dbf889a8dd2650b7b55780889979d6874410734702e21c03c8e - languageName: node - linkType: hard - -"amdefine@npm:>=0.0.4": - version: 1.0.1 - resolution: "amdefine@npm:1.0.1" - checksum: 9d4e15b94641643a9385b2841b4cb2bcf4e8e2f741ea4bd475c93ad7bab261ad4ed827a32e9c549b38b98759c4526c173ae4e6dde8caeb75ee5cebedc9863762 - languageName: node - linkType: hard - -"ansi-align@npm:^2.0.0": - version: 2.0.0 - resolution: "ansi-align@npm:2.0.0" - dependencies: - string-width: ^2.0.0 - checksum: fecefb3b4a128aaad52ed1d2ee2f999968acc77573645be49666273ec2952840e27aed8cb9c2e48cd0c2d5a088389223eabb6d09aa74bceba3b931d242288c97 - languageName: node - linkType: hard - -"ansi-escapes@npm:^1.1.0": - version: 1.4.0 - resolution: "ansi-escapes@npm:1.4.0" - checksum: 287f18ea70cde710dbb83b6b6c4e1d62fcb962b951a601d976df69478a4ebdff6305691e3befb9053d740060544929732b8bade7a9781611dcd2b997e6bda3d6 - languageName: node - linkType: hard - -"ansi-red@npm:^0.1.1": - version: 0.1.1 - resolution: "ansi-red@npm:0.1.1" - dependencies: - ansi-wrap: 0.1.0 - checksum: 84442078e6ae34c79ada32d43d40956e0f953204626be4c562431761407b4388a573cfff950c78a6c8fa20e9eed12441ac8d1c89864d6a35df53e9ef7fce2b98 - languageName: node - linkType: hard - -"ansi-regex@npm:^2.0.0": - version: 2.1.1 - resolution: "ansi-regex@npm:2.1.1" - checksum: 190abd03e4ff86794f338a31795d262c1dfe8c91f7e01d04f13f646f1dcb16c5800818f886047876f1272f065570ab86b24b99089f8b68a0e11ff19aed4ca8f1 - languageName: node - linkType: hard - -"ansi-regex@npm:^3.0.0": - version: 3.0.1 - resolution: "ansi-regex@npm:3.0.1" - checksum: 09daf180c5f59af9850c7ac1bd7fda85ba596cc8cbeb210826e90755f06c818af86d9fa1e6e8322fab2c3b9e9b03f56c537b42241139f824dd75066a1e7257cc - languageName: node - linkType: hard - -"ansi-regex@npm:^5.0.1": - version: 5.0.1 - resolution: "ansi-regex@npm:5.0.1" - checksum: 2aa4bb54caf2d622f1afdad09441695af2a83aa3fe8b8afa581d205e57ed4261c183c4d3877cee25794443fde5876417d859c108078ab788d6af7e4fe52eb66b - languageName: node - linkType: hard - -"ansi-styles@npm:^2.2.1": - version: 2.2.1 - resolution: "ansi-styles@npm:2.2.1" - checksum: ebc0e00381f2a29000d1dac8466a640ce11943cef3bda3cd0020dc042e31e1058ab59bf6169cd794a54c3a7338a61ebc404b7c91e004092dd20e028c432c9c2c - languageName: node - linkType: hard - -"ansi-styles@npm:^3.2.1": - version: 3.2.1 - resolution: "ansi-styles@npm:3.2.1" - dependencies: - color-convert: ^1.9.0 - checksum: d85ade01c10e5dd77b6c89f34ed7531da5830d2cb5882c645f330079975b716438cd7ebb81d0d6e6b4f9c577f19ae41ab55f07f19786b02f9dfd9e0377395665 - languageName: node - linkType: hard - -"ansi-styles@npm:^4.0.0": - version: 4.3.0 - resolution: "ansi-styles@npm:4.3.0" - dependencies: - color-convert: ^2.0.1 - checksum: 513b44c3b2105dd14cc42a19271e80f386466c4be574bccf60b627432f9198571ebf4ab1e4c3ba17347658f4ee1711c163d574248c0c1cdc2d5917a0ad582ec4 - languageName: node - linkType: hard - -"ansi-wrap@npm:0.1.0": - version: 0.1.0 - resolution: "ansi-wrap@npm:0.1.0" - checksum: f24f652a5e450c0561cbc7d298ffa62dcd33c72f9da34fd3c24538dbf82de8fc21b7f924dc30cd9d01360bd2893d1954f0a60eee0550ca629bb148dcbeef5c5b - languageName: node - linkType: hard - -"any-promise@npm:^1.0.0": - version: 1.3.0 - resolution: "any-promise@npm:1.3.0" - checksum: 0ee8a9bdbe882c90464d75d1f55cf027f5458650c4bd1f0467e65aec38ccccda07ca5844969ee77ed46d04e7dded3eaceb027e8d32f385688523fe305fa7e1de - languageName: node - linkType: hard - -"anymatch@npm:^2.0.0": - version: 2.0.0 - resolution: "anymatch@npm:2.0.0" - dependencies: - micromatch: ^3.1.4 - normalize-path: ^2.1.1 - checksum: f7bb1929842b4585cdc28edbb385767d499ce7d673f96a8f11348d2b2904592ffffc594fe9229b9a1e9e4dccb9329b7692f9f45e6a11dcefbb76ecdc9ab740f6 - languageName: node - linkType: hard - -"aproba@npm:^1.0.3 || ^2.0.0": - version: 2.0.0 - resolution: "aproba@npm:2.0.0" - checksum: 5615cadcfb45289eea63f8afd064ab656006361020e1735112e346593856f87435e02d8dcc7ff0d11928bc7d425f27bc7c2a84f6c0b35ab0ff659c814c138a24 - languageName: node - linkType: hard - -"are-we-there-yet@npm:^3.0.0": - version: 3.0.1 - resolution: "are-we-there-yet@npm:3.0.1" - dependencies: - delegates: ^1.0.0 - readable-stream: ^3.6.0 - checksum: 52590c24860fa7173bedeb69a4c05fb573473e860197f618b9a28432ee4379049336727ae3a1f9c4cb083114601c1140cee578376164d0e651217a9843f9fe83 - languageName: node - linkType: hard - -"argparse@npm:^1.0.7": - version: 1.0.10 - resolution: "argparse@npm:1.0.10" - dependencies: - sprintf-js: ~1.0.2 - checksum: 7ca6e45583a28de7258e39e13d81e925cfa25d7d4aacbf806a382d3c02fcb13403a07fb8aeef949f10a7cfe4a62da0e2e807b348a5980554cc28ee573ef95945 - languageName: node - linkType: hard - -"arr-diff@npm:^4.0.0": - version: 4.0.0 - resolution: "arr-diff@npm:4.0.0" - checksum: ea7c8834842ad3869297f7915689bef3494fd5b102ac678c13ffccab672d3d1f35802b79e90c4cfec2f424af3392e44112d1ccf65da34562ed75e049597276a0 - languageName: node - linkType: hard - -"arr-flatten@npm:^1.1.0": - version: 1.1.0 - resolution: "arr-flatten@npm:1.1.0" - checksum: 963fe12564fca2f72c055f3f6c206b9e031f7c433a0c66ca9858b484821f248c5b1e5d53c8e4989d80d764cd776cf6d9b160ad05f47bdc63022bfd63b5455e22 - languageName: node - linkType: hard - -"arr-union@npm:^3.1.0": - version: 3.1.0 - resolution: "arr-union@npm:3.1.0" - checksum: b5b0408c6eb7591143c394f3be082fee690ddd21f0fdde0a0a01106799e847f67fcae1b7e56b0a0c173290e29c6aca9562e82b300708a268bc8f88f3d6613cb9 - languageName: node - linkType: hard - -"array-find-index@npm:^1.0.1": - version: 1.0.2 - resolution: "array-find-index@npm:1.0.2" - checksum: aac128bf369e1ac6c06ff0bb330788371c0e256f71279fb92d745e26fb4b9db8920e485b4ec25e841c93146bf71a34dcdbcefa115e7e0f96927a214d237b7081 - languageName: node - linkType: hard - -"array-flatten@npm:3.0.0": - version: 3.0.0 - resolution: "array-flatten@npm:3.0.0" - checksum: ad00c51ca70cf837501fb6da823ba39bc6a86b43d0b76d840daa02fe0f8e68e94ad5bc2d0d038053118b879aaca8ea6168c32c7387a2fa5b118ad28db4f1f863 - languageName: node - linkType: hard - -"array-flatten@npm:^1.0.0": - version: 1.1.1 - resolution: "array-flatten@npm:1.1.1" - checksum: a9925bf3512d9dce202112965de90c222cd59a4fbfce68a0951d25d965cf44642931f40aac72309c41f12df19afa010ecadceb07cfff9ccc1621e99d89ab5f3b - languageName: node - linkType: hard - -"array-unique@npm:^0.3.2": - version: 0.3.2 - resolution: "array-unique@npm:0.3.2" - checksum: da344b89cfa6b0a5c221f965c21638bfb76b57b45184a01135382186924f55973cd9b171d4dad6bf606c6d9d36b0d721d091afdc9791535ead97ccbe78f8a888 - languageName: node - linkType: hard - -"arrify@npm:^1.0.1": - version: 1.0.1 - resolution: "arrify@npm:1.0.1" - checksum: 745075dd4a4624ff0225c331dacb99be501a515d39bcb7c84d24660314a6ec28e68131b137e6f7e16318170842ce97538cd298fc4cd6b2cc798e0b957f2747e7 - languageName: node - linkType: hard - -"as-array@npm:^1.0.0": - version: 1.0.0 - resolution: "as-array@npm:1.0.0" - dependencies: - lodash.isarguments: 2.4.x - lodash.isobject: ^2.4.1 - lodash.values: ^2.4.1 - checksum: 96d192b08cdbd7e3f8336906446b4997c2f33781fa76c4a539e4889853867679dc583eb545d8900c1a6323403e7c8dd86af126ce9d2f299415d3f99927829741 - languageName: node - linkType: hard - -"as-array@npm:^2.0.0": - version: 2.0.0 - resolution: "as-array@npm:2.0.0" - checksum: 8d743c7aa4fbb9f3158ec6bef5119939b044cc2456c2eb2ed4a3a0912e480bb7eb7346238e9313f075d0f5ceb5b65659245e735405343f51476330f422b12476 - languageName: node - linkType: hard - -"asap@npm:~2.0.3": - version: 2.0.6 - resolution: "asap@npm:2.0.6" - checksum: b296c92c4b969e973260e47523207cd5769abd27c245a68c26dc7a0fe8053c55bb04360237cb51cab1df52be939da77150ace99ad331fb7fb13b3423ed73ff3d - languageName: node - linkType: hard - -"asn1.js@npm:^5.2.0": - version: 5.4.1 - resolution: "asn1.js@npm:5.4.1" - dependencies: - bn.js: ^4.0.0 - inherits: ^2.0.1 - minimalistic-assert: ^1.0.0 - safer-buffer: ^2.1.0 - checksum: 3786a101ac6f304bd4e9a7df79549a7561950a13d4bcaec0c7790d44c80d147c1a94ba3d4e663673406064642a40b23fcd6c82a9952468e386c1a1376d747f9a - languageName: node - linkType: hard - -"assert@npm:~1.3.0": - version: 1.3.0 - resolution: "assert@npm:1.3.0" - dependencies: - util: 0.10.3 - checksum: bd6bfd8358b29783a272649036c2d943109eec9f1c95424c2292c68043b304d82fa828559d76481865b0d1f48f8b0a4f9ab9cfee96e670b5b2bed4f3ad38d6d3 - languageName: node - linkType: hard - -"assign-symbols@npm:^1.0.0": - version: 1.0.0 - resolution: "assign-symbols@npm:1.0.0" - checksum: c0eb895911d05b6b2d245154f70461c5e42c107457972e5ebba38d48967870dee53bcdf6c7047990586daa80fab8dab3cc6300800fbd47b454247fdedd859a2c - languageName: node - linkType: hard - -"ast-traverse@npm:~0.1.1": - version: 0.1.1 - resolution: "ast-traverse@npm:0.1.1" - checksum: 2004256b23e0917d98f4148a257ccb4c415d1f970b337c8019588bb364d5dc099bd9ff035b837e56c7d9a80723e27754e8d8882707a3ed7690f5af3934cccbb2 - languageName: node - linkType: hard - -"ast-types@npm:0.8.12": - version: 0.8.12 - resolution: "ast-types@npm:0.8.12" - checksum: 69de100435d95f5a56cd5d20552916b5f9e0acc61ff178b22eb857c0fe59b540fc09bbdf4b7fd327e9c69ea35e6e575085ecb1fb8e9385dfa53edcbbc9055532 - languageName: node - linkType: hard - -"ast-types@npm:0.9.6": - version: 0.9.6 - resolution: "ast-types@npm:0.9.6" - checksum: 6b75831c192963453eaeaedaa9db41823cd964bfb9c40ad8da6e978393dd66611f8cc4f778ecabce6a4a9b44a04c83b2571d98fcb561b87596d7b2ea796447db - languageName: node - linkType: hard - -"async-each@npm:^1.0.1": - version: 1.0.6 - resolution: "async-each@npm:1.0.6" - checksum: d237e8c39348d5f1441edbd3893692912afbacaf83a2ccce8978ebeea804529a8838654b12208fbbc08c8b0411a1248948ee9bf9291ebe1921aabd5b613bc5db - languageName: node - linkType: hard - -"async@npm:^1.3.0, async@npm:^1.5.2": - version: 1.5.2 - resolution: "async@npm:1.5.2" - checksum: fe5d6214d8f15bd51eee5ae8ec5079b228b86d2d595f47b16369dec2e11b3ff75a567bb5f70d12d79006665fbbb7ee0a7ec0e388524eefd454ecbe651c124ebd - languageName: node - linkType: hard - -"atob@npm:^2.1.2": - version: 2.1.2 - resolution: "atob@npm:2.1.2" - bin: - atob: bin/atob.js - checksum: dfeeeb70090c5ebea7be4b9f787f866686c645d9f39a0d184c817252d0cf08455ed25267d79c03254d3be1f03ac399992a792edcd5ffb9c91e097ab5ef42833a - languageName: node - linkType: hard - -"autoprefixer@npm:6.5.3": - version: 6.5.3 - resolution: "autoprefixer@npm:6.5.3" - dependencies: - browserslist: ~1.4.0 - caniuse-db: ^1.0.30000578 - normalize-range: ^0.1.2 - num2fraction: ^1.2.2 - postcss: ^5.2.5 - postcss-value-parser: ^3.2.3 - checksum: 4150a43efd7392ebf02c4bd5cb8ca5e3bbf50bef26c5b5139d7b5aea50e5e93e950596ebc419b8efa844bbce658bb9e3a00aca90efb0e0cb1ea3f00f42e9bfa6 - languageName: node - linkType: hard - -"babel-runtime@npm:^6.26.0": - version: 6.26.0 - resolution: "babel-runtime@npm:6.26.0" - dependencies: - core-js: ^2.4.0 - regenerator-runtime: ^0.11.0 - checksum: 8aeade94665e67a73c1ccc10f6fd42ba0c689b980032b70929de7a6d9a12eb87ef51902733f8fefede35afea7a5c3ef7e916a64d503446c1eedc9e3284bd3d50 - languageName: node - linkType: hard - -"babel-types@npm:^6.26.0": - version: 6.26.0 - resolution: "babel-types@npm:6.26.0" - dependencies: - babel-runtime: ^6.26.0 - esutils: ^2.0.2 - lodash: ^4.17.4 - to-fast-properties: ^1.0.3 - checksum: d16b0fa86e9b0e4c2623be81d0a35679faff24dd2e43cde4ca58baf49f3e39415a011a889e6c2259ff09e1228e4c3a3db6449a62de59e80152fe1ce7398fde76 - languageName: node - linkType: hard - -"babylon@npm:^6.18.0": - version: 6.18.0 - resolution: "babylon@npm:6.18.0" - bin: - babylon: ./bin/babylon.js - checksum: 0777ae0c735ce1cbfc856d627589ed9aae212b84fb0c03c368b55e6c5d3507841780052808d0ad46e18a2ba516e93d55eeed8cd967f3b2938822dfeccfb2a16d - languageName: node - linkType: hard - -"balanced-match@npm:^1.0.0": - version: 1.0.2 - resolution: "balanced-match@npm:1.0.2" - checksum: 9706c088a283058a8a99e0bf91b0a2f75497f185980d9ffa8b304de1d9e58ebda7c72c07ebf01dadedaac5b2907b2c6f566f660d62bd336c3468e960403b9d65 - languageName: node - linkType: hard - -"base64-js@npm:^1.0.2": - version: 1.5.1 - resolution: "base64-js@npm:1.5.1" - checksum: 669632eb3745404c2f822a18fc3a0122d2f9a7a13f7fb8b5823ee19d1d2ff9ee5b52c53367176ea4ad093c332fd5ab4bd0ebae5a8e27917a4105a4cfc86b1005 - languageName: node - linkType: hard - -"base@npm:^0.11.1": - version: 0.11.2 - resolution: "base@npm:0.11.2" - dependencies: - cache-base: ^1.0.1 - class-utils: ^0.3.5 - component-emitter: ^1.2.1 - define-property: ^1.0.0 - isobject: ^3.0.1 - mixin-deep: ^1.2.0 - pascalcase: ^0.1.1 - checksum: a4a146b912e27eea8f66d09cb0c9eab666f32ce27859a7dfd50f38cd069a2557b39f16dba1bc2aecb3b44bf096738dd207b7970d99b0318423285ab1b1994edd - languageName: node - linkType: hard - -"basic-auth-connect@npm:^1.0.0": - version: 1.0.0 - resolution: "basic-auth-connect@npm:1.0.0" - checksum: f62e7fd17c9fce3915956707878a2bed9670a0f179ca82cc413882d24acd4d7f42eb6a17ccc3b863c401ab0ba06ffe9f8dd24c295374494fd616e0acaa69f669 - languageName: node - linkType: hard - -"basic-auth@npm:~2.0.1": - version: 2.0.1 - resolution: "basic-auth@npm:2.0.1" - dependencies: - safe-buffer: 5.1.2 - checksum: 3419b805d5dfc518f3a05dcf42aa53aa9ce820e50b6df5097f9e186322e1bc733c36722b624802cd37e791035aa73b828ed814d8362333d42d7f5cd04d7a5e48 - languageName: node - linkType: hard - -"binary-extensions@npm:^1.0.0": - version: 1.13.1 - resolution: "binary-extensions@npm:1.13.1" - checksum: ad7747f33c07e94ba443055de130b50c8b8b130a358bca064c580d91769ca6a69c7ac65ca008ff044ed4541d2c6ad45496e1fadbef5218a68770996b6a2194d7 - languageName: node - linkType: hard - -"bindings@npm:^1.5.0": - version: 1.5.0 - resolution: "bindings@npm:1.5.0" - dependencies: - file-uri-to-path: 1.0.0 - checksum: 65b6b48095717c2e6105a021a7da4ea435aa8d3d3cd085cb9e85bcb6e5773cf318c4745c3f7c504412855940b585bdf9b918236612a1c7a7942491de176f1ae7 - languageName: node - linkType: hard - -"bn.js@npm:^4.0.0, bn.js@npm:^4.1.0, bn.js@npm:^4.11.9": - version: 4.12.0 - resolution: "bn.js@npm:4.12.0" - checksum: 39afb4f15f4ea537b55eaf1446c896af28ac948fdcf47171961475724d1bb65118cca49fa6e3d67706e4790955ec0e74de584e45c8f1ef89f46c812bee5b5a12 - languageName: node - linkType: hard - -"bn.js@npm:^5.0.0, bn.js@npm:^5.1.1": - version: 5.2.1 - resolution: "bn.js@npm:5.2.1" - checksum: 3dd8c8d38055fedfa95c1d5fc3c99f8dd547b36287b37768db0abab3c239711f88ff58d18d155dd8ad902b0b0cee973747b7ae20ea12a09473272b0201c9edd3 - languageName: node - linkType: hard - -"body@npm:^5.1.0": - version: 5.1.0 - resolution: "body@npm:5.1.0" - dependencies: - continuable-cache: ^0.3.1 - error: ^7.0.0 - raw-body: ~1.1.0 - safe-json-parse: ~1.0.1 - checksum: 58a5a46b6de80c82ee2f6e00bdc0084be1697d50e47cfa0d53ff6daf70b0e5ec20359c134d41710d0fa8046ecd67e06128c134c821f090e40a31ed452a9b6b7f - languageName: node - linkType: hard - -"boolbase@npm:~1.0.0": - version: 1.0.0 - resolution: "boolbase@npm:1.0.0" - checksum: 3e25c80ef626c3a3487c73dbfc70ac322ec830666c9ad915d11b701142fab25ec1e63eff2c450c74347acfd2de854ccde865cd79ef4db1683f7c7b046ea43bb0 - languageName: node - linkType: hard - -"boxen@npm:^1.2.1": - version: 1.3.0 - resolution: "boxen@npm:1.3.0" - dependencies: - ansi-align: ^2.0.0 - camelcase: ^4.0.0 - chalk: ^2.0.1 - cli-boxes: ^1.0.0 - string-width: ^2.0.0 - term-size: ^1.2.0 - widest-line: ^2.0.0 - checksum: 8dad2081bfaf5a86cb85685882b5f22027c5c430ee0974894078f521a44d92a90222fb4391b41fc4575aa1215c9133ea2c6b7feadcd1cb2fae8f4e97c05dbf11 - languageName: node - linkType: hard - -"brace-expansion@npm:^1.1.7": - version: 1.1.11 - resolution: "brace-expansion@npm:1.1.11" - dependencies: - balanced-match: ^1.0.0 - concat-map: 0.0.1 - checksum: faf34a7bb0c3fcf4b59c7808bc5d2a96a40988addf2e7e09dfbb67a2251800e0d14cd2bfc1aa79174f2f5095c54ff27f46fb1289fe2d77dac755b5eb3434cc07 - languageName: node - linkType: hard - -"brace-expansion@npm:^2.0.1": - version: 2.0.1 - resolution: "brace-expansion@npm:2.0.1" - dependencies: - balanced-match: ^1.0.0 - checksum: a61e7cd2e8a8505e9f0036b3b6108ba5e926b4b55089eeb5550cd04a471fe216c96d4fe7e4c7f995c728c554ae20ddfc4244cad10aef255e72b62930afd233d1 - languageName: node - linkType: hard - -"braces@npm:^2.3.1, braces@npm:^2.3.2": - version: 2.3.2 - resolution: "braces@npm:2.3.2" - dependencies: - arr-flatten: ^1.1.0 - array-unique: ^0.3.2 - extend-shallow: ^2.0.1 - fill-range: ^4.0.0 - isobject: ^3.0.1 - repeat-element: ^1.1.2 - snapdragon: ^0.8.1 - snapdragon-node: ^2.0.1 - split-string: ^3.0.2 - to-regex: ^3.0.1 - checksum: e30dcb6aaf4a31c8df17d848aa283a65699782f75ad61ae93ec25c9729c66cf58e66f0000a9fec84e4add1135bb7da40f7cb9601b36bebcfa9ca58e8d5c07de0 - languageName: node - linkType: hard - -"braces@npm:^3.0.2": - version: 3.0.2 - resolution: "braces@npm:3.0.2" - dependencies: - fill-range: ^7.0.1 - checksum: e2a8e769a863f3d4ee887b5fe21f63193a891c68b612ddb4b68d82d1b5f3ff9073af066c343e9867a393fe4c2555dcb33e89b937195feb9c1613d259edfcd459 - languageName: node - linkType: hard - -"breakable@npm:~1.0.0": - version: 1.0.0 - resolution: "breakable@npm:1.0.0" - checksum: f6bb3db6e927211abcff5edf4b3212dd857c92bd15135d42613eefbffc3288b03e194be335d19a3db2957079d0d75c71c87846ff3e40a379261ccc058c954d96 - languageName: node - linkType: hard - -"brorand@npm:^1.0.1, brorand@npm:^1.1.0": - version: 1.1.0 - resolution: "brorand@npm:1.1.0" - checksum: 8a05c9f3c4b46572dec6ef71012b1946db6cae8c7bb60ccd4b7dd5a84655db49fe043ecc6272e7ef1f69dc53d6730b9e2a3a03a8310509a3d797a618cbee52be - languageName: node - linkType: hard - -"browser-pack@npm:^6.0.1": - version: 6.1.0 - resolution: "browser-pack@npm:6.1.0" - dependencies: - JSONStream: ^1.0.3 - combine-source-map: ~0.8.0 - defined: ^1.0.0 - safe-buffer: ^5.1.1 - through2: ^2.0.0 - umd: ^3.0.0 - bin: - browser-pack: bin/cmd.js - checksum: 9e5993d3eefb7c56a68cfc8810e59a2920481f93bdcb0a53e07b322f273f697cfeb3a2302aa7fc0f725d29be0e8cc629561f463f2c8b06e2958497869d42cc53 - languageName: node - linkType: hard - -"browser-resolve@npm:^1.11.0, browser-resolve@npm:^1.7.0": - version: 1.11.3 - resolution: "browser-resolve@npm:1.11.3" - dependencies: - resolve: 1.1.7 - checksum: 431bfc1a17406362a3010a2c35503eb7d1253dbcb8081c1ce236ddb0b954a33d52dcaf0b07f64c0f20394d6eeec1be4f6551da3734ce9ed5dcc38e876c96d5d5 - languageName: node - linkType: hard - -"browserify-aes@npm:^1.0.0, browserify-aes@npm:^1.0.4": - version: 1.2.0 - resolution: "browserify-aes@npm:1.2.0" - dependencies: - buffer-xor: ^1.0.3 - cipher-base: ^1.0.0 - create-hash: ^1.1.0 - evp_bytestokey: ^1.0.3 - inherits: ^2.0.1 - safe-buffer: ^5.0.1 - checksum: 4a17c3eb55a2aa61c934c286f34921933086bf6d67f02d4adb09fcc6f2fc93977b47d9d884c25619144fccd47b3b3a399e1ad8b3ff5a346be47270114bcf7104 - languageName: node - linkType: hard - -"browserify-cipher@npm:^1.0.0": - version: 1.0.1 - resolution: "browserify-cipher@npm:1.0.1" - dependencies: - browserify-aes: ^1.0.4 - browserify-des: ^1.0.0 - evp_bytestokey: ^1.0.0 - checksum: 2d8500acf1ee535e6bebe808f7a20e4c3a9e2ed1a6885fff1facbfd201ac013ef030422bec65ca9ece8ffe82b03ca580421463f9c45af6c8415fd629f4118c13 - languageName: node - linkType: hard - -"browserify-des@npm:^1.0.0": - version: 1.0.2 - resolution: "browserify-des@npm:1.0.2" - dependencies: - cipher-base: ^1.0.1 - des.js: ^1.0.0 - inherits: ^2.0.1 - safe-buffer: ^5.1.2 - checksum: b15a3e358a1d78a3b62ddc06c845d02afde6fc826dab23f1b9c016e643e7b1fda41de628d2110b712f6a44fb10cbc1800bc6872a03ddd363fb50768e010395b7 - languageName: node - linkType: hard - -"browserify-rsa@npm:^4.0.0, browserify-rsa@npm:^4.0.1": - version: 4.1.0 - resolution: "browserify-rsa@npm:4.1.0" - dependencies: - bn.js: ^5.0.0 - randombytes: ^2.0.1 - checksum: 155f0c135873efc85620571a33d884aa8810e40176125ad424ec9d85016ff105a07f6231650914a760cca66f29af0494087947b7be34880dd4599a0cd3c38e54 - languageName: node - linkType: hard - -"browserify-sign@npm:^4.0.0": - version: 4.2.1 - resolution: "browserify-sign@npm:4.2.1" - dependencies: - bn.js: ^5.1.1 - browserify-rsa: ^4.0.1 - create-hash: ^1.2.0 - create-hmac: ^1.1.7 - elliptic: ^6.5.3 - inherits: ^2.0.4 - parse-asn1: ^5.1.5 - readable-stream: ^3.6.0 - safe-buffer: ^5.2.0 - checksum: 0221f190e3f5b2d40183fa51621be7e838d9caa329fe1ba773406b7637855f37b30f5d83e52ff8f244ed12ffe6278dd9983638609ed88c841ce547e603855707 - languageName: node - linkType: hard - -"browserify-zlib@npm:~0.1.2": - version: 0.1.4 - resolution: "browserify-zlib@npm:0.1.4" - dependencies: - pako: ~0.2.0 - checksum: abee4cb4349e8a21391fd874564f41b113fe691372913980e6fa06a777e4ea2aad4e942af14ab99bce190d5ac8f5328201432f4ef0eae48c6d02208bc212976f - languageName: node - linkType: hard - -"browserify@npm:13.1.1": - version: 13.1.1 - resolution: "browserify@npm:13.1.1" - dependencies: - JSONStream: ^1.0.3 - assert: ~1.3.0 - browser-pack: ^6.0.1 - browser-resolve: ^1.11.0 - browserify-zlib: ~0.1.2 - buffer: ^4.1.0 - cached-path-relative: ^1.0.0 - concat-stream: ~1.5.1 - console-browserify: ^1.1.0 - constants-browserify: ~1.0.0 - crypto-browserify: ^3.0.0 - defined: ^1.0.0 - deps-sort: ^2.0.0 - domain-browser: ~1.1.0 - duplexer2: ~0.1.2 - events: ~1.1.0 - glob: ^5.0.15 - has: ^1.0.0 - htmlescape: ^1.1.0 - https-browserify: ~0.0.0 - inherits: ~2.0.1 - insert-module-globals: ^7.0.0 - labeled-stream-splicer: ^2.0.0 - module-deps: ^4.0.8 - os-browserify: ~0.1.1 - parents: ^1.0.1 - path-browserify: ~0.0.0 - process: ~0.11.0 - punycode: ^1.3.2 - querystring-es3: ~0.2.0 - read-only-stream: ^2.0.0 - readable-stream: ^2.0.2 - resolve: ^1.1.4 - shasum: ^1.0.0 - shell-quote: ^1.4.3 - stream-browserify: ^2.0.0 - stream-http: ^2.0.0 - string_decoder: ~0.10.0 - subarg: ^1.0.0 - syntax-error: ^1.1.1 - through2: ^2.0.0 - timers-browserify: ^1.0.1 - tty-browserify: ~0.0.0 - url: ~0.11.0 - util: ~0.10.1 - vm-browserify: ~0.0.1 - xtend: ^4.0.0 - bin: - browserify: bin/cmd.js - checksum: dbab3a7a2199a0cc72e616c20ea3fa77b5484d08c5a5344ad42fdea421dcb070e6e6d528869e647cc6091b7adfc4c1527cc5a64f529860b4ac6d605c4d907988 - languageName: node - linkType: hard - -"browserslist@npm:~1.4.0": - version: 1.4.0 - resolution: "browserslist@npm:1.4.0" - dependencies: - caniuse-db: ^1.0.30000539 - bin: - browserslist: ./cli.js - checksum: 1131d9426f52341850b74898fc42e32c878b7695bcf5640f7d820d111f3fc07c60325de3076e1dd0966ec76f598d5e161f7c07fe5f547fb745f63a840d29fb1c - languageName: node - linkType: hard - -"buffer-from@npm:^1.0.0": - version: 1.1.2 - resolution: "buffer-from@npm:1.1.2" - checksum: 0448524a562b37d4d7ed9efd91685a5b77a50672c556ea254ac9a6d30e3403a517d8981f10e565db24e8339413b43c97ca2951f10e399c6125a0d8911f5679bb - languageName: node - linkType: hard - -"buffer-xor@npm:^1.0.3": - version: 1.0.3 - resolution: "buffer-xor@npm:1.0.3" - checksum: 10c520df29d62fa6e785e2800e586a20fc4f6dfad84bcdbd12e1e8a83856de1cb75c7ebd7abe6d036bbfab738a6cf18a3ae9c8e5a2e2eb3167ca7399ce65373a - languageName: node - linkType: hard - -"buffer@npm:^4.1.0": - version: 4.9.2 - resolution: "buffer@npm:4.9.2" - dependencies: - base64-js: ^1.0.2 - ieee754: ^1.1.4 - isarray: ^1.0.0 - checksum: 8801bc1ba08539f3be70eee307a8b9db3d40f6afbfd3cf623ab7ef41dffff1d0a31de0addbe1e66e0ca5f7193eeb667bfb1ecad3647f8f1b0750de07c13295c3 - languageName: node - linkType: hard - -"builtin-status-codes@npm:^3.0.0": - version: 3.0.0 - resolution: "builtin-status-codes@npm:3.0.0" - checksum: 1119429cf4b0d57bf76b248ad6f529167d343156ebbcc4d4e4ad600484f6bc63002595cbb61b67ad03ce55cd1d3c4711c03bbf198bf24653b8392420482f3773 - languageName: node - linkType: hard - -"bytes@npm:1": - version: 1.0.0 - resolution: "bytes@npm:1.0.0" - checksum: 6e475440d7e32971611d2bc592695fee484ee91ca1cd49f99c855560131f71670d3d185210f6cdd1704f12281f0cfcee5cb1c1f6788cb2f676b410464b7d6885 - languageName: node - linkType: hard - -"bytes@npm:3.0.0": - version: 3.0.0 - resolution: "bytes@npm:3.0.0" - checksum: a2b386dd8188849a5325f58eef69c3b73c51801c08ffc6963eddc9be244089ba32d19347caf6d145c86f315ae1b1fc7061a32b0c1aa6379e6a719090287ed101 - languageName: node - linkType: hard - -"cacache@npm:^16.1.0": - version: 16.1.3 - resolution: "cacache@npm:16.1.3" - dependencies: - "@npmcli/fs": ^2.1.0 - "@npmcli/move-file": ^2.0.0 - chownr: ^2.0.0 - fs-minipass: ^2.1.0 - glob: ^8.0.1 - infer-owner: ^1.0.4 - lru-cache: ^7.7.1 - minipass: ^3.1.6 - minipass-collect: ^1.0.2 - minipass-flush: ^1.0.5 - minipass-pipeline: ^1.2.4 - mkdirp: ^1.0.4 - p-map: ^4.0.0 - promise-inflight: ^1.0.1 - rimraf: ^3.0.2 - ssri: ^9.0.0 - tar: ^6.1.11 - unique-filename: ^2.0.0 - checksum: d91409e6e57d7d9a3a25e5dcc589c84e75b178ae8ea7de05cbf6b783f77a5fae938f6e8fda6f5257ed70000be27a681e1e44829251bfffe4c10216002f8f14e6 - languageName: node - linkType: hard - -"cache-base@npm:^1.0.1": - version: 1.0.1 - resolution: "cache-base@npm:1.0.1" - dependencies: - collection-visit: ^1.0.0 - component-emitter: ^1.2.1 - get-value: ^2.0.6 - has-value: ^1.0.0 - isobject: ^3.0.1 - set-value: ^2.0.0 - to-object-path: ^0.3.0 - union-value: ^1.0.0 - unset-value: ^1.0.0 - checksum: 9114b8654fe2366eedc390bad0bcf534e2f01b239a888894e2928cb58cdc1e6ea23a73c6f3450dcfd2058aa73a8a981e723cd1e7c670c047bf11afdc65880107 - languageName: node - linkType: hard - -"cached-path-relative@npm:^1.0.0": - version: 1.1.0 - resolution: "cached-path-relative@npm:1.1.0" - checksum: 2f1d63c2301feda575039b945811e54b2dc851b49e94aa366d2916fece745fe4f4490a28a68bd0afe79c2fe336bebf62cbdfa2ad75b178d33b074089114d402d - languageName: node - linkType: hard - -"call-bind@npm:^1.0.0, call-bind@npm:^1.0.2": - version: 1.0.2 - resolution: "call-bind@npm:1.0.2" - dependencies: - function-bind: ^1.1.1 - get-intrinsic: ^1.0.2 - checksum: f8e31de9d19988a4b80f3e704788c4a2d6b6f3d17cfec4f57dc29ced450c53a49270dc66bf0fbd693329ee948dd33e6c90a329519aef17474a4d961e8d6426b0 - languageName: node - linkType: hard - -"camelcase-keys@npm:^4.0.0": - version: 4.2.0 - resolution: "camelcase-keys@npm:4.2.0" - dependencies: - camelcase: ^4.1.0 - map-obj: ^2.0.0 - quick-lru: ^1.0.0 - checksum: 8cb52633f2d335bf7efd9ec4169df3174047dbeadbe9b7604fb4a24cbc53a976bc26bb8557f6e9da5feff139bf94e36f40e2636b31225670f9524f586070c3ec - languageName: node - linkType: hard - -"camelcase@npm:^1.0.2, camelcase@npm:^1.2.1": - version: 1.2.1 - resolution: "camelcase@npm:1.2.1" - checksum: 3da5ab4bb997f33e57023ddee39887e0d3f34ce5a2d41bcfe84454ee528c4fd769a4f9a428168bf9b24aca9338699885ffb63527acb02834c31b864d4b0d2299 - languageName: node - linkType: hard - -"camelcase@npm:^4.0.0, camelcase@npm:^4.1.0": - version: 4.1.0 - resolution: "camelcase@npm:4.1.0" - checksum: 9683356daf9b64fae4b30c91f8ceb1f34f22746e03d1804efdbe738357d38b47f206cdd71efcf2ed72018b2e88eeb8ec3f79adb09c02f1253a4b6d5d405ff2ae - languageName: node - linkType: hard - -"camelcase@npm:^5.0.0": - version: 5.3.1 - resolution: "camelcase@npm:5.3.1" - checksum: e6effce26b9404e3c0f301498184f243811c30dfe6d0b9051863bd8e4034d09c8c2923794f280d6827e5aa055f6c434115ff97864a16a963366fb35fd673024b - languageName: node - linkType: hard - -"caniuse-db@npm:^1.0.30000539, caniuse-db@npm:^1.0.30000578": - version: 1.0.30001457 - resolution: "caniuse-db@npm:1.0.30001457" - checksum: 83a3de591c5f4cc46ec6824e6db7eebf7a08b05796995c8285c5f9d59fec8750d39e0617ce28cb0494bd0d4c57d31a6b3a45a24a8615777167e567b455cd0967 - languageName: node - linkType: hard - -"capture-stack-trace@npm:^1.0.0": - version: 1.0.2 - resolution: "capture-stack-trace@npm:1.0.2" - checksum: 13295e8176e8de74bcbe0e4fd938bed9eb4204b4cc200210ff46df91cb20b69e86f6ef42f408a59454f8b62e567ef0ee6ee5b5e7e16e686668bc77f2741542b4 - languageName: node - linkType: hard - -"center-align@npm:^0.1.1": - version: 0.1.3 - resolution: "center-align@npm:0.1.3" - dependencies: - align-text: ^0.1.3 - lazy-cache: ^1.0.3 - checksum: f3a4e224f0eeb7a9ebc09e6519639acadd8b65942ae33db2b6f38946fcee6320499bd6b980894f7e33fec4f1b66c056d55bb96a9b05a2ca0fde25876e9ee2ab8 - languageName: node - linkType: hard - -"chalk@npm:^1.1.1, chalk@npm:^1.1.3": - version: 1.1.3 - resolution: "chalk@npm:1.1.3" - 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 - checksum: 9d2ea6b98fc2b7878829eec223abcf404622db6c48396a9b9257f6d0ead2acf18231ae368d6a664a83f272b0679158da12e97b5229f794939e555cc574478acd - languageName: node - linkType: hard - -"chalk@npm:^2.0.1, chalk@npm:^2.4.1": - version: 2.4.2 - resolution: "chalk@npm:2.4.2" - dependencies: - ansi-styles: ^3.2.1 - escape-string-regexp: ^1.0.5 - supports-color: ^5.3.0 - checksum: ec3661d38fe77f681200f878edbd9448821924e0f93a9cefc0e26a33b145f1027a2084bf19967160d11e1f03bfe4eaffcabf5493b89098b2782c3fe0b03d80c2 - languageName: node - linkType: hard - -"char-spinner@npm:^1.0.1": - version: 1.0.1 - resolution: "char-spinner@npm:1.0.1" - checksum: e9af0dbdfaef5407b598393fac9629e70f74da8ca2efc2a92ac9cb6d50a2c048efa7f33033b3317e3a244b11ac3f8a0eea22b0c75f5fa457cc19f28867f1b0e6 - languageName: node - linkType: hard - -"character-parser@npm:^2.1.1": - version: 2.2.0 - resolution: "character-parser@npm:2.2.0" - dependencies: - is-regex: ^1.0.3 - checksum: 71826fae509d4dc3ef07c2e824da9c8853f910ba0d8fe699edaab263051fd3b8db77bb96e46ed896bb36ed1d86108e6d6ceedff436bec7786ba7f0b585a0bc93 - languageName: node - linkType: hard - -"cheerio@npm:0.22.0": - version: 0.22.0 - resolution: "cheerio@npm:0.22.0" - dependencies: - css-select: ~1.2.0 - dom-serializer: ~0.1.0 - entities: ~1.1.1 - htmlparser2: ^3.9.1 - lodash.assignin: ^4.0.9 - lodash.bind: ^4.1.4 - lodash.defaults: ^4.0.1 - lodash.filter: ^4.4.0 - lodash.flatten: ^4.2.0 - lodash.foreach: ^4.3.0 - lodash.map: ^4.4.0 - lodash.merge: ^4.4.0 - lodash.pick: ^4.2.1 - lodash.reduce: ^4.4.0 - lodash.reject: ^4.4.0 - lodash.some: ^4.4.0 - checksum: b0a6cfa61eb7ae96e4cb8cfeeb14eb45bb790fa40098509268629c4cecca5b99124aabe6daa1154c497ac8def47bc3f9706cef5f0e8a6177a0c137d4bdaaf8b7 - languageName: node - linkType: hard - -"chokidar@npm:^2.0.4": - version: 2.1.8 - resolution: "chokidar@npm:2.1.8" - dependencies: - anymatch: ^2.0.0 - async-each: ^1.0.1 - braces: ^2.3.2 - fsevents: ^1.2.7 - glob-parent: ^3.1.0 - inherits: ^2.0.3 - is-binary-path: ^1.0.0 - is-glob: ^4.0.0 - normalize-path: ^3.0.0 - path-is-absolute: ^1.0.0 - readdirp: ^2.2.1 - upath: ^1.1.1 - dependenciesMeta: - fsevents: - optional: true - checksum: 0c43e89cbf0268ef1e1f41ce8ec5233c7ba022c6f3282c2ef6530e351d42396d389a1148c5a040f291cf1f4083a4c6b2f51dad3f31c726442ea9a337de316bcf - languageName: node - linkType: hard - -"chownr@npm:^2.0.0": - version: 2.0.0 - resolution: "chownr@npm:2.0.0" - checksum: c57cf9dd0791e2f18a5ee9c1a299ae6e801ff58fee96dc8bfd0dcb4738a6ce58dd252a3605b1c93c6418fe4f9d5093b28ffbf4d66648cb2a9c67eaef9679be2f - languageName: node - linkType: hard - -"ci-info@npm:^1.5.0": - version: 1.6.0 - resolution: "ci-info@npm:1.6.0" - checksum: dfc058f60c3889793befe77349c3cd1a5452d21bed5ff60cb34382bee7bbdccc5c4c2ff2b77eab8c411c54d84f93963dacf593b9d901b43b93b7ad2a422aa163 - languageName: node - linkType: hard - -"cipher-base@npm:^1.0.0, cipher-base@npm:^1.0.1, cipher-base@npm:^1.0.3": - version: 1.0.4 - resolution: "cipher-base@npm:1.0.4" - dependencies: - inherits: ^2.0.1 - safe-buffer: ^5.0.1 - checksum: 47d3568dbc17431a339bad1fe7dff83ac0891be8206911ace3d3b818fc695f376df809bea406e759cdea07fff4b454fa25f1013e648851bec790c1d75763032e - languageName: node - linkType: hard - -"class-utils@npm:^0.3.5": - version: 0.3.6 - resolution: "class-utils@npm:0.3.6" - dependencies: - arr-union: ^3.1.0 - define-property: ^0.2.5 - isobject: ^3.0.0 - static-extend: ^0.1.1 - checksum: be108900801e639e50f96a7e4bfa8867c753a7750a7603879f3981f8b0a89cba657497a2d5f40cd4ea557ff15d535a100818bb486baf6e26fe5d7872e75f1078 - languageName: node - linkType: hard - -"clean-css@npm:^4.1.11": - version: 4.2.4 - resolution: "clean-css@npm:4.2.4" - dependencies: - source-map: ~0.6.0 - checksum: 045ff6fcf4b5c76a084b24e1633e0c78a13b24080338fc8544565a9751559aa32ff4ee5886d9e52c18a644a6ff119bd8e37bc58e574377c05382a1fb7dbe39f8 - languageName: node - linkType: hard - -"clean-stack@npm:^2.0.0": - version: 2.2.0 - resolution: "clean-stack@npm:2.2.0" - checksum: 2ac8cd2b2f5ec986a3c743935ec85b07bc174d5421a5efc8017e1f146a1cf5f781ae962618f416352103b32c9cd7e203276e8c28241bbe946160cab16149fb68 - languageName: node - linkType: hard - -"cli-boxes@npm:^1.0.0": - version: 1.0.0 - resolution: "cli-boxes@npm:1.0.0" - checksum: 101cfd6464a418a76523c332665eaf0641522f30ecc2492de48263ada6b0852333b2ed47b2998ddda621e7008471c51f597f813be798db237c33ba45b27e802a - languageName: node - linkType: hard - -"cliui@npm:^2.1.0": - version: 2.1.0 - resolution: "cliui@npm:2.1.0" - dependencies: - center-align: ^0.1.1 - right-align: ^0.1.1 - wordwrap: 0.0.2 - checksum: 6ea62222bd60ea94bca6321766a300a6ad3f742960b6c6d1e42a730f28df8b1dd81c6fedfbc327d100986ac21fdd7eafb7da34e09a96eb4ffe0c9590754053cb - languageName: node - linkType: hard - -"cliui@npm:^6.0.0": - version: 6.0.0 - resolution: "cliui@npm:6.0.0" - dependencies: - string-width: ^4.2.0 - strip-ansi: ^6.0.0 - wrap-ansi: ^6.2.0 - checksum: 4fcfd26d292c9f00238117f39fc797608292ae36bac2168cfee4c85923817d0607fe21b3329a8621e01aedf512c99b7eaa60e363a671ffd378df6649fb48ae42 - languageName: node - linkType: hard - -"clone@npm:^1.0.2": - version: 1.0.4 - resolution: "clone@npm:1.0.4" - checksum: d06418b7335897209e77bdd430d04f882189582e67bd1f75a04565f3f07f5b3f119a9d670c943b6697d0afb100f03b866b3b8a1f91d4d02d72c4ecf2bb64b5dd - languageName: node - linkType: hard - -"co-from-stream@npm:~0.0.0": - version: 0.0.0 - resolution: "co-from-stream@npm:0.0.0" - dependencies: - co-read: 0.0.1 - checksum: 4275e15d9fb6ad4b9e06da3133203ff9d081649f42e15144390a8af87a08dbbb4dcd38e571d7863ec308f5fe6704fb5f7bc9de84c650007db9ac36c4e8f824d7 - languageName: node - linkType: hard - -"co-fs-extra@npm:^1.2.1": - version: 1.2.1 - resolution: "co-fs-extra@npm:1.2.1" - dependencies: - co-from-stream: ~0.0.0 - fs-extra: ~0.26.5 - thunkify-wrap: ~1.0.4 - checksum: 6c403c276bc10bb2ce0ee5bf6a4e1413e5584747c81a4cf4514d96082d7c4150505eb2ccf60daf4058a28ddc940dafe90eeb2eae49bf4d0a3d74b5fcd6cf362d - languageName: node - linkType: hard - -"co-read@npm:0.0.1": - version: 0.0.1 - resolution: "co-read@npm:0.0.1" - checksum: 282b0052225cba2c5dfd9cace1514d499b4a6fbeaa1036b0767983d9a1e4929265f920bb070d72901f1c4182485294c095da43128399eade90396e114097ae1f - languageName: node - linkType: hard - -"co@npm:3.1.0, co@npm:~3.1.0": - version: 3.1.0 - resolution: "co@npm:3.1.0" - checksum: b7c685595103663317be1cbe3a00386b0b3643a6a859aaeb20ca2a7fa8b0d5c5f744de55d8b0b44bb07635c86bcd48d64684fcfccf52381ede3de55ed374dc80 - languageName: node - linkType: hard - -"co@npm:4.6.0": - version: 4.6.0 - resolution: "co@npm:4.6.0" - checksum: 5210d9223010eb95b29df06a91116f2cf7c8e0748a9013ed853b53f362ea0e822f1e5bb054fb3cefc645239a4cf966af1f6133a3b43f40d591f3b68ed6cf0510 - languageName: node - linkType: hard - -"coffee-script@npm:^1.12.4": - version: 1.12.7 - resolution: "coffee-script@npm:1.12.7" - bin: - cake: ./bin/cake - coffee: ./bin/coffee - checksum: cce8dd15eda581c4c990aefcb0c8b1973713bae6b905baa5916de60e11bdc497fca68c119df20dff72b77c48e871f1bff200b61053526035a64b993b76a90d71 - languageName: node - linkType: hard - -"collection-visit@npm:^1.0.0": - version: 1.0.0 - resolution: "collection-visit@npm:1.0.0" - dependencies: - map-visit: ^1.0.0 - object-visit: ^1.0.0 - checksum: 15d9658fe6eb23594728346adad5433b86bb7a04fd51bbab337755158722f9313a5376ef479de5b35fbc54140764d0d39de89c339f5d25b959ed221466981da9 - languageName: node - linkType: hard - -"color-convert@npm:^1.9.0": - version: 1.9.3 - resolution: "color-convert@npm:1.9.3" - dependencies: - color-name: 1.1.3 - checksum: fd7a64a17cde98fb923b1dd05c5f2e6f7aefda1b60d67e8d449f9328b4e53b228a428fd38bfeaeb2db2ff6b6503a776a996150b80cdf224062af08a5c8a3a203 - languageName: node - linkType: hard - -"color-convert@npm:^2.0.1": - version: 2.0.1 - resolution: "color-convert@npm:2.0.1" - dependencies: - color-name: ~1.1.4 - checksum: 79e6bdb9fd479a205c71d89574fccfb22bd9053bd98c6c4d870d65c132e5e904e6034978e55b43d69fcaa7433af2016ee203ce76eeba9cfa554b373e7f7db336 - languageName: node - linkType: hard - -"color-name@npm:1.1.3": - version: 1.1.3 - resolution: "color-name@npm:1.1.3" - checksum: 09c5d3e33d2105850153b14466501f2bfb30324a2f76568a408763a3b7433b0e50e5b4ab1947868e65cb101bb7cb75029553f2c333b6d4b8138a73fcc133d69d - languageName: node - linkType: hard - -"color-name@npm:~1.1.4": - version: 1.1.4 - resolution: "color-name@npm:1.1.4" - checksum: b0445859521eb4021cd0fb0cc1a75cecf67fceecae89b63f62b201cca8d345baf8b952c966862a9d9a2632987d4f6581f0ec8d957dfacece86f0a7919316f610 - languageName: node - linkType: hard - -"color-support@npm:^1.1.3": - version: 1.1.3 - resolution: "color-support@npm:1.1.3" - bin: - color-support: bin.js - checksum: 9b7356817670b9a13a26ca5af1c21615463b500783b739b7634a0c2047c16cef4b2865d7576875c31c3cddf9dd621fa19285e628f20198b233a5cfdda6d0793b - languageName: node - linkType: hard - -"combine-source-map@npm:^0.8.0, combine-source-map@npm:~0.8.0": - version: 0.8.0 - resolution: "combine-source-map@npm:0.8.0" - dependencies: - convert-source-map: ~1.1.0 - inline-source-map: ~0.6.0 - lodash.memoize: ~3.0.3 - source-map: ~0.5.3 - checksum: 26b3064a4e58400e04089acbf5c8741c47db079706bb2fcd79a7768f99d68de9baf1eb48081cdfbc568e308633105af2aeaf52c73e388619ba1f56463fb73a2e - languageName: node - linkType: hard - -"commander@npm:^2.5.0, commander@npm:^2.6.0": - version: 2.20.3 - resolution: "commander@npm:2.20.3" - checksum: ab8c07884e42c3a8dbc5dd9592c606176c7eb5c1ca5ff274bcf907039b2c41de3626f684ea75ccf4d361ba004bbaff1f577d5384c155f3871e456bdf27becf9e - languageName: node - linkType: hard - -"commander@npm:^6.2.1": - version: 6.2.1 - resolution: "commander@npm:6.2.1" - checksum: d7090410c0de6bc5c67d3ca41c41760d6d268f3c799e530aafb73b7437d1826bbf0d2a3edac33f8b57cc9887b4a986dce307fa5557e109be40eadb7c43b21742 - languageName: node - linkType: hard - -"commoner@npm:~0.10.3": - version: 0.10.8 - resolution: "commoner@npm:0.10.8" - dependencies: - commander: ^2.5.0 - detective: ^4.3.1 - glob: ^5.0.15 - graceful-fs: ^4.1.2 - iconv-lite: ^0.4.5 - mkdirp: ^0.5.0 - private: ^0.1.6 - q: ^1.1.2 - recast: ^0.11.17 - bin: - commonize: ./bin/commonize - checksum: 26104e3028a2f799421a59508b50d267f2eda580d1021d24a69acfe4d2a276e881c81991959c580f87330425fa38a7c205cddacacbb1826690d17d211f53f449 - languageName: node - linkType: hard - -"compare-semver@npm:^1.0.0": - version: 1.1.0 - resolution: "compare-semver@npm:1.1.0" - dependencies: - semver: ^5.0.1 - checksum: ea945a04fc724125940f4b8711f95f58be543022fdbf7a38487a7a05f6516090709644db663f504cdd7e618d34014a6ff77855d45051cfbdabae849fef3656ec - languageName: node - linkType: hard - -"component-emitter@npm:^1.2.1": - version: 1.3.0 - resolution: "component-emitter@npm:1.3.0" - checksum: b3c46de38ffd35c57d1c02488355be9f218e582aec72d72d1b8bbec95a3ac1b38c96cd6e03ff015577e68f550fbb361a3bfdbd9bb248be9390b7b3745691be6b - languageName: node - linkType: hard - -"compressible@npm:~2.0.16": - version: 2.0.18 - resolution: "compressible@npm:2.0.18" - dependencies: - mime-db: ">= 1.43.0 < 2" - checksum: 58321a85b375d39230405654721353f709d0c1442129e9a17081771b816302a012471a9b8f4864c7dbe02eef7f2aaac3c614795197092262e94b409c9be108f0 - languageName: node - linkType: hard - -"compression@npm:^1.7.0": - version: 1.7.4 - resolution: "compression@npm:1.7.4" - dependencies: - accepts: ~1.3.5 - bytes: 3.0.0 - compressible: ~2.0.16 - debug: 2.6.9 - on-headers: ~1.0.2 - safe-buffer: 5.1.2 - vary: ~1.1.2 - checksum: 35c0f2eb1f28418978615dc1bc02075b34b1568f7f56c62d60f4214d4b7cc00d0f6d282b5f8a954f59872396bd770b6b15ffd8aa94c67d4bce9b8887b906999b - languageName: node - linkType: hard - -"concat-map@npm:0.0.1": - version: 0.0.1 - resolution: "concat-map@npm:0.0.1" - checksum: 902a9f5d8967a3e2faf138d5cb784b9979bad2e6db5357c5b21c568df4ebe62bcb15108af1b2253744844eb964fc023fbd9afbbbb6ddd0bcc204c6fb5b7bf3af - languageName: node - linkType: hard - -"concat-stream@npm:^1.6.1": - version: 1.6.2 - resolution: "concat-stream@npm:1.6.2" - dependencies: - buffer-from: ^1.0.0 - inherits: ^2.0.3 - readable-stream: ^2.2.2 - typedarray: ^0.0.6 - checksum: 1ef77032cb4459dcd5187bd710d6fc962b067b64ec6a505810de3d2b8cc0605638551b42f8ec91edf6fcd26141b32ef19ad749239b58fae3aba99187adc32285 - languageName: node - linkType: hard - -"concat-stream@npm:~1.5.0, concat-stream@npm:~1.5.1": - version: 1.5.2 - resolution: "concat-stream@npm:1.5.2" - dependencies: - inherits: ~2.0.1 - readable-stream: ~2.0.0 - typedarray: ~0.0.5 - checksum: 2342c7d6dfce4e1bbfadc99d53bd1b1c337456978170ae7797780cf2790173b950464fd892eecf0dacf29472c508b101002706af68a0454b2bc1625842987043 - languageName: node - linkType: hard - -"configstore@npm:^3.0.0": - version: 3.1.5 - resolution: "configstore@npm:3.1.5" - dependencies: - dot-prop: ^4.2.1 - graceful-fs: ^4.1.2 - make-dir: ^1.0.0 - unique-string: ^1.0.0 - write-file-atomic: ^2.0.0 - xdg-basedir: ^3.0.0 - checksum: 948b50af436f72723b464440f5cfe7b5bc34729bd0709892d71e09517f179773f439a185d0b7bec7acbb183e2b53df8f02176e5be26c7f15382d073740ffad67 - languageName: node - linkType: hard - -"connect-livereload@npm:^0.6.0": - version: 0.6.1 - resolution: "connect-livereload@npm:0.6.1" - checksum: a0d2d8ca311be067108b229c8c918fb9ba18c8e72004a085b596cc6567b135a771db0cae83a2093e965696d5cc0688124b105d5ffb41b29311d4fadd344eef9f - languageName: node - linkType: hard - -"connect-query@npm:^1.0.0": - version: 1.0.0 - resolution: "connect-query@npm:1.0.0" - dependencies: - qs: ~6.4.0 - checksum: 8cf14b39377b962757b1c86cc83e035ca352a55063a0920c102e58a610a9944175aa08c17f60da3c876e57c2370126ef27c31d1bf5918dd4c731c60e129265f1 - languageName: node - linkType: hard - -"connect@npm:^3.6.2, connect@npm:^3.6.6": - version: 3.7.0 - resolution: "connect@npm:3.7.0" - dependencies: - debug: 2.6.9 - finalhandler: 1.1.2 - parseurl: ~1.3.3 - utils-merge: 1.0.1 - checksum: 96e1c4effcf219b065c7823e57351c94366d2e2a6952fa95e8212bffb35c86f1d5a3f9f6c5796d4cd3a5fdda628368b1c3cc44bf19c66cfd68fe9f9cab9177e2 - languageName: node - linkType: hard - -"console-browserify@npm:^1.1.0": - version: 1.2.0 - resolution: "console-browserify@npm:1.2.0" - checksum: 226591eeff8ed68e451dffb924c1fb750c654d54b9059b3b261d360f369d1f8f70650adecf2c7136656236a4bfeb55c39281b5d8a55d792ebbb99efd3d848d52 - languageName: node - linkType: hard - -"console-control-strings@npm:^1.1.0": - version: 1.1.0 - resolution: "console-control-strings@npm:1.1.0" - checksum: 8755d76787f94e6cf79ce4666f0c5519906d7f5b02d4b884cf41e11dcd759ed69c57da0670afd9236d229a46e0f9cf519db0cd829c6dca820bb5a5c3def584ed - languageName: node - linkType: hard - -"constantinople@npm:^3.0.1, constantinople@npm:^3.1.2": - version: 3.1.2 - resolution: "constantinople@npm:3.1.2" - dependencies: - "@types/babel-types": ^7.0.0 - "@types/babylon": ^6.16.2 - babel-types: ^6.26.0 - babylon: ^6.18.0 - checksum: 8b33090009cb2238eb8728d0868e2e7a8e654db5761b099325821a430688270ab0b057e73fd62c8aef737c6d8d9d3a98100e80abff422cc44140402b230b50ad - languageName: node - linkType: hard - -"constants-browserify@npm:~1.0.0": - version: 1.0.0 - resolution: "constants-browserify@npm:1.0.0" - checksum: f7ac8c6d0b6e4e0c77340a1d47a3574e25abd580bfd99ad707b26ff7618596cf1a5e5ce9caf44715e9e01d4a5d12cb3b4edaf1176f34c19adb2874815a56e64f - languageName: node - linkType: hard - -"continuable-cache@npm:^0.3.1": - version: 0.3.1 - resolution: "continuable-cache@npm:0.3.1" - checksum: d88b9891cdc76533bf018613ec80c7f8f3ce7159fa8c1402dae7be546c4b0566ef0c18e488b08da66b8a8f5aab7c91ce9910e4c32d965d902ffe34e095ccc2cb - languageName: node - linkType: hard - -"convert-source-map@npm:~1.1.0": - version: 1.1.3 - resolution: "convert-source-map@npm:1.1.3" - checksum: 0ed6bdecd330fd05941b417b63ebc9001b438f6d6681cd9a068617c3d4b649794dc35c95ba239d0a01f0b9499912b9e0d0d1b7c612e3669c57c65ce4bbc8fdd8 - languageName: node - linkType: hard - -"copy-descriptor@npm:^0.1.0": - version: 0.1.1 - resolution: "copy-descriptor@npm:0.1.1" - checksum: d4b7b57b14f1d256bb9aa0b479241048afd7f5bcf22035fc7b94e8af757adeae247ea23c1a774fe44869fd5694efba4a969b88d966766c5245fdee59837fe45b - languageName: node - linkType: hard - -"core-js@npm:^2.4.0": - version: 2.6.12 - resolution: "core-js@npm:2.6.12" - checksum: 44fa9934a85f8c78d61e0c8b7b22436330471ffe59ec5076fe7f324d6e8cf7f824b14b1c81ca73608b13bdb0fef035bd820989bf059767ad6fa13123bb8bd016 - languageName: node - linkType: hard - -"core-util-is@npm:~1.0.0": - version: 1.0.3 - resolution: "core-util-is@npm:1.0.3" - checksum: 9de8597363a8e9b9952491ebe18167e3b36e7707569eed0ebf14f8bba773611376466ae34575bca8cfe3c767890c859c74056084738f09d4e4a6f902b2ad7d99 - languageName: node - linkType: hard - -"create-ecdh@npm:^4.0.0": - version: 4.0.4 - resolution: "create-ecdh@npm:4.0.4" - dependencies: - bn.js: ^4.1.0 - elliptic: ^6.5.3 - checksum: 0dd7fca9711d09e152375b79acf1e3f306d1a25ba87b8ff14c2fd8e68b83aafe0a7dd6c4e540c9ffbdd227a5fa1ad9b81eca1f233c38bb47770597ba247e614b - languageName: node - linkType: hard - -"create-error-class@npm:^3.0.0": - version: 3.0.2 - resolution: "create-error-class@npm:3.0.2" - dependencies: - capture-stack-trace: ^1.0.0 - checksum: 7254a6f96002d3226d3c1fec952473398761eb4fb12624c5dce6ed0017cdfad6de39b29aa7139680d7dcf416c25f2f308efda6eb6d9b7123f829b19ef8271511 - languageName: node - linkType: hard - -"create-hash@npm:^1.1.0, create-hash@npm:^1.1.2, create-hash@npm:^1.2.0": - version: 1.2.0 - resolution: "create-hash@npm:1.2.0" - dependencies: - cipher-base: ^1.0.1 - inherits: ^2.0.1 - md5.js: ^1.3.4 - ripemd160: ^2.0.1 - sha.js: ^2.4.0 - checksum: 02a6ae3bb9cd4afee3fabd846c1d8426a0e6b495560a977ba46120c473cb283be6aa1cace76b5f927cf4e499c6146fb798253e48e83d522feba807d6b722eaa9 - languageName: node - linkType: hard - -"create-hmac@npm:^1.1.0, create-hmac@npm:^1.1.4, create-hmac@npm:^1.1.7": - version: 1.1.7 - resolution: "create-hmac@npm:1.1.7" - dependencies: - cipher-base: ^1.0.3 - create-hash: ^1.1.0 - inherits: ^2.0.1 - ripemd160: ^2.0.0 - safe-buffer: ^5.0.1 - sha.js: ^2.4.8 - checksum: ba12bb2257b585a0396108c72830e85f882ab659c3320c83584b1037f8ab72415095167ced80dc4ce8e446a8ecc4b2acf36d87befe0707d73b26cf9dc77440ed - languageName: node - linkType: hard - -"cross-spawn@npm:^5.0.1": - version: 5.1.0 - resolution: "cross-spawn@npm:5.1.0" - dependencies: - lru-cache: ^4.0.1 - shebang-command: ^1.2.0 - which: ^1.2.9 - checksum: 726939c9954fc70c20e538923feaaa33bebc253247d13021737c3c7f68cdc3e0a57f720c0fe75057c0387995349f3f12e20e9bfdbf12274db28019c7ea4ec166 - languageName: node - linkType: hard - -"cross-spawn@npm:^7.0.3": - version: 7.0.3 - resolution: "cross-spawn@npm:7.0.3" - dependencies: - path-key: ^3.1.0 - shebang-command: ^2.0.0 - which: ^2.0.1 - checksum: 671cc7c7288c3a8406f3c69a3ae2fc85555c04169e9d611def9a675635472614f1c0ed0ef80955d5b6d4e724f6ced67f0ad1bb006c2ea643488fcfef994d7f52 - languageName: node - linkType: hard - -"crypto-browserify@npm:^3.0.0": - version: 3.12.0 - resolution: "crypto-browserify@npm:3.12.0" - dependencies: - browserify-cipher: ^1.0.0 - browserify-sign: ^4.0.0 - create-ecdh: ^4.0.0 - create-hash: ^1.1.0 - create-hmac: ^1.1.0 - diffie-hellman: ^5.0.0 - inherits: ^2.0.1 - pbkdf2: ^3.0.3 - public-encrypt: ^4.0.0 - randombytes: ^2.0.0 - randomfill: ^1.0.3 - checksum: c1609af82605474262f3eaa07daa0b2140026bd264ab316d4bf1170272570dbe02f0c49e29407fe0d3634f96c507c27a19a6765fb856fed854a625f9d15618e2 - languageName: node - linkType: hard - -"crypto-random-string@npm:^1.0.0": - version: 1.0.0 - resolution: "crypto-random-string@npm:1.0.0" - checksum: 6fc61a46c18547b49a93da24f4559c4a1c859f4ee730ecc9533c1ba89fa2a9e9d81f390c2789467afbbd0d1c55a6e96a71e4716b6cd3e77736ed5fced7a2df9a - languageName: node - linkType: hard - -"css-parse@npm:1.7.x": - version: 1.7.0 - resolution: "css-parse@npm:1.7.0" - checksum: 2eb273730a42c1fe5fc6125e300b08844d465f2cdc912bfe4acd2cd411768588491b414c19cc059980cce9e8eb078357879cef6ea5d98841df0e22a7ee2410ba - languageName: node - linkType: hard - -"css-select@npm:~1.2.0": - version: 1.2.0 - resolution: "css-select@npm:1.2.0" - dependencies: - boolbase: ~1.0.0 - css-what: 2.1 - domutils: 1.5.1 - nth-check: ~1.0.1 - checksum: 607cca60d2f5c56701fe5f800bbe668b114395c503d4e4808edbbbe70b8be3c96a6407428dc0227fcbdf335b20468e6a9e7fd689185edfb57d402e1e4837c9b7 - languageName: node - linkType: hard - -"css-what@npm:2.1": - version: 2.1.3 - resolution: "css-what@npm:2.1.3" - checksum: a52d56c591a7e1c37506d0d8c4fdef72537fb8eb4cb68711485997a88d76b5a3342b73a7c79176268f95b428596c447ad7fa3488224a6b8b532e2f1f2ee8545c - languageName: node - linkType: hard - -"currently-unhandled@npm:^0.4.1": - version: 0.4.1 - resolution: "currently-unhandled@npm:0.4.1" - dependencies: - array-find-index: ^1.0.1 - checksum: 1f59fe10b5339b54b1a1eee110022f663f3495cf7cf2f480686e89edc7fa8bfe42dbab4b54f85034bc8b092a76cc7becbc2dad4f9adad332ab5831bec39ad540 - languageName: node - linkType: hard - -"dash-ast@npm:^1.0.0": - version: 1.0.0 - resolution: "dash-ast@npm:1.0.0" - checksum: db59e5e275d8159fb3b84bcd2936470c3fecb626f6486c179a28afad141cd95a578faaa3695ad6106153ca861da99a3d891fda37757b49afab773b3a46c638e6 - languageName: node - linkType: hard - -"date-now@npm:1.0.1": - version: 1.0.1 - resolution: "date-now@npm:1.0.1" - checksum: 6e824ea77f84122368e7621ff155035de06b9bb9f66220d4284bec42c293c0a3eaf3c03a6794a987371ae9bc48e9592c427f768ac0897f00579f760582ec49b7 - languageName: node - linkType: hard - -"debounce-collect@npm:1.0.2": - version: 1.0.2 - resolution: "debounce-collect@npm:1.0.2" - checksum: 329604de51c0b5507277003f287e268afc7c8f214f4774748995495363adafdb6415825d41677ef203e602c6667eeeb7b99e82b30c54a99b127ddf13dc7f328a - languageName: node - linkType: hard - -"debounce@npm:1.0.0": - version: 1.0.0 - resolution: "debounce@npm:1.0.0" - dependencies: - date-now: 1.0.1 - checksum: c7385634d02f34bcbdad934c9e0deefaf5e53aee8b1be881d7eff00061c02bba5ace4b5abfa9b125ca1701a9cc6292dc1ca05f24dba6c42804ba4172515cd950 - languageName: node - linkType: hard - -"debug@npm:*, debug@npm:4, debug@npm:^4.1.0, debug@npm:^4.3.3, debug@npm:^4.3.4": - version: 4.3.4 - resolution: "debug@npm:4.3.4" - dependencies: - ms: 2.1.2 - peerDependenciesMeta: - supports-color: - optional: true - checksum: 3dbad3f94ea64f34431a9cbf0bafb61853eda57bff2880036153438f50fb5a84f27683ba0d8e5426bf41a8c6ff03879488120cf5b3a761e77953169c0600a708 - languageName: node - linkType: hard - -"debug@npm:2.6.9, debug@npm:^2.2.0, debug@npm:^2.3.3": - version: 2.6.9 - resolution: "debug@npm:2.6.9" - dependencies: - ms: 2.0.0 - checksum: d2f51589ca66df60bf36e1fa6e4386b318c3f1e06772280eea5b1ae9fd3d05e9c2b7fd8a7d862457d00853c75b00451aa2d7459b924629ee385287a650f58fe6 - languageName: node - linkType: hard - -"debug@npm:^3.1.0": - version: 3.2.7 - resolution: "debug@npm:3.2.7" - dependencies: - ms: ^2.1.1 - checksum: b3d8c5940799914d30314b7c3304a43305fd0715581a919dacb8b3176d024a782062368405b47491516d2091d6462d4d11f2f4974a405048094f8bfebfa3071c - languageName: node - linkType: hard - -"decamelize-keys@npm:^1.0.0": - version: 1.1.1 - resolution: "decamelize-keys@npm:1.1.1" - dependencies: - decamelize: ^1.1.0 - map-obj: ^1.0.0 - checksum: fc645fe20b7bda2680bbf9481a3477257a7f9304b1691036092b97ab04c0ab53e3bf9fcc2d2ae382536568e402ec41fb11e1d4c3836a9abe2d813dd9ef4311e0 - languageName: node - linkType: hard - -"decamelize@npm:^1.0.0, decamelize@npm:^1.1.0, decamelize@npm:^1.2.0": - version: 1.2.0 - resolution: "decamelize@npm:1.2.0" - checksum: ad8c51a7e7e0720c70ec2eeb1163b66da03e7616d7b98c9ef43cce2416395e84c1e9548dd94f5f6ffecfee9f8b94251fc57121a8b021f2ff2469b2bae247b8aa - languageName: node - linkType: hard - -"decode-uri-component@npm:^0.2.0": - version: 0.2.2 - resolution: "decode-uri-component@npm:0.2.2" - checksum: 95476a7d28f267292ce745eac3524a9079058bbb35767b76e3ee87d42e34cd0275d2eb19d9d08c3e167f97556e8a2872747f5e65cbebcac8b0c98d83e285f139 - languageName: node - linkType: hard - -"deep-extend@npm:^0.6.0": - version: 0.6.0 - resolution: "deep-extend@npm:0.6.0" - checksum: 7be7e5a8d468d6b10e6a67c3de828f55001b6eb515d014f7aeb9066ce36bd5717161eb47d6a0f7bed8a9083935b465bc163ee2581c8b128d29bf61092fdf57a7 - languageName: node - linkType: hard - -"define-property@npm:^0.2.5": - version: 0.2.5 - resolution: "define-property@npm:0.2.5" - dependencies: - is-descriptor: ^0.1.0 - checksum: 85af107072b04973b13f9e4128ab74ddfda48ec7ad2e54b193c0ffb57067c4ce5b7786a7b4ae1f24bd03e87c5d18766b094571810b314d7540f86d4354dbd394 - languageName: node - linkType: hard - -"define-property@npm:^1.0.0": - version: 1.0.0 - resolution: "define-property@npm:1.0.0" - dependencies: - is-descriptor: ^1.0.0 - checksum: 5fbed11dace44dd22914035ba9ae83ad06008532ca814d7936a53a09e897838acdad5b108dd0688cc8d2a7cf0681acbe00ee4136cf36743f680d10517379350a - languageName: node - linkType: hard - -"define-property@npm:^2.0.2": - version: 2.0.2 - resolution: "define-property@npm:2.0.2" - dependencies: - is-descriptor: ^1.0.2 - isobject: ^3.0.1 - checksum: 3217ed53fc9eed06ba8da6f4d33e28c68a82e2f2a8ab4d562c4920d8169a166fe7271453675e6c69301466f36a65d7f47edf0cf7f474b9aa52a5ead9c1b13c99 - languageName: node - linkType: hard - -"defined@npm:^1.0.0": - version: 1.0.1 - resolution: "defined@npm:1.0.1" - checksum: b1a852300bdb57f297289b55eafdd0c517afaa3ec8190e78fce91b9d8d0c0369d4505ecbdacfd3d98372e664f4a267d9bd793938d4a8c76209c9d9516fbe2101 - languageName: node - linkType: hard - -"defs@npm:~1.1.0": - version: 1.1.1 - resolution: "defs@npm:1.1.1" - dependencies: - alter: ~0.2.0 - ast-traverse: ~0.1.1 - breakable: ~1.0.0 - esprima-fb: ~15001.1001.0-dev-harmony-fb - simple-fmt: ~0.1.0 - simple-is: ~0.2.0 - stringmap: ~0.2.2 - stringset: ~0.2.1 - tryor: ~0.1.2 - yargs: ~3.27.0 - bin: - defs: ./build/es5/defs - checksum: c73e357490185a28daccdf5ab1134b34ed7737eafb0f2966e066b552ac46639449a391c0cfeabe06a7ac58b083b2b5152d5b7950e57c04fe5e147b93532013b7 - languageName: node - linkType: hard - -"delegates@npm:^1.0.0": - version: 1.0.0 - resolution: "delegates@npm:1.0.0" - checksum: a51744d9b53c164ba9c0492471a1a2ffa0b6727451bdc89e31627fdf4adda9d51277cfcbfb20f0a6f08ccb3c436f341df3e92631a3440226d93a8971724771fd - languageName: node - linkType: hard - -"depd@npm:^1.1.2": - version: 1.1.2 - resolution: "depd@npm:1.1.2" - checksum: 6b406620d269619852885ce15965272b829df6f409724415e0002c8632ab6a8c0a08ec1f0bd2add05dc7bd7507606f7e2cc034fa24224ab829580040b835ecd9 - languageName: node - linkType: hard - -"depd@npm:~2.0.0": - version: 2.0.0 - resolution: "depd@npm:2.0.0" - checksum: abbe19c768c97ee2eed6282d8ce3031126662252c58d711f646921c9623f9052e3e1906443066beec1095832f534e57c523b7333f8e7e0d93051ab6baef5ab3a - languageName: node - linkType: hard - -"deps-sort@npm:^2.0.0": - version: 2.0.1 - resolution: "deps-sort@npm:2.0.1" - dependencies: - JSONStream: ^1.0.3 - shasum-object: ^1.0.0 - subarg: ^1.0.0 - through2: ^2.0.0 - bin: - deps-sort: bin/cmd.js - checksum: 1cbaad500aa1592d7497321faf39c7bb7b86ed0930b1efd0c54efdf68433fc53d8bc844bb220723c7861b397ba886495ebdab2cb0fbf13262d1342d98a88622b - languageName: node - linkType: hard - -"des.js@npm:^1.0.0": - version: 1.0.1 - resolution: "des.js@npm:1.0.1" - dependencies: - inherits: ^2.0.1 - minimalistic-assert: ^1.0.0 - checksum: 1ec2eedd7ed6bd61dd5e0519fd4c96124e93bb22de8a9d211b02d63e5dd152824853d919bb2090f965cc0e3eb9c515950a9836b332020d810f9c71feb0fd7df4 - languageName: node - linkType: hard - -"destroy@npm:^1.0.4": - version: 1.2.0 - resolution: "destroy@npm:1.2.0" - checksum: 0acb300b7478a08b92d810ab229d5afe0d2f4399272045ab22affa0d99dbaf12637659411530a6fcd597a9bdac718fc94373a61a95b4651bbc7b83684a565e38 - languageName: node - linkType: hard - -"detective@npm:^4.0.0, detective@npm:^4.3.1": - version: 4.7.1 - resolution: "detective@npm:4.7.1" - dependencies: - acorn: ^5.2.1 - defined: ^1.0.0 - checksum: 87531cb2f2f07feed75b68aa4d6f08ff46adef4e3b332cbff81a13256a298ab83cec7ff9b84f4c1cf532d4def58472cb3e75a31e2c0e19c3915582437bc29b86 - languageName: node - linkType: hard - -"diffie-hellman@npm:^5.0.0": - version: 5.0.3 - resolution: "diffie-hellman@npm:5.0.3" - dependencies: - bn.js: ^4.1.0 - miller-rabin: ^4.0.0 - randombytes: ^2.0.0 - checksum: 0e620f322170c41076e70181dd1c24e23b08b47dbb92a22a644f3b89b6d3834b0f8ee19e37916164e5eb1ee26d2aa836d6129f92723995267250a0b541811065 - languageName: node - linkType: hard - -"docpress-base@npm:~0.8.0": - version: 0.8.0 - resolution: "docpress-base@npm:0.8.0" - dependencies: - autoprefixer: 6.5.3 - browserify: 13.1.1 - debounce: 1.0.0 - dom101: 1.3.0 - github-markdown-css: 2.4.1 - iconfonts: 0.10.0 - normalize.css: 5.0.0 - nprogress: 0.2.0 - onmount: 1.3.0 - pjax: 0.2.4 - postcss: 5.2.5 - pug: ^2.0.4 - stylus: 0.54.5 - uglifyify: 3.0.4 - ware: 1.3.0 - checksum: 2283f37b36e1206a120dee1b60362ac983fd224e70b6c31bf45b7b6b19be6b08c4befc61c00a51d108de57e1b4679b44d528efaee5bde14e2f32e63139833279 - languageName: node - linkType: hard - -"docpress-core@npm:~0.10.0": - version: 0.10.1 - resolution: "docpress-core@npm:0.10.1" - dependencies: - cheerio: 0.22.0 - debug: ^4.1.0 - highlight.js: ^9.13.1 - lodash: ^4.17.15 - lru-cache: ^4.1.3 - markdown-it: ^10.0.0 - markdown-it-decorate: 1.2.2 - marked: ^0.7.0 - metalsmith: 2.3.0 - slugify: ^1.3.2 - ware: 1.3.0 - checksum: dd282366f77f4e9f9caa9f52eb6ddae5d020089775a6e39eecd18f7a68381d94fa2993f2836237c02f3d11c74fb50819d463abfdbabef32fe33ebe6ffa3348e4 - languageName: node - linkType: hard - -"docpress@npm:^0.8.2": - version: 0.8.2 - resolution: "docpress@npm:0.8.2" - dependencies: - docpress-base: ~0.8.0 - docpress-core: ~0.10.0 - metalsmith-start: "github:rstacruz/metalsmith-start#e88a7cdbb20aac1db176c121b429008073d8e9eb" - yargs: ^15.0.2 - bin: - docpress: bin/docpress - checksum: 09fafedb98186f6666b33cca95ed84824b8fcb33e7ebee17256e61c063ef9b0d7790b91a7acf9f7d1c32ccca196b17e2a140d1450654f4cb039c03c25155dc90 - languageName: node - linkType: hard - -"doctypes@npm:^1.1.0": - version: 1.1.0 - resolution: "doctypes@npm:1.1.0" - checksum: 6e6c2d1a80f2072dc4831994c914c44455e341c5ab18c16797368a0afd59d7c22f3335805ba2c1dd2931e9539d1ba8b613b7650dc63f6ab56b77b8d888055de8 - languageName: node - linkType: hard - -"dom-serializer@npm:0": - version: 0.2.2 - resolution: "dom-serializer@npm:0.2.2" - dependencies: - domelementtype: ^2.0.1 - entities: ^2.0.0 - checksum: 376344893e4feccab649a14ca1a46473e9961f40fe62479ea692d4fee4d9df1c00ca8654811a79c1ca7b020096987e1ca4fb4d7f8bae32c1db800a680a0e5d5e - languageName: node - linkType: hard - -"dom-serializer@npm:~0.1.0": - version: 0.1.1 - resolution: "dom-serializer@npm:0.1.1" - dependencies: - domelementtype: ^1.3.0 - entities: ^1.1.1 - checksum: 4f6a3eff802273741931cfd3c800fab4e683236eed10628d6605f52538a6bc0ce4770f3ca2ad68a27412c103ae9b6cdaed3c0a8e20d2704192bde497bc875215 - languageName: node - linkType: hard - -"dom101@npm:1.3.0": - version: 1.3.0 - resolution: "dom101@npm:1.3.0" - checksum: ebaa9e93fe209424491c4a1997b89f231fec24f2bd264bf3089f5d83f33ef27cd6c98200bb4d64ef3a677817bb1e2dad13b8f40f3e2e2643c348248c98c36da1 - languageName: node - linkType: hard - -"domain-browser@npm:~1.1.0": - version: 1.1.7 - resolution: "domain-browser@npm:1.1.7" - checksum: 1a774a145edcb6424b3f5cd26256318b18360811bc243e72ecf9689b91c763b2fe73c945fe52482304cadfa3ef1b67ab94ff35b5a14eb61f2181b9e682d51717 - languageName: node - linkType: hard - -"domelementtype@npm:1, domelementtype@npm:^1.3.0, domelementtype@npm:^1.3.1": - version: 1.3.1 - resolution: "domelementtype@npm:1.3.1" - checksum: 7893da40218ae2106ec6ffc146b17f203487a52f5228b032ea7aa470e41dfe03e1bd762d0ee0139e792195efda765434b04b43cddcf63207b098f6ae44b36ad6 - languageName: node - linkType: hard - -"domelementtype@npm:^2.0.1": - version: 2.3.0 - resolution: "domelementtype@npm:2.3.0" - checksum: ee837a318ff702622f383409d1f5b25dd1024b692ef64d3096ff702e26339f8e345820f29a68bcdcea8cfee3531776b3382651232fbeae95612d6f0a75efb4f6 - languageName: node - linkType: hard - -"domhandler@npm:^2.3.0": - version: 2.4.2 - resolution: "domhandler@npm:2.4.2" - dependencies: - domelementtype: 1 - checksum: 49bd70c9c784f845cd047e1dfb3611bd10891c05719acfc93f01fc726a419ed09fbe0b69f9064392d556a63fffc5a02010856cedae9368f4817146d95a97011f - languageName: node - linkType: hard - -"domutils@npm:1.5.1": - version: 1.5.1 - resolution: "domutils@npm:1.5.1" - dependencies: - dom-serializer: 0 - domelementtype: 1 - checksum: 800d1f9d1c2e637267dae078ff6e24461e6be1baeb52fa70f2e7e7520816c032a925997cd15d822de53ef9896abb1f35e5c439d301500a9cd6b46a395f6f6ca0 - languageName: node - linkType: hard - -"domutils@npm:^1.5.1": - version: 1.7.0 - resolution: "domutils@npm:1.7.0" - dependencies: - dom-serializer: 0 - domelementtype: 1 - checksum: f60a725b1f73c1ae82f4894b691601ecc6ecb68320d87923ac3633137627c7865725af813ae5d188ad3954283853bcf46779eb50304ec5d5354044569fcefd2b - languageName: node - linkType: hard - -"dot-prop@npm:^4.2.1": - version: 4.2.1 - resolution: "dot-prop@npm:4.2.1" - dependencies: - is-obj: ^1.0.0 - checksum: 5f4f19aa440bc548670d87f2adcbd105fa6842cd1fba3165a8a2b1380568ae82862acf8ebafcc6093fa062505d7d08d7155c7ba9a88da212f7348e95ef2bdce6 - languageName: node - linkType: hard - -"duplexer2@npm:^0.1.2, duplexer2@npm:~0.1.0, duplexer2@npm:~0.1.2": - version: 0.1.4 - resolution: "duplexer2@npm:0.1.4" - dependencies: - readable-stream: ^2.0.2 - checksum: 744961f03c7f54313f90555ac20284a3fb7bf22fdff6538f041a86c22499560eb6eac9d30ab5768054137cb40e6b18b40f621094e0261d7d8c35a37b7a5ad241 - languageName: node - linkType: hard - -"duplexer3@npm:^0.1.4": - version: 0.1.5 - resolution: "duplexer3@npm:0.1.5" - checksum: e677cb4c48f031ca728601d6a20bf6aed4c629d69ef9643cb89c67583d673c4ec9317cc6427501f38bd8c368d3a18f173987cc02bd99d8cf8fe3d94259a22a20 - languageName: node - linkType: hard - -"ee-first@npm:1.1.1": - version: 1.1.1 - resolution: "ee-first@npm:1.1.1" - checksum: 1b4cac778d64ce3b582a7e26b218afe07e207a0f9bfe13cc7395a6d307849cfe361e65033c3251e00c27dd060cab43014c2d6b2647676135e18b77d2d05b3f4f - languageName: node - linkType: hard - -"elliptic@npm:^6.5.3": - version: 6.5.4 - resolution: "elliptic@npm:6.5.4" - dependencies: - bn.js: ^4.11.9 - brorand: ^1.1.0 - hash.js: ^1.0.0 - hmac-drbg: ^1.0.1 - inherits: ^2.0.4 - minimalistic-assert: ^1.0.1 - minimalistic-crypto-utils: ^1.0.1 - checksum: d56d21fd04e97869f7ffcc92e18903b9f67f2d4637a23c860492fbbff5a3155fd9ca0184ce0c865dd6eb2487d234ce9551335c021c376cd2d3b7cb749c7d10f4 - languageName: node - linkType: hard - -"emoji-regex@npm:^8.0.0": - version: 8.0.0 - resolution: "emoji-regex@npm:8.0.0" - checksum: d4c5c39d5a9868b5fa152f00cada8a936868fd3367f33f71be515ecee4c803132d11b31a6222b2571b1e5f7e13890156a94880345594d0ce7e3c9895f560f192 - languageName: node - linkType: hard - -"enable@npm:1": - version: 1.3.2 - resolution: "enable@npm:1.3.2" - checksum: 1253e1308f16717c19052c5d191e4f5022b409adf3d41ccf4f9ac15833d7d5750e97a386a80ee40cd3d0fd8874b4cdad2f18d6f8c08b3f77a1e34f76af7cdd4b - languageName: node - linkType: hard - -"encodeurl@npm:~1.0.2": - version: 1.0.2 - resolution: "encodeurl@npm:1.0.2" - checksum: e50e3d508cdd9c4565ba72d2012e65038e5d71bdc9198cb125beb6237b5b1ade6c0d343998da9e170fb2eae52c1bed37d4d6d98a46ea423a0cddbed5ac3f780c - languageName: node - linkType: hard - -"encoding@npm:^0.1.13": - version: 0.1.13 - resolution: "encoding@npm:0.1.13" - dependencies: - iconv-lite: ^0.6.2 - checksum: bb98632f8ffa823996e508ce6a58ffcf5856330fde839ae42c9e1f436cc3b5cc651d4aeae72222916545428e54fd0f6aa8862fd8d25bdbcc4589f1e3f3715e7f - languageName: node - linkType: hard - -"entities@npm:^1.1.1, entities@npm:~1.1.1": - version: 1.1.2 - resolution: "entities@npm:1.1.2" - checksum: d537b02799bdd4784ffd714d000597ed168727bddf4885da887c5a491d735739029a00794f1998abbf35f3f6aeda32ef5c15010dca1817d401903a501b6d3e05 - languageName: node - linkType: hard - -"entities@npm:^2.0.0": - version: 2.2.0 - resolution: "entities@npm:2.2.0" - checksum: 19010dacaf0912c895ea262b4f6128574f9ccf8d4b3b65c7e8334ad0079b3706376360e28d8843ff50a78aabcb8f08f0a32dbfacdc77e47ed77ca08b713669b3 - languageName: node - linkType: hard - -"entities@npm:~2.0.0": - version: 2.0.3 - resolution: "entities@npm:2.0.3" - checksum: 5a7899fcc622e0d76afdeafe4c58a6b40ae3a8ee4772e5825a648c11a2ca324a9a02515386f512e466baac4aeb551f3d3b79eaece5cd98369b9f8601be336b1a - languageName: node - linkType: hard - -"env-paths@npm:^2.2.0": - version: 2.2.1 - resolution: "env-paths@npm:2.2.1" - checksum: 65b5df55a8bab92229ab2b40dad3b387fad24613263d103a97f91c9fe43ceb21965cd3392b1ccb5d77088021e525c4e0481adb309625d0cb94ade1d1fb8dc17e - languageName: node - linkType: hard - -"err-code@npm:^2.0.2": - version: 2.0.3 - resolution: "err-code@npm:2.0.3" - checksum: 8b7b1be20d2de12d2255c0bc2ca638b7af5171142693299416e6a9339bd7d88fc8d7707d913d78e0993176005405a236b066b45666b27b797252c771156ace54 - languageName: node - linkType: hard - -"error-ex@npm:^1.3.1": - version: 1.3.2 - resolution: "error-ex@npm:1.3.2" - dependencies: - is-arrayish: ^0.2.1 - checksum: c1c2b8b65f9c91b0f9d75f0debaa7ec5b35c266c2cac5de412c1a6de86d4cbae04ae44e510378cb14d032d0645a36925d0186f8bb7367bcc629db256b743a001 - languageName: node - linkType: hard - -"error@npm:^7.0.0": - version: 7.2.1 - resolution: "error@npm:7.2.1" - dependencies: - string-template: ~0.2.1 - checksum: 9c790d20a386947acfeabb0d1c39173efe8e5a38cb732b5f06c11a25c23ce8ac4dafbb7aa240565e034580a49aba0703e743d0274c6228500ddf947a1b998568 - languageName: node - linkType: hard - -"escape-html@npm:~1.0.3": - version: 1.0.3 - resolution: "escape-html@npm:1.0.3" - checksum: 6213ca9ae00d0ab8bccb6d8d4e0a98e76237b2410302cf7df70aaa6591d509a2a37ce8998008cbecae8fc8ffaadf3fb0229535e6a145f3ce0b211d060decbb24 - languageName: node - linkType: hard - -"escape-string-regexp@npm:^1.0.2, escape-string-regexp@npm:^1.0.5": - version: 1.0.5 - resolution: "escape-string-regexp@npm:1.0.5" - checksum: 6092fda75c63b110c706b6a9bfde8a612ad595b628f0bd2147eea1d3406723020810e591effc7db1da91d80a71a737a313567c5abb3813e8d9c71f4aa595b410 - languageName: node - linkType: hard - -"esprima-fb@npm:~15001.1001.0-dev-harmony-fb": - version: 15001.1001.0-dev-harmony-fb - resolution: "esprima-fb@npm:15001.1001.0-dev-harmony-fb" - bin: - esparse: ./bin/esparse.js - esvalidate: ./bin/esvalidate.js - checksum: 7f373e0c9317e500842c290c38b0b6edb7a57ed59a380b3b447d59f0a9fa2bd0ba13bdd208f46dce3477a38ea2a81eb14e48d7be0dc6fae02520b65d3572fb97 - languageName: node - linkType: hard - -"esprima@npm:^4.0.0": - version: 4.0.1 - resolution: "esprima@npm:4.0.1" - bin: - esparse: ./bin/esparse.js - esvalidate: ./bin/esvalidate.js - checksum: b45bc805a613dbea2835278c306b91aff6173c8d034223fa81498c77dcbce3b2931bf6006db816f62eacd9fd4ea975dfd85a5b7f3c6402cfd050d4ca3c13a628 - languageName: node - linkType: hard - -"esprima@npm:~3.1.0": - version: 3.1.3 - resolution: "esprima@npm:3.1.3" - bin: - esparse: ./bin/esparse.js - esvalidate: ./bin/esvalidate.js - checksum: 2771c059aa61f2b2fe9d898f11c737c45c26eae6052908f1e2b8bd91c6a440607420f2679cbfd6cbb79f2fa502b37a3053048d287bcd30ea582d46c969fcf67e - languageName: node - linkType: hard - -"esutils@npm:^2.0.2": - version: 2.0.3 - resolution: "esutils@npm:2.0.3" - checksum: 22b5b08f74737379a840b8ed2036a5fb35826c709ab000683b092d9054e5c2a82c27818f12604bfc2a9a76b90b6834ef081edbc1c7ae30d1627012e067c6ec87 - languageName: node - linkType: hard - -"events@npm:~1.1.0": - version: 1.1.1 - resolution: "events@npm:1.1.1" - checksum: 40431eb005cc4c57861b93d44c2981a49e7feb99df84cf551baed299ceea4444edf7744733f6a6667e942af687359b1f4a87ec1ec4f21d5127dac48a782039b9 - languageName: node - linkType: hard - -"evp_bytestokey@npm:^1.0.0, evp_bytestokey@npm:^1.0.3": - version: 1.0.3 - resolution: "evp_bytestokey@npm:1.0.3" - dependencies: - md5.js: ^1.3.4 - node-gyp: latest - safe-buffer: ^5.1.1 - checksum: ad4e1577f1a6b721c7800dcc7c733fe01f6c310732bb5bf2240245c2a5b45a38518b91d8be2c610611623160b9d1c0e91f1ce96d639f8b53e8894625cf20fa45 - languageName: node - linkType: hard - -"execa@npm:^0.7.0": - version: 0.7.0 - resolution: "execa@npm:0.7.0" - dependencies: - cross-spawn: ^5.0.1 - get-stream: ^3.0.0 - is-stream: ^1.1.0 - npm-run-path: ^2.0.0 - p-finally: ^1.0.0 - signal-exit: ^3.0.0 - strip-eof: ^1.0.0 - checksum: dd70206d74b7217bf678ec9f04dddedc82f425df4c1d70e34c9f429d630ec407819e4bd42e3af2618981a4a3a1be000c9b651c0637be486cdab985160c20337c - languageName: node - linkType: hard - -"expand-brackets@npm:^2.1.4": - version: 2.1.4 - resolution: "expand-brackets@npm:2.1.4" - dependencies: - debug: ^2.3.3 - define-property: ^0.2.5 - extend-shallow: ^2.0.1 - posix-character-classes: ^0.1.0 - regex-not: ^1.0.0 - snapdragon: ^0.8.1 - to-regex: ^3.0.1 - checksum: 1781d422e7edfa20009e2abda673cadb040a6037f0bd30fcd7357304f4f0c284afd420d7622722ca4a016f39b6d091841ab57b401c1f7e2e5131ac65b9f14fa1 - languageName: node - linkType: hard - -"extend-shallow@npm:^2.0.1": - version: 2.0.1 - resolution: "extend-shallow@npm:2.0.1" - dependencies: - is-extendable: ^0.1.0 - checksum: 8fb58d9d7a511f4baf78d383e637bd7d2e80843bd9cd0853649108ea835208fb614da502a553acc30208e1325240bb7cc4a68473021612496bb89725483656d8 - languageName: node - linkType: hard - -"extend-shallow@npm:^3.0.0, extend-shallow@npm:^3.0.2": - version: 3.0.2 - resolution: "extend-shallow@npm:3.0.2" - dependencies: - assign-symbols: ^1.0.0 - is-extendable: ^1.0.1 - checksum: a920b0cd5838a9995ace31dfd11ab5e79bf6e295aa566910ce53dff19f4b1c0fda2ef21f26b28586c7a2450ca2b42d97bd8c0f5cec9351a819222bf861e02461 - languageName: node - linkType: hard - -"extend@npm:^1.2.1": - version: 1.3.0 - resolution: "extend@npm:1.3.0" - checksum: f77890813cd30d29bf23edcff7df7ef13d5e47552060697a8ec1edb2176881c7ee08dae84164765056ecbd96b08acd1fce919e64bd640b361ac49f173f5c232d - languageName: node - linkType: hard - -"extglob@npm:^2.0.4": - version: 2.0.4 - resolution: "extglob@npm:2.0.4" - dependencies: - array-unique: ^0.3.2 - define-property: ^1.0.0 - expand-brackets: ^2.1.4 - extend-shallow: ^2.0.1 - fragment-cache: ^0.2.1 - regex-not: ^1.0.0 - snapdragon: ^0.8.1 - to-regex: ^3.0.1 - checksum: a41531b8934735b684cef5e8c5a01d0f298d7d384500ceca38793a9ce098125aab04ee73e2d75d5b2901bc5dddd2b64e1b5e3bf19139ea48bac52af4a92f1d00 - languageName: node - linkType: hard - -"fast-safe-stringify@npm:^2.0.7": - version: 2.1.1 - resolution: "fast-safe-stringify@npm:2.1.1" - checksum: a851cbddc451745662f8f00ddb622d6766f9bd97642dabfd9a405fb0d646d69fc0b9a1243cbf67f5f18a39f40f6fa821737651ff1bceeba06c9992ca2dc5bd3d - languageName: node - linkType: hard - -"fast-url-parser@npm:^1.1.3": - version: 1.1.3 - resolution: "fast-url-parser@npm:1.1.3" - dependencies: - punycode: ^1.3.2 - checksum: 5043d0c4a8d775ff58504d56c096563c11b113e4cb8a2668c6f824a1cd4fb3812e2fdf76537eb24a7ce4ae7def6bd9747da630c617cf2a4b6ce0c42514e4f21c - languageName: node - linkType: hard - -"faye-websocket@npm:~0.10.0": - version: 0.10.0 - resolution: "faye-websocket@npm:0.10.0" - dependencies: - websocket-driver: ">=0.5.1" - checksum: 5a2989ec5effc832bd219e3af934966b5a2a2605dd83b995a04edae5d34207ef930635f5c8456b8b7b4209bfb8f7ea991e41594f150a04faa53fca1ee4eb31b6 - languageName: node - linkType: hard - -"file-uri-to-path@npm:1.0.0": - version: 1.0.0 - resolution: "file-uri-to-path@npm:1.0.0" - checksum: b648580bdd893a008c92c7ecc96c3ee57a5e7b6c4c18a9a09b44fb5d36d79146f8e442578bc0e173dc027adf3987e254ba1dfd6e3ec998b7c282873010502144 - languageName: node - linkType: hard - -"fill-range@npm:^4.0.0": - version: 4.0.0 - resolution: "fill-range@npm:4.0.0" - dependencies: - extend-shallow: ^2.0.1 - is-number: ^3.0.0 - repeat-string: ^1.6.1 - to-regex-range: ^2.1.0 - checksum: dbb5102467786ab42bc7a3ec7380ae5d6bfd1b5177b2216de89e4a541193f8ba599a6db84651bd2c58c8921db41b8cc3d699ea83b477342d3ce404020f73c298 - languageName: node - linkType: hard - -"fill-range@npm:^7.0.1": - version: 7.0.1 - resolution: "fill-range@npm:7.0.1" - dependencies: - to-regex-range: ^5.0.1 - checksum: cc283f4e65b504259e64fd969bcf4def4eb08d85565e906b7d36516e87819db52029a76b6363d0f02d0d532f0033c9603b9e2d943d56ee3b0d4f7ad3328ff917 - languageName: node - linkType: hard - -"finalhandler@npm:1.1.2": - version: 1.1.2 - resolution: "finalhandler@npm:1.1.2" - dependencies: - debug: 2.6.9 - encodeurl: ~1.0.2 - escape-html: ~1.0.3 - on-finished: ~2.3.0 - parseurl: ~1.3.3 - statuses: ~1.5.0 - unpipe: ~1.0.0 - checksum: 617880460c5138dd7ccfd555cb5dde4d8f170f4b31b8bd51e4b646bb2946c30f7db716428a1f2882d730d2b72afb47d1f67cc487b874cb15426f95753a88965e - languageName: node - linkType: hard - -"find-up@npm:^2.0.0": - version: 2.1.0 - resolution: "find-up@npm:2.1.0" - dependencies: - locate-path: ^2.0.0 - checksum: 43284fe4da09f89011f08e3c32cd38401e786b19226ea440b75386c1b12a4cb738c94969808d53a84f564ede22f732c8409e3cfc3f7fb5b5c32378ad0bbf28bd - languageName: node - linkType: hard - -"find-up@npm:^4.1.0": - version: 4.1.0 - resolution: "find-up@npm:4.1.0" - dependencies: - locate-path: ^5.0.0 - path-exists: ^4.0.0 - checksum: 4c172680e8f8c1f78839486e14a43ef82e9decd0e74145f40707cc42e7420506d5ec92d9a11c22bd2c48fb0c384ea05dd30e10dd152fefeec6f2f75282a8b844 - languageName: node - linkType: hard - -"flat-arguments@npm:^1.0.0": - version: 1.0.2 - resolution: "flat-arguments@npm:1.0.2" - dependencies: - array-flatten: ^1.0.0 - as-array: ^1.0.0 - lodash.isarguments: ^3.0.0 - lodash.isobject: ^3.0.0 - checksum: 748ab1844348e5b6864340161e196659b74467a9e64ab5cd8ff1641883e3261e24ec801c2a1214f3d90bce85b9bf94a722d42ad9cec29399d13cd0ae16468601 - languageName: node - linkType: hard - -"for-in@npm:^1.0.2": - version: 1.0.2 - resolution: "for-in@npm:1.0.2" - checksum: 09f4ae93ce785d253ac963d94c7f3432d89398bf25ac7a24ed034ca393bf74380bdeccc40e0f2d721a895e54211b07c8fad7132e8157827f6f7f059b70b4043d - languageName: node - linkType: hard - -"fragment-cache@npm:^0.2.1": - version: 0.2.1 - resolution: "fragment-cache@npm:0.2.1" - dependencies: - map-cache: ^0.2.2 - checksum: 1cbbd0b0116b67d5790175de0038a11df23c1cd2e8dcdbade58ebba5594c2d641dade6b4f126d82a7b4a6ffc2ea12e3d387dbb64ea2ae97cf02847d436f60fdc - languageName: node - linkType: hard - -"fs-extra@npm:^0.30.0": - version: 0.30.0 - resolution: "fs-extra@npm:0.30.0" - dependencies: - graceful-fs: ^4.1.2 - jsonfile: ^2.1.0 - klaw: ^1.0.0 - path-is-absolute: ^1.0.0 - rimraf: ^2.2.8 - checksum: 6edfd65fc813baa27f1603778c0f5ec11f8c5006a20b920437813ee2023eba18aeec8bef1c89b2e6c84f9fc90fdc7c916f4a700466c8c69d22a35d018f2570f0 - languageName: node - linkType: hard - -"fs-extra@npm:~0.26.5": - version: 0.26.7 - resolution: "fs-extra@npm:0.26.7" - dependencies: - graceful-fs: ^4.1.2 - jsonfile: ^2.1.0 - klaw: ^1.0.0 - path-is-absolute: ^1.0.0 - rimraf: ^2.2.8 - checksum: bb4d02348e9b036794e8c9da7be6f89a851dd37014d691893b54ebdaadffe2eab1c7578c3bc2f0deaa1e204030cda282d006ec020f176e0689fcd0e74499367e - languageName: node - linkType: hard - -"fs-minipass@npm:^2.0.0, fs-minipass@npm:^2.1.0": - version: 2.1.0 - resolution: "fs-minipass@npm:2.1.0" - dependencies: - minipass: ^3.0.0 - checksum: 1b8d128dae2ac6cc94230cc5ead341ba3e0efaef82dab46a33d171c044caaa6ca001364178d42069b2809c35a1c3c35079a32107c770e9ffab3901b59af8c8b1 - languageName: node - linkType: hard - -"fs.realpath@npm:^1.0.0": - version: 1.0.0 - resolution: "fs.realpath@npm:1.0.0" - checksum: 99ddea01a7e75aa276c250a04eedeffe5662bce66c65c07164ad6264f9de18fb21be9433ead460e54cff20e31721c811f4fb5d70591799df5f85dce6d6746fd0 - languageName: node - linkType: hard - -"fsevents@npm:^1.2.7": - version: 1.2.13 - resolution: "fsevents@npm:1.2.13" - dependencies: - bindings: ^1.5.0 - nan: ^2.12.1 - checksum: ae855aa737aaa2f9167e9f70417cf6e45a5cd11918e1fee9923709a0149be52416d765433b4aeff56c789b1152e718cd1b13ddec6043b78cdda68260d86383c1 - conditions: os=darwin - languageName: node - linkType: hard - -"fsevents@patch:fsevents@^1.2.7#~builtin": - version: 1.2.13 - resolution: "fsevents@patch:fsevents@npm%3A1.2.13#~builtin::version=1.2.13&hash=18f3a7" - dependencies: - bindings: ^1.5.0 - nan: ^2.12.1 - conditions: os=darwin - languageName: node - linkType: hard - -"function-bind@npm:^1.1.1": - version: 1.1.1 - resolution: "function-bind@npm:1.1.1" - checksum: b32fbaebb3f8ec4969f033073b43f5c8befbb58f1a79e12f1d7490358150359ebd92f49e72ff0144f65f2c48ea2a605bff2d07965f548f6474fd8efd95bf361a - languageName: node - linkType: hard - -"gauge@npm:^4.0.3": - version: 4.0.4 - resolution: "gauge@npm:4.0.4" - dependencies: - aproba: ^1.0.3 || ^2.0.0 - color-support: ^1.1.3 - console-control-strings: ^1.1.0 - has-unicode: ^2.0.1 - signal-exit: ^3.0.7 - string-width: ^4.2.3 - strip-ansi: ^6.0.1 - wide-align: ^1.1.5 - checksum: 788b6bfe52f1dd8e263cda800c26ac0ca2ff6de0b6eee2fe0d9e3abf15e149b651bd27bf5226be10e6e3edb5c4e5d5985a5a1a98137e7a892f75eff76467ad2d - languageName: node - linkType: hard - -"get-assigned-identifiers@npm:^1.2.0": - version: 1.2.0 - resolution: "get-assigned-identifiers@npm:1.2.0" - checksum: 5ea831c744a645ebd56fff818c80ffc583995c2ca3958236c7cfaac670242300e4f08498a9bbafd3ecbe30027d58ed50e7fa6268ecfe4b8e5c888ea7275cb56c - languageName: node - linkType: hard - -"get-caller-file@npm:^2.0.1": - version: 2.0.5 - resolution: "get-caller-file@npm:2.0.5" - checksum: b9769a836d2a98c3ee734a88ba712e62703f1df31b94b784762c433c27a386dd6029ff55c2a920c392e33657d80191edbf18c61487e198844844516f843496b9 - languageName: node - linkType: hard - -"get-intrinsic@npm:^1.0.2": - version: 1.2.0 - resolution: "get-intrinsic@npm:1.2.0" - dependencies: - function-bind: ^1.1.1 - has: ^1.0.3 - has-symbols: ^1.0.3 - checksum: 78fc0487b783f5c58cf2dccafc3ae656ee8d2d8062a8831ce4a95e7057af4587a1d4882246c033aca0a7b4965276f4802b45cc300338d1b77a73d3e3e3f4877d - languageName: node - linkType: hard - -"get-port@npm:^4.0.0": - version: 4.2.0 - resolution: "get-port@npm:4.2.0" - checksum: 6c9a452b2d6e81fe36781a69ed201883d37c02f141ba5770eaef3eca768ca38777c2eba4bec303f6b8c3f45f29036f95d5606b255f613320a6b4b680e1975c07 - languageName: node - linkType: hard - -"get-stream@npm:^3.0.0": - version: 3.0.0 - resolution: "get-stream@npm:3.0.0" - checksum: 36142f46005ed74ce3a45c55545ec4e7da8e243554179e345a786baf144e5c4a35fb7bdc49fadfa9f18bd08000589b6fe364abdadfc4e1eb0e1b9914a6bb9c56 - languageName: node - linkType: hard - -"get-value@npm:^2.0.3, get-value@npm:^2.0.6": - version: 2.0.6 - resolution: "get-value@npm:2.0.6" - checksum: 5c3b99cb5398ea8016bf46ff17afc5d1d286874d2ad38ca5edb6e87d75c0965b0094cb9a9dddef2c59c23d250702323539a7fbdd870620db38c7e7d7ec87c1eb - languageName: node - linkType: hard - -"github-markdown-css@npm:2.4.1": - version: 2.4.1 - resolution: "github-markdown-css@npm:2.4.1" - checksum: 87aa9465a56fa36a5422dae2f717d0a9b618821a5e1991e7242c1482ecc25a396f7e658162ee7273ef4df671fd15b2fd1cce95e91c6769b9971d465aa38ed357 - languageName: node - linkType: hard - -"glob-parent@npm:^3.1.0": - version: 3.1.0 - resolution: "glob-parent@npm:3.1.0" - dependencies: - is-glob: ^3.1.0 - path-dirname: ^1.0.0 - checksum: 653d559237e89a11b9934bef3f392ec42335602034c928590544d383ff5ef449f7b12f3cfa539708e74bc0a6c28ab1fe51d663cc07463cdf899ba92afd85a855 - languageName: node - linkType: hard - -"glob-slash@npm:^1.0.0": - version: 1.0.0 - resolution: "glob-slash@npm:1.0.0" - checksum: a11ade938ddf19b96f078af78124dbf8ff49db97791756dc3bb57d4ca83590f16186c1bee0c217984283a19bd6eb1341ddc41ee7544e1e0238d421f33dd69c5d - languageName: node - linkType: hard - -"glob-slasher@npm:^1.0.1": - version: 1.0.1 - resolution: "glob-slasher@npm:1.0.1" - dependencies: - glob-slash: ^1.0.0 - lodash.isobject: ^2.4.1 - toxic: ^1.0.0 - checksum: a75a46236037411f7e1e09a4ee75a29751fbcca8094b20d389fbe03656ecd9bce2d0afeea9fc58b2787da082eb880536366b7f183d5127824a6e36ac9b5f6bb6 - languageName: node - linkType: hard - -"glob@npm:7.0.x": - version: 7.0.6 - resolution: "glob@npm:7.0.6" - dependencies: - fs.realpath: ^1.0.0 - inflight: ^1.0.4 - inherits: 2 - minimatch: ^3.0.2 - once: ^1.3.0 - path-is-absolute: ^1.0.0 - checksum: 6ad065f51982f9a76f7052984121c95bca376ea02060b21200ad62b400422b05f0dc331f72da89a73c21a2451cbe9bec16bb17dcf37a516dc51bbbb6efe462a1 - languageName: node - linkType: hard - -"glob@npm:^5.0.15": - version: 5.0.15 - resolution: "glob@npm:5.0.15" - dependencies: - inflight: ^1.0.4 - inherits: 2 - minimatch: 2 || 3 - once: ^1.3.0 - path-is-absolute: ^1.0.0 - checksum: f9742448303460672607e569457f1b57e486a79a985e269b69465834d2075b243378225f65dc54c09fcd4b75e4fb34442aec88f33f8c65fa4abccc8ee2dc2f5d - languageName: node - linkType: hard - -"glob@npm:^7.1.2, glob@npm:^7.1.3, glob@npm:^7.1.4": - version: 7.2.3 - resolution: "glob@npm:7.2.3" - dependencies: - fs.realpath: ^1.0.0 - inflight: ^1.0.4 - inherits: 2 - minimatch: ^3.1.1 - once: ^1.3.0 - path-is-absolute: ^1.0.0 - checksum: 29452e97b38fa704dabb1d1045350fb2467cf0277e155aa9ff7077e90ad81d1ea9d53d3ee63bd37c05b09a065e90f16aec4a65f5b8de401d1dac40bc5605d133 - languageName: node - linkType: hard - -"glob@npm:^8.0.1": - version: 8.1.0 - resolution: "glob@npm:8.1.0" - dependencies: - fs.realpath: ^1.0.0 - inflight: ^1.0.4 - inherits: 2 - minimatch: ^5.0.1 - once: ^1.3.0 - checksum: 92fbea3221a7d12075f26f0227abac435de868dd0736a17170663783296d0dd8d3d532a5672b4488a439bf5d7fb85cdd07c11185d6cd39184f0385cbdfb86a47 - languageName: node - linkType: hard - -"global-dirs@npm:^0.1.0": - version: 0.1.1 - resolution: "global-dirs@npm:0.1.1" - dependencies: - ini: ^1.3.4 - checksum: 10624f5a8ddb8634c22804c6b24f93fb591c3639a6bc78e3584e01a238fc6f7b7965824184e57d63f6df36980b6c191484ad7bc6c35a1599b8f1d64be64c2a4a - languageName: node - linkType: hard - -"gnode@npm:0.1.2": - version: 0.1.2 - resolution: "gnode@npm:0.1.2" - dependencies: - regenerator: ~0.8.8 - bin: - gnode: bin/gnode - checksum: 3dbebdef578822f8fe8fdf7e40f7f6822797bb3627bd57f1c28734f2c9a1dc63fff94aaa792d6e87886323adebaaa40cb0abbd15ee6194d307752b0792effcbb - languageName: node - linkType: hard - -"got@npm:^6.7.1": - version: 6.7.1 - resolution: "got@npm:6.7.1" - dependencies: - create-error-class: ^3.0.0 - duplexer3: ^0.1.4 - get-stream: ^3.0.0 - is-redirect: ^1.0.0 - is-retry-allowed: ^1.0.0 - is-stream: ^1.0.0 - lowercase-keys: ^1.0.0 - safe-buffer: ^5.0.1 - timed-out: ^4.0.0 - unzip-response: ^2.0.1 - url-parse-lax: ^1.0.0 - checksum: e816306dbd968aa74c6bebcb611797fc08fe84af0f274b3af75d7d6a1f745bdf0dfe9279be0047646038b8b40ac94735d11187be1fb74069831520ae70fbd507 - languageName: node - linkType: hard - -"graceful-fs@npm:^4.1.11, graceful-fs@npm:^4.1.2, graceful-fs@npm:^4.1.6, graceful-fs@npm:^4.1.9, graceful-fs@npm:^4.2.6": - version: 4.2.10 - resolution: "graceful-fs@npm:4.2.10" - checksum: 3f109d70ae123951905d85032ebeae3c2a5a7a997430df00ea30df0e3a6c60cf6689b109654d6fdacd28810a053348c4d14642da1d075049e6be1ba5216218da - languageName: node - linkType: hard - -"gray-matter@npm:^2.0.0": - version: 2.1.1 - resolution: "gray-matter@npm:2.1.1" - dependencies: - ansi-red: ^0.1.1 - coffee-script: ^1.12.4 - extend-shallow: ^2.0.1 - js-yaml: ^3.8.1 - toml: ^2.3.2 - checksum: 03e96e237960199c6fffb7d1bbc70605ca620d92afc7cb33193f6b36cd834dbb2b71cdd0374f23f19c568b0e34a834dbd02201edb992bb37af2a6887fdd842b9 - languageName: node - linkType: hard - -"gray-matter@npm:^4.0.3": - version: 4.0.3 - resolution: "gray-matter@npm:4.0.3" - dependencies: - js-yaml: ^3.13.1 - kind-of: ^6.0.2 - section-matter: ^1.0.0 - strip-bom-string: ^1.0.0 - checksum: 37717bd424344487d655392251ce8d8878a1275ee087003e61208fba3bfd59cbb73a85b2159abf742ae95e23db04964813fdc33ae18b074208428b2528205222 - languageName: node - linkType: hard - -"handlebars@npm:^4.7.7": - version: 4.7.7 - resolution: "handlebars@npm:4.7.7" - dependencies: - minimist: ^1.2.5 - neo-async: ^2.6.0 - source-map: ^0.6.1 - uglify-js: ^3.1.4 - wordwrap: ^1.0.0 - dependenciesMeta: - uglify-js: - optional: true - bin: - handlebars: bin/handlebars - checksum: 1e79a43f5e18d15742977cb987923eab3e2a8f44f2d9d340982bcb69e1735ed049226e534d7c1074eaddaf37e4fb4f471a8adb71cddd5bc8cf3f894241df5cee - languageName: node - linkType: hard - -"has-ansi@npm:^2.0.0": - version: 2.0.0 - resolution: "has-ansi@npm:2.0.0" - dependencies: - ansi-regex: ^2.0.0 - checksum: 1b51daa0214440db171ff359d0a2d17bc20061164c57e76234f614c91dbd2a79ddd68dfc8ee73629366f7be45a6df5f2ea9de83f52e1ca24433f2cc78c35d8ec - languageName: node - linkType: hard - -"has-flag@npm:^1.0.0": - version: 1.0.0 - resolution: "has-flag@npm:1.0.0" - checksum: ce3f8ae978e70f16e4bbe17d3f0f6d6c0a3dd3b62a23f97c91d0fda9ed8e305e13baf95cc5bee4463b9f25ac9f5255de113165c5fb285e01b8065b2ac079b301 - languageName: node - linkType: hard - -"has-flag@npm:^3.0.0": - version: 3.0.0 - resolution: "has-flag@npm:3.0.0" - checksum: 4a15638b454bf086c8148979aae044dd6e39d63904cd452d970374fa6a87623423da485dfb814e7be882e05c096a7ccf1ebd48e7e7501d0208d8384ff4dea73b - languageName: node - linkType: hard - -"has-generators@npm:^1.0.1": - version: 1.0.1 - resolution: "has-generators@npm:1.0.1" - checksum: 2310565c27ad0a08808c776d9cd42089dbc1b0a8958ad1c4ce62a1b69069d70e774a57ee1ae771be76980baab33c6797494945a2a4e3736668e5ba81cac9ca87 - languageName: node - linkType: hard - -"has-symbols@npm:^1.0.2, has-symbols@npm:^1.0.3": - version: 1.0.3 - resolution: "has-symbols@npm:1.0.3" - checksum: a054c40c631c0d5741a8285010a0777ea0c068f99ed43e5d6eb12972da223f8af553a455132fdb0801bdcfa0e0f443c0c03a68d8555aa529b3144b446c3f2410 - languageName: node - linkType: hard - -"has-tostringtag@npm:^1.0.0": - version: 1.0.0 - resolution: "has-tostringtag@npm:1.0.0" - dependencies: - has-symbols: ^1.0.2 - checksum: cc12eb28cb6ae22369ebaad3a8ab0799ed61270991be88f208d508076a1e99abe4198c965935ce85ea90b60c94ddda73693b0920b58e7ead048b4a391b502c1c - languageName: node - linkType: hard - -"has-unicode@npm:^2.0.1": - version: 2.0.1 - resolution: "has-unicode@npm:2.0.1" - checksum: 1eab07a7436512db0be40a710b29b5dc21fa04880b7f63c9980b706683127e3c1b57cb80ea96d47991bdae2dfe479604f6a1ba410106ee1046a41d1bd0814400 - languageName: node - linkType: hard - -"has-value@npm:^0.3.1": - version: 0.3.1 - resolution: "has-value@npm:0.3.1" - dependencies: - get-value: ^2.0.3 - has-values: ^0.1.4 - isobject: ^2.0.0 - checksum: 29e2a1e6571dad83451b769c7ce032fce6009f65bccace07c2962d3ad4d5530b6743d8f3229e4ecf3ea8e905d23a752c5f7089100c1f3162039fa6dc3976558f - languageName: node - linkType: hard - -"has-value@npm:^1.0.0": - version: 1.0.0 - resolution: "has-value@npm:1.0.0" - dependencies: - get-value: ^2.0.6 - has-values: ^1.0.0 - isobject: ^3.0.0 - checksum: b9421d354e44f03d3272ac39fd49f804f19bc1e4fa3ceef7745df43d6b402053f828445c03226b21d7d934a21ac9cf4bc569396dc312f496ddff873197bbd847 - languageName: node - linkType: hard - -"has-values@npm:^0.1.4": - version: 0.1.4 - resolution: "has-values@npm:0.1.4" - checksum: ab1c4bcaf811ccd1856c11cfe90e62fca9e2b026ebe474233a3d282d8d67e3b59ed85b622c7673bac3db198cb98bd1da2b39300a2f98e453729b115350af49bc - languageName: node - linkType: hard - -"has-values@npm:^1.0.0": - version: 1.0.0 - resolution: "has-values@npm:1.0.0" - dependencies: - is-number: ^3.0.0 - kind-of: ^4.0.0 - checksum: 77e6693f732b5e4cf6c38dfe85fdcefad0fab011af74995c3e83863fabf5e3a836f406d83565816baa0bc0a523c9410db8b990fe977074d61aeb6d8f4fcffa11 - languageName: node - linkType: hard - -"has@npm:^1.0.0, has@npm:^1.0.3": - version: 1.0.3 - resolution: "has@npm:1.0.3" - dependencies: - function-bind: ^1.1.1 - checksum: b9ad53d53be4af90ce5d1c38331e712522417d017d5ef1ebd0507e07c2fbad8686fffb8e12ddecd4c39ca9b9b47431afbb975b8abf7f3c3b82c98e9aad052792 - languageName: node - linkType: hard - -"hash-base@npm:^3.0.0": - version: 3.1.0 - resolution: "hash-base@npm:3.1.0" - dependencies: - inherits: ^2.0.4 - readable-stream: ^3.6.0 - safe-buffer: ^5.2.0 - checksum: 26b7e97ac3de13cb23fc3145e7e3450b0530274a9562144fc2bf5c1e2983afd0e09ed7cc3b20974ba66039fad316db463da80eb452e7373e780cbee9a0d2f2dc - languageName: node - linkType: hard - -"hash.js@npm:^1.0.0, hash.js@npm:^1.0.3": - version: 1.1.7 - resolution: "hash.js@npm:1.1.7" - dependencies: - inherits: ^2.0.3 - minimalistic-assert: ^1.0.1 - checksum: e350096e659c62422b85fa508e4b3669017311aa4c49b74f19f8e1bc7f3a54a584fdfd45326d4964d6011f2b2d882e38bea775a96046f2a61b7779a979629d8f - languageName: node - linkType: hard - -"he@npm:1.2.0": - version: 1.2.0 - resolution: "he@npm:1.2.0" - bin: - he: bin/he - checksum: 3d4d6babccccd79c5c5a3f929a68af33360d6445587d628087f39a965079d84f18ce9c3d3f917ee1e3978916fc833bb8b29377c3b403f919426f91bc6965e7a7 - languageName: node - linkType: hard - -"highlight.js@npm:^9.13.1": - version: 9.18.5 - resolution: "highlight.js@npm:9.18.5" - checksum: a8afdb395869bba8a892dd8891b738d3bd48fe2e5b6843ec3181c93d73f52abf2cab863424caa631442a7bbafac222bafdab3f5a536a69aab9c60d4c1b7f8b77 - languageName: node - linkType: hard - -"hmac-drbg@npm:^1.0.1": - version: 1.0.1 - resolution: "hmac-drbg@npm:1.0.1" - dependencies: - hash.js: ^1.0.3 - minimalistic-assert: ^1.0.0 - minimalistic-crypto-utils: ^1.0.1 - checksum: bd30b6a68d7f22d63f10e1888aee497d7c2c5c0bb469e66bbdac99f143904d1dfe95f8131f95b3e86c86dd239963c9d972fcbe147e7cffa00e55d18585c43fe0 - languageName: node - linkType: hard - -"home-dir@npm:^1.0.0": - version: 1.0.0 - resolution: "home-dir@npm:1.0.0" - checksum: fd15581ae63e00c41a4413c5029382514d928adbe3219ce31a7f58d7a4296d3a5c3e928295b2cb8f2f3614f5720a83fe480c92308a823034a572fd0baaf19eef - languageName: node - linkType: hard - -"hosted-git-info@npm:^2.1.4": - version: 2.8.9 - resolution: "hosted-git-info@npm:2.8.9" - checksum: c955394bdab888a1e9bb10eb33029e0f7ce5a2ac7b3f158099dc8c486c99e73809dca609f5694b223920ca2174db33d32b12f9a2a47141dc59607c29da5a62dd - languageName: node - linkType: hard - -"htmlescape@npm:^1.1.0": - version: 1.1.1 - resolution: "htmlescape@npm:1.1.1" - checksum: c59a915ae6ae076b5720243c8c594fd8c76e927d511ed5f205e4d586f47d521478d7148dc7fbe3d4a0cfc30abcc2dd215b30255903c09ed04eb38bca44367c5d - languageName: node - linkType: hard - -"htmlparser2@npm:^3.9.1": - version: 3.10.1 - resolution: "htmlparser2@npm:3.10.1" - dependencies: - domelementtype: ^1.3.1 - domhandler: ^2.3.0 - domutils: ^1.5.1 - entities: ^1.1.1 - inherits: ^2.0.1 - readable-stream: ^3.1.1 - checksum: 6875f7dd875aa10be17d9b130e3738cd8ed4010b1f2edaf4442c82dfafe9d9336b155870dcc39f38843cbf7fef5e4fcfdf0c4c1fd4db3a1b91a1e0ee8f6c3475 - languageName: node - linkType: hard - -"http-cache-semantics@npm:^4.1.0": - version: 4.1.1 - resolution: "http-cache-semantics@npm:4.1.1" - checksum: 83ac0bc60b17a3a36f9953e7be55e5c8f41acc61b22583060e8dedc9dd5e3607c823a88d0926f9150e571f90946835c7fe150732801010845c72cd8bbff1a236 - languageName: node - linkType: hard - -"http-parser-js@npm:>=0.5.1": - version: 0.5.8 - resolution: "http-parser-js@npm:0.5.8" - checksum: 6bbdf2429858e8cf13c62375b0bfb6dc3955ca0f32e58237488bc86cd2378f31d31785fd3ac4ce93f1c74e0189cf8823c91f5cb061696214fd368d2452dc871d - languageName: node - linkType: hard - -"http-proxy-agent@npm:^5.0.0": - version: 5.0.0 - resolution: "http-proxy-agent@npm:5.0.0" - dependencies: - "@tootallnate/once": 2 - agent-base: 6 - debug: 4 - checksum: e2ee1ff1656a131953839b2a19cd1f3a52d97c25ba87bd2559af6ae87114abf60971e498021f9b73f9fd78aea8876d1fb0d4656aac8a03c6caa9fc175f22b786 - languageName: node - linkType: hard - -"https-browserify@npm:~0.0.0": - version: 0.0.1 - resolution: "https-browserify@npm:0.0.1" - checksum: 331683e00f2e4718912783540ed7faddb424f20c789eab6cc28fb8ebabc11e3409365e6b62a1eca6ac033c81044be87b5d7cf684170e392cf5a629d0f77dc8be - languageName: node - linkType: hard - -"https-proxy-agent@npm:^5.0.0": - version: 5.0.1 - resolution: "https-proxy-agent@npm:5.0.1" - dependencies: - agent-base: 6 - debug: 4 - checksum: 571fccdf38184f05943e12d37d6ce38197becdd69e58d03f43637f7fa1269cf303a7d228aa27e5b27bbd3af8f09fd938e1c91dcfefff2df7ba77c20ed8dfc765 - languageName: node - linkType: hard - -"humanize-ms@npm:^1.2.1": - version: 1.2.1 - resolution: "humanize-ms@npm:1.2.1" - dependencies: - ms: ^2.0.0 - checksum: 9c7a74a2827f9294c009266c82031030eae811ca87b0da3dceb8d6071b9bde22c9f3daef0469c3c533cc67a97d8a167cd9fc0389350e5f415f61a79b171ded16 - languageName: node - linkType: hard - -"iconfonts@npm:0.10.0": - version: 0.10.0 - resolution: "iconfonts@npm:0.10.0" - checksum: 11aa11a0f5e22f1b476f65c49b68b2836ba49b524e3f4a7bb0a446a9fdfd980d2c7447d2dd8918087b9a9a57a2159b0307eb7528cf74e0e0ace8217ceef322fb - languageName: node - linkType: hard - -"iconv-lite@npm:^0.4.5": - version: 0.4.24 - resolution: "iconv-lite@npm:0.4.24" - dependencies: - safer-buffer: ">= 2.1.2 < 3" - checksum: bd9f120f5a5b306f0bc0b9ae1edeb1577161503f5f8252a20f1a9e56ef8775c9959fd01c55f2d3a39d9a8abaf3e30c1abeb1895f367dcbbe0a8fd1c9ca01c4f6 - languageName: node - linkType: hard - -"iconv-lite@npm:^0.6.2": - version: 0.6.3 - resolution: "iconv-lite@npm:0.6.3" - dependencies: - safer-buffer: ">= 2.1.2 < 3.0.0" - checksum: 3f60d47a5c8fc3313317edfd29a00a692cc87a19cac0159e2ce711d0ebc9019064108323b5e493625e25594f11c6236647d8e256fbe7a58f4a3b33b89e6d30bf - languageName: node - linkType: hard - -"ieee754@npm:^1.1.4": - version: 1.2.1 - resolution: "ieee754@npm:1.2.1" - checksum: 5144c0c9815e54ada181d80a0b810221a253562422e7c6c3a60b1901154184f49326ec239d618c416c1c5945a2e197107aee8d986a3dd836b53dffefd99b5e7e - languageName: node - linkType: hard - -"import-lazy@npm:^2.1.0": - version: 2.1.0 - resolution: "import-lazy@npm:2.1.0" - checksum: 05294f3b9dd4971d3a996f0d2f176410fb6745d491d6e73376429189f5c1c3d290548116b2960a7cf3e89c20cdf11431739d1d2d8c54b84061980795010e803a - languageName: node - linkType: hard - -"imurmurhash@npm:^0.1.4": - version: 0.1.4 - resolution: "imurmurhash@npm:0.1.4" - checksum: 7cae75c8cd9a50f57dadd77482359f659eaebac0319dd9368bcd1714f55e65badd6929ca58569da2b6494ef13fdd5598cd700b1eba23f8b79c5f19d195a3ecf7 - languageName: node - linkType: hard - -"indent-string@npm:^3.0.0": - version: 3.2.0 - resolution: "indent-string@npm:3.2.0" - checksum: a0b72603bba6c985d367fda3a25aad16423d2056b22a7e83ee2dd9ce0ce3d03d1e078644b679087aa7edf1cfb457f0d96d9eeadc0b12f38582088cc00e995d2f - languageName: node - linkType: hard - -"indent-string@npm:^4.0.0": - version: 4.0.0 - resolution: "indent-string@npm:4.0.0" - checksum: 824cfb9929d031dabf059bebfe08cf3137365e112019086ed3dcff6a0a7b698cb80cf67ccccde0e25b9e2d7527aa6cc1fed1ac490c752162496caba3e6699612 - languageName: node - linkType: hard - -"indexof@npm:0.0.1": - version: 0.0.1 - resolution: "indexof@npm:0.0.1" - checksum: 0fb04e8b147b8585d981a6df1564f25bb3678d6fa74e33e5cecc1464b10f78e15e8ef6bb688f135fe5c2844a128fac8a7831cbe5adc81fdcf12681b093dfcc25 - languageName: node - linkType: hard - -"infer-owner@npm:^1.0.4": - version: 1.0.4 - resolution: "infer-owner@npm:1.0.4" - checksum: 181e732764e4a0611576466b4b87dac338972b839920b2a8cde43642e4ed6bd54dc1fb0b40874728f2a2df9a1b097b8ff83b56d5f8f8e3927f837fdcb47d8a89 - languageName: node - linkType: hard - -"inflight@npm:^1.0.4": - version: 1.0.6 - resolution: "inflight@npm:1.0.6" - dependencies: - once: ^1.3.0 - wrappy: 1 - checksum: f4f76aa072ce19fae87ce1ef7d221e709afb59d445e05d47fba710e85470923a75de35bfae47da6de1b18afc3ce83d70facf44cfb0aff89f0a3f45c0a0244dfd - languageName: node - linkType: hard - -"inherits@npm:2, inherits@npm:^2.0.1, inherits@npm:^2.0.3, inherits@npm:^2.0.4, inherits@npm:~2.0.1, inherits@npm:~2.0.3": - version: 2.0.4 - resolution: "inherits@npm:2.0.4" - checksum: 4a48a733847879d6cf6691860a6b1e3f0f4754176e4d71494c41f3475553768b10f84b5ce1d40fbd0e34e6bfbb864ee35858ad4dd2cf31e02fc4a154b724d7f1 - languageName: node - linkType: hard - -"inherits@npm:2.0.1": - version: 2.0.1 - resolution: "inherits@npm:2.0.1" - checksum: 6536b9377296d4ce8ee89c5c543cb75030934e61af42dba98a428e7d026938c5985ea4d1e3b87743a5b834f40ed1187f89c2d7479e9d59e41d2d1051aefba07b - languageName: node - linkType: hard - -"inherits@npm:2.0.3": - version: 2.0.3 - resolution: "inherits@npm:2.0.3" - checksum: 78cb8d7d850d20a5e9a7f3620db31483aa00ad5f722ce03a55b110e5a723539b3716a3b463e2b96ce3fe286f33afc7c131fa2f91407528ba80cea98a7545d4c0 - languageName: node - linkType: hard - -"ini@npm:^1.3.4, ini@npm:~1.3.0": - version: 1.3.8 - resolution: "ini@npm:1.3.8" - checksum: dfd98b0ca3a4fc1e323e38a6c8eb8936e31a97a918d3b377649ea15bdb15d481207a0dda1021efbd86b464cae29a0d33c1d7dcaf6c5672bee17fa849bc50a1b3 - languageName: node - linkType: hard - -"inline-source-map@npm:~0.6.0": - version: 0.6.2 - resolution: "inline-source-map@npm:0.6.2" - dependencies: - source-map: ~0.5.3 - checksum: 1f7fa2ad1764d03a0a525d5c47993f9e3d0445f29c2e2413d2878deecb6ecb1e6f9137a6207e3db8dc129565bde15de88c1ba2665407e753e7f3ec768ca29262 - languageName: node - linkType: hard - -"insert-module-globals@npm:^7.0.0": - version: 7.2.1 - resolution: "insert-module-globals@npm:7.2.1" - dependencies: - JSONStream: ^1.0.3 - acorn-node: ^1.5.2 - combine-source-map: ^0.8.0 - concat-stream: ^1.6.1 - is-buffer: ^1.1.0 - path-is-absolute: ^1.0.1 - process: ~0.11.0 - through2: ^2.0.0 - undeclared-identifiers: ^1.1.2 - xtend: ^4.0.0 - bin: - insert-module-globals: bin/cmd.js - checksum: c44de7e802186e3207e24beadd71a5bb834700456a9e6f5c8fbb415b6f8356aff44df806e32bf9131143c53348d873fb050ea2b8f3c4cac762922e191b6bef15 - languageName: node - linkType: hard - -"invert-kv@npm:^1.0.0": - version: 1.0.0 - resolution: "invert-kv@npm:1.0.0" - checksum: aebeee31dda3b3d25ffd242e9a050926e7fe5df642d60953ab183aca1a7d1ffb39922eb2618affb0e850cf2923116f0da1345367759d88d097df5da1f1e1590e - languageName: node - linkType: hard - -"ip@npm:^2.0.0": - version: 2.0.0 - resolution: "ip@npm:2.0.0" - checksum: cfcfac6b873b701996d71ec82a7dd27ba92450afdb421e356f44044ed688df04567344c36cbacea7d01b1c39a4c732dc012570ebe9bebfb06f27314bca625349 - languageName: node - linkType: hard - -"is-accessor-descriptor@npm:^0.1.6": - version: 0.1.6 - resolution: "is-accessor-descriptor@npm:0.1.6" - dependencies: - kind-of: ^3.0.2 - checksum: 3d629a086a9585bc16a83a8e8a3416f400023301855cafb7ccc9a1d63145b7480f0ad28877dcc2cce09492c4ec1c39ef4c071996f24ee6ac626be4217b8ffc8a - languageName: node - linkType: hard - -"is-accessor-descriptor@npm:^1.0.0": - version: 1.0.0 - resolution: "is-accessor-descriptor@npm:1.0.0" - dependencies: - kind-of: ^6.0.0 - checksum: 8e475968e9b22f9849343c25854fa24492dbe8ba0dea1a818978f9f1b887339190b022c9300d08c47fe36f1b913d70ce8cbaca00369c55a56705fdb7caed37fe - languageName: node - linkType: hard - -"is-arrayish@npm:^0.2.1": - version: 0.2.1 - resolution: "is-arrayish@npm:0.2.1" - checksum: eef4417e3c10e60e2c810b6084942b3ead455af16c4509959a27e490e7aee87cfb3f38e01bbde92220b528a0ee1a18d52b787e1458ee86174d8c7f0e58cd488f - languageName: node - linkType: hard - -"is-binary-path@npm:^1.0.0": - version: 1.0.1 - resolution: "is-binary-path@npm:1.0.1" - dependencies: - binary-extensions: ^1.0.0 - checksum: a803c99e9d898170c3b44a86fbdc0736d3d7fcbe737345433fb78e810b9fe30c982657782ad0e676644ba4693ddf05601a7423b5611423218663d6b533341ac9 - languageName: node - linkType: hard - -"is-buffer@npm:^1.1.0, is-buffer@npm:^1.1.5": - version: 1.1.6 - resolution: "is-buffer@npm:1.1.6" - checksum: 4a186d995d8bbf9153b4bd9ff9fd04ae75068fe695d29025d25e592d9488911eeece84eefbd8fa41b8ddcc0711058a71d4c466dcf6f1f6e1d83830052d8ca707 - languageName: node - linkType: hard - -"is-ci@npm:^1.0.10": - version: 1.2.1 - resolution: "is-ci@npm:1.2.1" - dependencies: - ci-info: ^1.5.0 - bin: - is-ci: bin.js - checksum: eca06c5626e54ec01be6f9114a8f19b3f571602cfe66458e42ccc42e401e2ebbe1bd3b2fcaa93b5896b9c759e964f3c7f4d9b2d0f4fc4ef5dba78a7c4825e0be - languageName: node - linkType: hard - -"is-core-module@npm:^2.9.0": - version: 2.11.0 - resolution: "is-core-module@npm:2.11.0" - dependencies: - has: ^1.0.3 - checksum: f96fd490c6b48eb4f6d10ba815c6ef13f410b0ba6f7eb8577af51697de523e5f2cd9de1c441b51d27251bf0e4aebc936545e33a5d26d5d51f28d25698d4a8bab - languageName: node - linkType: hard - -"is-data-descriptor@npm:^0.1.4": - version: 0.1.4 - resolution: "is-data-descriptor@npm:0.1.4" - dependencies: - kind-of: ^3.0.2 - checksum: 5c622e078ba933a78338ae398a3d1fc5c23332b395312daf4f74bab4afb10d061cea74821add726cb4db8b946ba36217ee71a24fe71dd5bca4632edb7f6aad87 - languageName: node - linkType: hard - -"is-data-descriptor@npm:^1.0.0": - version: 1.0.0 - resolution: "is-data-descriptor@npm:1.0.0" - dependencies: - kind-of: ^6.0.0 - checksum: e705e6816241c013b05a65dc452244ee378d1c3e3842bd140beabe6e12c0d700ef23c91803f971aa7b091fb0573c5da8963af34a2b573337d87bc3e1f53a4e6d - languageName: node - linkType: hard - -"is-descriptor@npm:^0.1.0": - version: 0.1.6 - resolution: "is-descriptor@npm:0.1.6" - dependencies: - is-accessor-descriptor: ^0.1.6 - is-data-descriptor: ^0.1.4 - kind-of: ^5.0.0 - checksum: 0f780c1b46b465f71d970fd7754096ffdb7b69fd8797ca1f5069c163eaedcd6a20ec4a50af669075c9ebcfb5266d2e53c8b227e485eefdb0d1fee09aa1dd8ab6 - languageName: node - linkType: hard - -"is-descriptor@npm:^1.0.0, is-descriptor@npm:^1.0.2": - version: 1.0.2 - resolution: "is-descriptor@npm:1.0.2" - dependencies: - is-accessor-descriptor: ^1.0.0 - is-data-descriptor: ^1.0.0 - kind-of: ^6.0.2 - checksum: 2ed623560bee035fb67b23e32ce885700bef8abe3fbf8c909907d86507b91a2c89a9d3a4d835a4d7334dd5db0237a0aeae9ca109c1e4ef1c0e7b577c0846ab5a - languageName: node - linkType: hard - -"is-expression@npm:^3.0.0": - version: 3.0.0 - resolution: "is-expression@npm:3.0.0" - dependencies: - acorn: ~4.0.2 - object-assign: ^4.0.1 - checksum: f80537cefbb3e1921617b1f5977def431ff99e3145e2506f17ac293fe66781d9ec0af219eeba36320bb186ba04298dc7aa3dcebbbb5f0167c5f0184efc0a648a - languageName: node - linkType: hard - -"is-extendable@npm:^0.1.0, is-extendable@npm:^0.1.1": - version: 0.1.1 - resolution: "is-extendable@npm:0.1.1" - checksum: 3875571d20a7563772ecc7a5f36cb03167e9be31ad259041b4a8f73f33f885441f778cee1f1fe0085eb4bc71679b9d8c923690003a36a6a5fdf8023e6e3f0672 - languageName: node - linkType: hard - -"is-extendable@npm:^1.0.1": - version: 1.0.1 - resolution: "is-extendable@npm:1.0.1" - dependencies: - is-plain-object: ^2.0.4 - checksum: db07bc1e9de6170de70eff7001943691f05b9d1547730b11be01c0ebfe67362912ba743cf4be6fd20a5e03b4180c685dad80b7c509fe717037e3eee30ad8e84f - languageName: node - linkType: hard - -"is-extglob@npm:^2.1.0, is-extglob@npm:^2.1.1": - version: 2.1.1 - resolution: "is-extglob@npm:2.1.1" - checksum: df033653d06d0eb567461e58a7a8c9f940bd8c22274b94bf7671ab36df5719791aae15eef6d83bbb5e23283967f2f984b8914559d4449efda578c775c4be6f85 - languageName: node - linkType: hard - -"is-fullwidth-code-point@npm:^2.0.0": - version: 2.0.0 - resolution: "is-fullwidth-code-point@npm:2.0.0" - checksum: eef9c6e15f68085fec19ff6a978a6f1b8f48018fd1265035552078ee945573594933b09bbd6f562553e2a241561439f1ef5339276eba68d272001343084cfab8 - languageName: node - linkType: hard - -"is-fullwidth-code-point@npm:^3.0.0": - version: 3.0.0 - resolution: "is-fullwidth-code-point@npm:3.0.0" - checksum: 44a30c29457c7fb8f00297bce733f0a64cd22eca270f83e58c105e0d015e45c019491a4ab2faef91ab51d4738c670daff901c799f6a700e27f7314029e99e348 - languageName: node - linkType: hard - -"is-glob@npm:^3.1.0": - version: 3.1.0 - resolution: "is-glob@npm:3.1.0" - dependencies: - is-extglob: ^2.1.0 - checksum: 9d483bca84f16f01230f7c7c8c63735248fe1064346f292e0f6f8c76475fd20c6f50fc19941af5bec35f85d6bf26f4b7768f39a48a5f5fdc72b408dc74e07afc - languageName: node - linkType: hard - -"is-glob@npm:^4.0.0": - version: 4.0.3 - resolution: "is-glob@npm:4.0.3" - dependencies: - is-extglob: ^2.1.1 - checksum: d381c1319fcb69d341cc6e6c7cd588e17cd94722d9a32dbd60660b993c4fb7d0f19438674e68dfec686d09b7c73139c9166b47597f846af387450224a8101ab4 - languageName: node - linkType: hard - -"is-installed-globally@npm:^0.1.0": - version: 0.1.0 - resolution: "is-installed-globally@npm:0.1.0" - dependencies: - global-dirs: ^0.1.0 - is-path-inside: ^1.0.0 - checksum: 45a27b3cfa46a174d1b430102cab7a6b5cd7da5d0e0917d3c3478a9f18b9974892534025ab1115d790cfb1d3958f2736fd22057e2eef289cf31820dafdc486e6 - languageName: node - linkType: hard - -"is-lambda@npm:^1.0.1": - version: 1.0.1 - resolution: "is-lambda@npm:1.0.1" - checksum: 93a32f01940220532e5948538699ad610d5924ac86093fcee83022252b363eb0cc99ba53ab084a04e4fb62bf7b5731f55496257a4c38adf87af9c4d352c71c35 - languageName: node - linkType: hard - -"is-npm@npm:^1.0.0": - version: 1.0.0 - resolution: "is-npm@npm:1.0.0" - checksum: 7992bd56bddf001c610b80c9892eea633993f15b73a5de53426cf5cb30d5e5a889aac575f02d4d339fb5a9b7f0a66c454001cfa6cd2541da96d2d675cabd9a1d - languageName: node - linkType: hard - -"is-number@npm:^3.0.0": - version: 3.0.0 - resolution: "is-number@npm:3.0.0" - dependencies: - kind-of: ^3.0.2 - checksum: 0c62bf8e9d72c4dd203a74d8cfc751c746e75513380fef420cda8237e619a988ee43e678ddb23c87ac24d91ac0fe9f22e4ffb1301a50310c697e9d73ca3994e9 - languageName: node - linkType: hard - -"is-number@npm:^7.0.0": - version: 7.0.0 - resolution: "is-number@npm:7.0.0" - checksum: 456ac6f8e0f3111ed34668a624e45315201dff921e5ac181f8ec24923b99e9f32ca1a194912dc79d539c97d33dba17dc635202ff0b2cf98326f608323276d27a - languageName: node - linkType: hard - -"is-obj@npm:^1.0.0": - version: 1.0.1 - resolution: "is-obj@npm:1.0.1" - checksum: 3ccf0efdea12951e0b9c784e2b00e77e87b2f8bd30b42a498548a8afcc11b3287342a2030c308e473e93a7a19c9ea7854c99a8832a476591c727df2a9c79796c - languageName: node - linkType: hard - -"is-path-inside@npm:^1.0.0": - version: 1.0.1 - resolution: "is-path-inside@npm:1.0.1" - dependencies: - path-is-inside: ^1.0.1 - checksum: 07e52c81163937ff89b4700b7ad474de3b396846b55ed87530fb0a22cb9103926152939f673bc1a0592448e7e4e9d75eb734be21b4ad411311065c6a509fae54 - languageName: node - linkType: hard - -"is-plain-obj@npm:^1.1.0": - version: 1.1.0 - resolution: "is-plain-obj@npm:1.1.0" - checksum: 0ee04807797aad50859652a7467481816cbb57e5cc97d813a7dcd8915da8195dc68c436010bf39d195226cde6a2d352f4b815f16f26b7bf486a5754290629931 - languageName: node - linkType: hard - -"is-plain-object@npm:^2.0.3, is-plain-object@npm:^2.0.4": - version: 2.0.4 - resolution: "is-plain-object@npm:2.0.4" - dependencies: - isobject: ^3.0.1 - checksum: 2a401140cfd86cabe25214956ae2cfee6fbd8186809555cd0e84574f88de7b17abacb2e477a6a658fa54c6083ecbda1e6ae404c7720244cd198903848fca70ca - languageName: node - linkType: hard - -"is-promise@npm:^2.0.0": - version: 2.2.2 - resolution: "is-promise@npm:2.2.2" - checksum: 18bf7d1c59953e0ad82a1ed963fb3dc0d135c8f299a14f89a17af312fc918373136e56028e8831700e1933519630cc2fd4179a777030330fde20d34e96f40c78 - languageName: node - linkType: hard - -"is-redirect@npm:^1.0.0": - version: 1.0.0 - resolution: "is-redirect@npm:1.0.0" - checksum: 25dd3d9943f57ef0f29d28e2d9deda8288e0c7098ddc65abec3364ced9a6491ea06cfaf5110c61fc40ec1fde706b73cee5d171f85278edbf4e409b85725bfea7 - languageName: node - linkType: hard - -"is-regex@npm:^1.0.3": - version: 1.1.4 - resolution: "is-regex@npm:1.1.4" - dependencies: - call-bind: ^1.0.2 - has-tostringtag: ^1.0.0 - checksum: 362399b33535bc8f386d96c45c9feb04cf7f8b41c182f54174c1a45c9abbbe5e31290bbad09a458583ff6bf3b2048672cdb1881b13289569a7c548370856a652 - languageName: node - linkType: hard - -"is-retry-allowed@npm:^1.0.0": - version: 1.2.0 - resolution: "is-retry-allowed@npm:1.2.0" - checksum: 50d700a89ae31926b1c91b3eb0104dbceeac8790d8b80d02f5c76d9a75c2056f1bb24b5268a8a018dead606bddf116b2262e5ac07401eb8b8783b266ed22558d - languageName: node - linkType: hard - -"is-stream@npm:^1.0.0, is-stream@npm:^1.1.0": - version: 1.1.0 - resolution: "is-stream@npm:1.1.0" - checksum: 063c6bec9d5647aa6d42108d4c59723d2bd4ae42135a2d4db6eadbd49b7ea05b750fd69d279e5c7c45cf9da753ad2c00d8978be354d65aa9f6bb434969c6a2ae - languageName: node - linkType: hard - -"is-url@npm:^1.2.2": - version: 1.2.4 - resolution: "is-url@npm:1.2.4" - checksum: 100e74b3b1feab87a43ef7653736e88d997eb7bd32e71fd3ebc413e58c1cbe56269699c776aaea84244b0567f2a7d68dfaa512a062293ed2f9fdecb394148432 - languageName: node - linkType: hard - -"is-utf8@npm:~0.2.0": - version: 0.2.1 - resolution: "is-utf8@npm:0.2.1" - checksum: 167ccd2be869fc228cc62c1a28df4b78c6b5485d15a29027d3b5dceb09b383e86a3522008b56dcac14b592b22f0a224388718c2505027a994fd8471465de54b3 - languageName: node - linkType: hard - -"is-windows@npm:^1.0.2": - version: 1.0.2 - resolution: "is-windows@npm:1.0.2" - checksum: 438b7e52656fe3b9b293b180defb4e448088e7023a523ec21a91a80b9ff8cdb3377ddb5b6e60f7c7de4fa8b63ab56e121b6705fe081b3cf1b828b0a380009ad7 - languageName: node - linkType: hard - -"is@npm:^3.1.0": - version: 3.3.0 - resolution: "is@npm:3.3.0" - checksum: 81fad3b40c606984c2d0699207c4c48d2a0d29cc834b274d0b74c172f3eeebdb981301fe0d690ce090a96bf021a8a1f8b1325262ad9870c525e557ac4a559c56 - languageName: node - linkType: hard - -"isarray@npm:0.0.1": - version: 0.0.1 - resolution: "isarray@npm:0.0.1" - checksum: 49191f1425681df4a18c2f0f93db3adb85573bcdd6a4482539d98eac9e705d8961317b01175627e860516a2fc45f8f9302db26e5a380a97a520e272e2a40a8d4 - languageName: node - linkType: hard - -"isarray@npm:1.0.0, isarray@npm:^1.0.0, isarray@npm:~1.0.0": - version: 1.0.0 - resolution: "isarray@npm:1.0.0" - checksum: f032df8e02dce8ec565cf2eb605ea939bdccea528dbcf565cdf92bfa2da9110461159d86a537388ef1acef8815a330642d7885b29010e8f7eac967c9993b65ab - languageName: node - linkType: hard - -"isexe@npm:^2.0.0": - version: 2.0.0 - resolution: "isexe@npm:2.0.0" - checksum: 26bf6c5480dda5161c820c5b5c751ae1e766c587b1f951ea3fcfc973bafb7831ae5b54a31a69bd670220e42e99ec154475025a468eae58ea262f813fdc8d1c62 - languageName: node - linkType: hard - -"isobject@npm:^2.0.0": - version: 2.1.0 - resolution: "isobject@npm:2.1.0" - dependencies: - isarray: 1.0.0 - checksum: 811c6f5a866877d31f0606a88af4a45f282544de886bf29f6a34c46616a1ae2ed17076cc6bf34c0128f33eecf7e1fcaa2c82cf3770560d3e26810894e96ae79f - languageName: node - linkType: hard - -"isobject@npm:^3.0.0, isobject@npm:^3.0.1": - version: 3.0.1 - resolution: "isobject@npm:3.0.1" - checksum: db85c4c970ce30693676487cca0e61da2ca34e8d4967c2e1309143ff910c207133a969f9e4ddb2dc6aba670aabce4e0e307146c310350b298e74a31f7d464703 - languageName: node - linkType: hard - -"join-path@npm:^1.1.1": - version: 1.1.1 - resolution: "join-path@npm:1.1.1" - dependencies: - as-array: ^2.0.0 - url-join: 0.0.1 - valid-url: ^1 - checksum: 3d16e9fcddb9875713dd9b5a143c0afc6c367169bf81175112c3acfc76d7f83e637eb67f14e7332429b10715c483e3ad6d438e8a70ce1d79047d0fb1ae8745f1 - languageName: node - linkType: hard - -"js-base64@npm:^2.1.9": - version: 2.6.4 - resolution: "js-base64@npm:2.6.4" - checksum: 5f4084078d6c46f8529741d110df84b14fac3276b903760c21fa8cc8521370d607325dfe1c1a9fbbeaae1ff8e602665aaeef1362427d8fef704f9e3659472ce8 - languageName: node - linkType: hard - -"js-stringify@npm:^1.0.1": - version: 1.0.2 - resolution: "js-stringify@npm:1.0.2" - checksum: f9701d9e535d3ac0f62bbf2624b76c5d0af5b889187232817ae284a41ba21fd7a8b464c2dce3815d8cf52c8bea3480be6b368cfc2c67da799cad458058e8bbf5 - languageName: node - linkType: hard - -"js-yaml@npm:^3.13.1, js-yaml@npm:^3.8.1": - version: 3.14.1 - resolution: "js-yaml@npm:3.14.1" - dependencies: - argparse: ^1.0.7 - esprima: ^4.0.0 - bin: - js-yaml: bin/js-yaml.js - checksum: bef146085f472d44dee30ec34e5cf36bf89164f5d585435a3d3da89e52622dff0b188a580e4ad091c3341889e14cb88cac6e4deb16dc5b1e9623bb0601fc255c - languageName: node - linkType: hard - -"json-parse-better-errors@npm:^1.0.1": - version: 1.0.2 - resolution: "json-parse-better-errors@npm:1.0.2" - checksum: ff2b5ba2a70e88fd97a3cb28c1840144c5ce8fae9cbeeddba15afa333a5c407cf0e42300cd0a2885dbb055227fe68d405070faad941beeffbfde9cf3b2c78c5d - languageName: node - linkType: hard - -"json-stable-stringify@npm:~0.0.0": - version: 0.0.1 - resolution: "json-stable-stringify@npm:0.0.1" - dependencies: - jsonify: ~0.0.0 - checksum: 3a148d4c32bf65c61ceba1a10ffe3e91b8f106135cc203ab464cfe7792e545426294beb60711406a4ef62c001c20c916efc600e44e3ce66d1927bb7f781f8201 - languageName: node - linkType: hard - -"jsonfile@npm:^2.1.0": - version: 2.4.0 - resolution: "jsonfile@npm:2.4.0" - dependencies: - graceful-fs: ^4.1.6 - dependenciesMeta: - graceful-fs: - optional: true - checksum: f5064aabbc9e35530dc471d8b203ae1f40dbe949ddde4391c6f6a6d310619a15f0efdae5587df594d1d70c555193aaeee9d2ed4aec9ffd5767bd5e4e62d49c3d - languageName: node - linkType: hard - -"jsonify@npm:~0.0.0": - version: 0.0.1 - resolution: "jsonify@npm:0.0.1" - checksum: 027287e1c0294fce15f18c0ff990cfc2318e7f01fb76515f784d5cd0784abfec6fc5c2355c3a2f2cb0ad7f4aa2f5b74ebbfe4e80476c35b2d13cabdb572e1134 - languageName: node - linkType: hard - -"jsonparse@npm:^1.2.0": - version: 1.3.1 - resolution: "jsonparse@npm:1.3.1" - checksum: 6514a7be4674ebf407afca0eda3ba284b69b07f9958a8d3113ef1005f7ec610860c312be067e450c569aab8b89635e332cee3696789c750692bb60daba627f4d - languageName: node - linkType: hard - -"jstransformer-handlebars@npm:^1.1.0": - version: 1.2.0 - resolution: "jstransformer-handlebars@npm:1.2.0" - dependencies: - handlebars: ^4.7.7 - checksum: 40121f566d57180940217ca170f1dd719306762f0a19eb2469d14d853c05e71542ac4944ec12707cd5e54aea0185c4c718d2d4b397dd54a9707cfa3694532fa2 - languageName: node - linkType: hard - -"jstransformer@npm:1.0.0": - version: 1.0.0 - resolution: "jstransformer@npm:1.0.0" - dependencies: - is-promise: ^2.0.0 - promise: ^7.0.1 - checksum: 1e019fde17a38766a5b96bccf0738156badc60cfa61e2ba8a8bbd3b855e7d5d7e17492b8a66e4aaabc39483e335d23217343ae32d0f7e5a81af42a95c3e075f9 - languageName: node - linkType: hard - -"kind-of@npm:^3.0.2, kind-of@npm:^3.0.3, kind-of@npm:^3.2.0": - version: 3.2.2 - resolution: "kind-of@npm:3.2.2" - dependencies: - is-buffer: ^1.1.5 - checksum: e898df8ca2f31038f27d24f0b8080da7be274f986bc6ed176f37c77c454d76627619e1681f6f9d2e8d2fd7557a18ecc419a6bb54e422abcbb8da8f1a75e4b386 - languageName: node - linkType: hard - -"kind-of@npm:^4.0.0": - version: 4.0.0 - resolution: "kind-of@npm:4.0.0" - dependencies: - is-buffer: ^1.1.5 - checksum: 1b9e7624a8771b5a2489026e820f3bbbcc67893e1345804a56b23a91e9069965854d2a223a7c6ee563c45be9d8c6ff1ef87f28ed5f0d1a8d00d9dcbb067c529f - languageName: node - linkType: hard - -"kind-of@npm:^5.0.0": - version: 5.1.0 - resolution: "kind-of@npm:5.1.0" - checksum: f2a0102ae0cf19c4a953397e552571bad2b588b53282874f25fca7236396e650e2db50d41f9f516bd402536e4df968dbb51b8e69e4d5d4a7173def78448f7bab - languageName: node - linkType: hard - -"kind-of@npm:^6.0.0, kind-of@npm:^6.0.2": - version: 6.0.3 - resolution: "kind-of@npm:6.0.3" - checksum: 3ab01e7b1d440b22fe4c31f23d8d38b4d9b91d9f291df683476576493d5dfd2e03848a8b05813dd0c3f0e835bc63f433007ddeceb71f05cb25c45ae1b19c6d3b - languageName: node - linkType: hard - -"klaw@npm:^1.0.0": - version: 1.3.1 - resolution: "klaw@npm:1.3.1" - dependencies: - graceful-fs: ^4.1.9 - dependenciesMeta: - graceful-fs: - optional: true - checksum: 8f69e4797c26e7c3f2426bfa85f38a3da3c2cb1b4c6bd850d2377aed440d41ce9d806f2885c2e2e224372c56af4b1d43b8a499adecf9a05e7373dc6b8b7c52e4 - languageName: node - linkType: hard - -"labeled-stream-splicer@npm:^2.0.0": - version: 2.0.2 - resolution: "labeled-stream-splicer@npm:2.0.2" - dependencies: - inherits: ^2.0.1 - stream-splicer: ^2.0.0 - checksum: 4f7097b7666cd6d110f2a700f2905f703aa2a6d21c76fb390fcf441f436b269f5b1ad813178af4406cf6ddf01f3ac24435b3ff8fe2d9678664c147bf92f056b3 - languageName: node - linkType: hard - -"latest-version@npm:^3.0.0": - version: 3.1.0 - resolution: "latest-version@npm:3.1.0" - dependencies: - package-json: ^4.0.0 - checksum: 1923b097b5e674727416de873abf9a671c28edb4181e435c74701c6124af942d2c83a7698bb66c6c7ce1eaae945c99beae2ef787c8409512b80a734686e977f7 - languageName: node - linkType: hard - -"lazy-cache@npm:^1.0.3": - version: 1.0.4 - resolution: "lazy-cache@npm:1.0.4" - checksum: e6650c22e5de1cc3f4a0c25d2b35fe9cd400473c1b3562be9fceadf8f368d708b54d24f5aa51b321b090da65b36426823a8f706b8dbdd68270db0daba812c5d3 - languageName: node - linkType: hard - -"lcid@npm:^1.0.0": - version: 1.0.0 - resolution: "lcid@npm:1.0.0" - dependencies: - invert-kv: ^1.0.0 - checksum: e8c7a4db07663068c5c44b650938a2bc41aa992037eebb69376214320f202c1250e70b50c32f939e28345fd30c2d35b8e8cd9a19d5932c398246a864ce54843d - languageName: node - linkType: hard - -"linkify-it@npm:^2.0.0": - version: 2.2.0 - resolution: "linkify-it@npm:2.2.0" - dependencies: - uc.micro: ^1.0.1 - checksum: d198871d0b3f3cfdb745dae564bfd6743474f20cd0ef1057e6ca29451834749e7f3da52b59b4de44e98f31a1e5c71bdad160490d4ae54de251cbcde57e4d7837 - languageName: node - linkType: hard - -"livereload-js@npm:^2.3.0": - version: 2.4.0 - resolution: "livereload-js@npm:2.4.0" - checksum: da6bcd195f45c8ae1b6a2ef79a60ce08a5d8dd34cb38e9e00a3f5c86611eb4eb7ff52ea9fd16b5b978b384573c2d602f526e7769d06560be8f9182604a6b681e - languageName: node - linkType: hard - -"load-json-file@npm:^4.0.0": - version: 4.0.0 - resolution: "load-json-file@npm:4.0.0" - dependencies: - graceful-fs: ^4.1.2 - parse-json: ^4.0.0 - pify: ^3.0.0 - strip-bom: ^3.0.0 - checksum: 8f5d6d93ba64a9620445ee9bde4d98b1eac32cf6c8c2d20d44abfa41a6945e7969456ab5f1ca2fb06ee32e206c9769a20eec7002fe290de462e8c884b6b8b356 - languageName: node - linkType: hard - -"locate-path@npm:^2.0.0": - version: 2.0.0 - resolution: "locate-path@npm:2.0.0" - dependencies: - p-locate: ^2.0.0 - path-exists: ^3.0.0 - checksum: 02d581edbbbb0fa292e28d96b7de36b5b62c2fa8b5a7e82638ebb33afa74284acf022d3b1e9ae10e3ffb7658fbc49163fcd5e76e7d1baaa7801c3e05a81da755 - languageName: node - linkType: hard - -"locate-path@npm:^5.0.0": - version: 5.0.0 - resolution: "locate-path@npm:5.0.0" - dependencies: - p-locate: ^4.1.0 - checksum: 83e51725e67517287d73e1ded92b28602e3ae5580b301fe54bfb76c0c723e3f285b19252e375712316774cf52006cb236aed5704692c32db0d5d089b69696e30 - languageName: node - linkType: hard - -"lodash._isnative@npm:~2.4.1": - version: 2.4.1 - resolution: "lodash._isnative@npm:2.4.1" - checksum: 3cbd4ac55bc90805b73249ec75f683ba9faba5b3a767a4e68bb428cf1709dc984f700964ca6eee85bf074357081efad4505bd0ea93017a7f136d9ea51a69243f - languageName: node - linkType: hard - -"lodash._objecttypes@npm:~2.4.1": - version: 2.4.1 - resolution: "lodash._objecttypes@npm:2.4.1" - checksum: 39f86de17306c60e94b8b6791a612e4f1bbbd26a3306176edb9890d75a80c180a4dda39259ae97816da6429b3871aef7fea849ad248f57c5484a772c4e85ad44 - languageName: node - linkType: hard - -"lodash._shimkeys@npm:~2.4.1": - version: 2.4.1 - resolution: "lodash._shimkeys@npm:2.4.1" - dependencies: - lodash._objecttypes: ~2.4.1 - checksum: 726e4cadcb68feb5b777b158cac64bc50a9bda392b9b6d3a0cd0b63600d72840dcb98e39d45a31f32427c61626c44d2b5e40e5613af8865a900fa460feb72e88 - languageName: node - linkType: hard - -"lodash.assignin@npm:^4.0.9": - version: 4.2.0 - resolution: "lodash.assignin@npm:4.2.0" - checksum: 4b55bc1d65ccd7648fdba8a4316d10546929bf0beb5950830d86c559948cf170f0e65b77c95e66b45b511b85a31161714de8b2008d2537627ef3c7759afe36a6 - languageName: node - linkType: hard - -"lodash.bind@npm:^4.1.4": - version: 4.2.1 - resolution: "lodash.bind@npm:4.2.1" - checksum: cf0e41de2fca7704fc0adadc00f7fc871f8cf428990972f072136e4cd153c4d42d88c1418218121380914021c5547be05e4252e61f6280c736a2195cc8b6f4e5 - languageName: node - linkType: hard - -"lodash.defaults@npm:^4.0.1": - version: 4.2.0 - resolution: "lodash.defaults@npm:4.2.0" - checksum: 84923258235592c8886e29de5491946ff8c2ae5c82a7ac5cddd2e3cb697e6fbdfbbb6efcca015795c86eec2bb953a5a2ee4016e3735a3f02720428a40efbb8f1 - languageName: node - linkType: hard - -"lodash.filter@npm:^4.4.0": - version: 4.6.0 - resolution: "lodash.filter@npm:4.6.0" - checksum: f21d245d24818e15b560cb6cadc8404a1bf98bd87d037e5e51858aad57ca2b9db64d87e450a23c8f72dd2c66968efd09b034055ce86d93eef4a4eb6f1bbaf100 - languageName: node - linkType: hard - -"lodash.flatten@npm:^4.2.0": - version: 4.4.0 - resolution: "lodash.flatten@npm:4.4.0" - checksum: 0ac34a393d4b795d4b7421153d27c13ae67e08786c9cbb60ff5b732210d46f833598eee3fb3844bb10070e8488efe390ea53bb567377e0cb47e9e630bf0811cb - languageName: node - linkType: hard - -"lodash.foreach@npm:^4.3.0": - version: 4.5.0 - resolution: "lodash.foreach@npm:4.5.0" - checksum: a940386b158ca0d62994db41fc16529eb8ae67138f29ced38e91f912cb5435d1b0ed34b18e6f7b9ddfc32ab676afc6dfec60d1e22633d8e3e4b33413402ab4ad - languageName: node - linkType: hard - -"lodash.isarguments@npm:2.4.x": - version: 2.4.1 - resolution: "lodash.isarguments@npm:2.4.1" - checksum: 1c07cbfb56ce1e508061eeda46986fd82b47e3668650c3b0c20e3ed9f3902124e1cb105a029873a386475f9d8309d48a090e0dbb080522107f49c052599d52d8 - languageName: node - linkType: hard - -"lodash.isarguments@npm:^3.0.0": - version: 3.1.0 - resolution: "lodash.isarguments@npm:3.1.0" - checksum: ae1526f3eb5c61c77944b101b1f655f846ecbedcb9e6b073526eba6890dc0f13f09f72e11ffbf6540b602caee319af9ac363d6cdd6be41f4ee453436f04f13b5 - languageName: node - linkType: hard - -"lodash.isobject@npm:^2.4.1, lodash.isobject@npm:~2.4.1": - version: 2.4.1 - resolution: "lodash.isobject@npm:2.4.1" - dependencies: - lodash._objecttypes: ~2.4.1 - checksum: a8b1f4fb30c3b0ab60d9ee671492682bfa6b467d19f5d24b0c23711cd59fc2bacc5fa57f253fe9067264afe493a2f0adfbb6e28f8bf6fd5204b3d01a7979857f - languageName: node - linkType: hard - -"lodash.isobject@npm:^3.0.0": - version: 3.0.2 - resolution: "lodash.isobject@npm:3.0.2" - checksum: 6c1667cbc4494d0a13a3617a4b23278d6d02dac520311f2bbb43f16f2cf71d2e6eb9dec8057315b77459df4890c756a256a087d3f4baa44a79ab5d6c968b060e - languageName: node - linkType: hard - -"lodash.keys@npm:~2.4.1": - version: 2.4.1 - resolution: "lodash.keys@npm:2.4.1" - dependencies: - lodash._isnative: ~2.4.1 - lodash._shimkeys: ~2.4.1 - lodash.isobject: ~2.4.1 - checksum: a004075caaf23dd83a2108027c1c8e4ff5f040d11e868d5283cb0cbb6b34087571747b88bfbf959a7cc82e75ac0f5a9872cd5beb764b079dbc98fef2e504e60f - languageName: node - linkType: hard - -"lodash.map@npm:^4.4.0": - version: 4.6.0 - resolution: "lodash.map@npm:4.6.0" - checksum: 7369a41d7d24d15ce3bbd02a7faa3a90f6266c38184e64932571b9b21b758bd10c04ffd117d1859be1a44156f29b94df5045eff172bf8a97fddf68bf1002d12f - languageName: node - linkType: hard - -"lodash.memoize@npm:~3.0.3": - version: 3.0.4 - resolution: "lodash.memoize@npm:3.0.4" - checksum: fc52e0916b896fa79d6b85fbeaa0e44a381b70f1fcab7acab10188aaeeb2107e21b9b992bff560f405696e0a6e3bb5c08af18955d628a1e8ab6b11df14ff6172 - languageName: node - linkType: hard - -"lodash.merge@npm:^4.4.0": - version: 4.6.2 - resolution: "lodash.merge@npm:4.6.2" - checksum: ad580b4bdbb7ca1f7abf7e1bce63a9a0b98e370cf40194b03380a46b4ed799c9573029599caebc1b14e3f24b111aef72b96674a56cfa105e0f5ac70546cdc005 - languageName: node - linkType: hard - -"lodash.pick@npm:^4.2.1": - version: 4.4.0 - resolution: "lodash.pick@npm:4.4.0" - checksum: 2c36cab7da6b999a20bd3373b40e31a3ef81fa264f34a6979c852c5bc8ac039379686b27380f0cb8e3781610844fafec6949c6fbbebc059c98f8fa8570e3675f - languageName: node - linkType: hard - -"lodash.reduce@npm:^4.4.0": - version: 4.6.0 - resolution: "lodash.reduce@npm:4.6.0" - checksum: 81f2a1045440554f8427f895ef479f1de5c141edd7852dde85a894879312801efae0295116e5cf830c531c1a51cdab8f3628c3ad39fa21a9874bb9158d9ea075 - languageName: node - linkType: hard - -"lodash.reject@npm:^4.4.0": - version: 4.6.0 - resolution: "lodash.reject@npm:4.6.0" - checksum: 730acc78d29ab0a60e0f3cd87bbfe9071625a835791ef66daac7a405c43ec21209fd795fdf9b7485aecead4869f645801bd65c27b9acadce80dee26393793111 - languageName: node - linkType: hard - -"lodash.some@npm:^4.4.0": - version: 4.6.0 - resolution: "lodash.some@npm:4.6.0" - checksum: 4469e76a389446d1166a29f844fb21398c36060d00258ce799710e046c55ed3c1af150c31b4856504e252bc813ba3fdcb6f255c490d9846738dd363a44665322 - languageName: node - linkType: hard - -"lodash.values@npm:^2.4.1": - version: 2.4.1 - resolution: "lodash.values@npm:2.4.1" - dependencies: - lodash.keys: ~2.4.1 - checksum: a95859d99cf810cf5fadb56558c41bcfa5418ae2b5512f5688ff081e335555fd47dcf7d1ef7a6dd56e9165520b035402a6ac1f6cffc758cd9bfed7ca8716a1aa - languageName: node - linkType: hard - -"lodash@npm:^3.10.1": - version: 3.10.1 - resolution: "lodash@npm:3.10.1" - checksum: 53065d3712a2fd90b55690c5af19f9625a5bbb2b7876ff76d782ee1dc22618fd4dff191d44a8e165a17b5b81a851c3e884d3b5b25e314422fbe24bb299542685 - languageName: node - linkType: hard - -"lodash@npm:^4.17.10, lodash@npm:^4.17.15, lodash@npm:^4.17.4, lodash@npm:^4.17.5": - version: 4.17.21 - resolution: "lodash@npm:4.17.21" - checksum: eb835a2e51d381e561e508ce932ea50a8e5a68f4ebdd771ea240d3048244a8d13658acbd502cd4829768c56f2e16bdd4340b9ea141297d472517b83868e677f7 - languageName: node - linkType: hard - -"longest@npm:^1.0.1": - version: 1.0.1 - resolution: "longest@npm:1.0.1" - checksum: 21717f95670675b8fec7ce78d255af664fc28273e8ac7d6893bce6063f63efa107634daa186d142172904053e0e39034b21e61a6c52538d3d37f715bf149c47f - languageName: node - linkType: hard - -"loud-rejection@npm:^1.0.0": - version: 1.6.0 - resolution: "loud-rejection@npm:1.6.0" - dependencies: - currently-unhandled: ^0.4.1 - signal-exit: ^3.0.0 - checksum: 750e12defde34e8cbf263c2bff16f028a89b56e022ad6b368aa7c39495b5ac33f2349a8d00665a9b6d25c030b376396524d8a31eb0dde98aaa97956d7324f927 - languageName: node - linkType: hard - -"lowercase-keys@npm:^1.0.0": - version: 1.0.1 - resolution: "lowercase-keys@npm:1.0.1" - checksum: 4d045026595936e09953e3867722e309415ff2c80d7701d067546d75ef698dac218a4f53c6d1d0e7368b47e45fd7529df47e6cb56fbb90523ba599f898b3d147 - languageName: node - linkType: hard - -"lru-cache@npm:^4.0.1, lru-cache@npm:^4.1.3": - version: 4.1.5 - resolution: "lru-cache@npm:4.1.5" - dependencies: - pseudomap: ^1.0.2 - yallist: ^2.1.2 - checksum: 4bb4b58a36cd7dc4dcec74cbe6a8f766a38b7426f1ff59d4cf7d82a2aa9b9565cd1cb98f6ff60ce5cd174524868d7bc9b7b1c294371851356066ca9ac4cf135a - languageName: node - linkType: hard - -"lru-cache@npm:^6.0.0": - version: 6.0.0 - resolution: "lru-cache@npm:6.0.0" - dependencies: - yallist: ^4.0.0 - checksum: f97f499f898f23e4585742138a22f22526254fdba6d75d41a1c2526b3b6cc5747ef59c5612ba7375f42aca4f8461950e925ba08c991ead0651b4918b7c978297 - languageName: node - linkType: hard - -"lru-cache@npm:^7.7.1": - version: 7.16.1 - resolution: "lru-cache@npm:7.16.1" - checksum: 64618e3ed4fd1203afedd9bbf5247921b1419f8e3100f20e58e5f04e741f8287bd7d04fefaad332411bb53b3a73445714b235de750cf5d310cba1fa23bd82795 - languageName: node - linkType: hard - -"make-dir@npm:^1.0.0": - version: 1.3.0 - resolution: "make-dir@npm:1.3.0" - dependencies: - pify: ^3.0.0 - checksum: c564f6e7bb5ace1c02ad56b3a5f5e07d074af0c0b693c55c7b2c2b148882827c8c2afc7b57e43338a9f90c125b58d604e8cf3e6990a48bf949dfea8c79668c0b - languageName: node - linkType: hard - -"make-fetch-happen@npm:^10.0.3": - version: 10.2.1 - resolution: "make-fetch-happen@npm:10.2.1" - dependencies: - agentkeepalive: ^4.2.1 - cacache: ^16.1.0 - http-cache-semantics: ^4.1.0 - http-proxy-agent: ^5.0.0 - https-proxy-agent: ^5.0.0 - is-lambda: ^1.0.1 - lru-cache: ^7.7.1 - minipass: ^3.1.6 - minipass-collect: ^1.0.2 - minipass-fetch: ^2.0.3 - minipass-flush: ^1.0.5 - minipass-pipeline: ^1.2.4 - negotiator: ^0.6.3 - promise-retry: ^2.0.1 - socks-proxy-agent: ^7.0.0 - ssri: ^9.0.0 - checksum: 2332eb9a8ec96f1ffeeea56ccefabcb4193693597b132cd110734d50f2928842e22b84cfa1508e921b8385cdfd06dda9ad68645fed62b50fff629a580f5fb72c - languageName: node - linkType: hard - -"map-cache@npm:^0.2.2": - version: 0.2.2 - resolution: "map-cache@npm:0.2.2" - checksum: 3067cea54285c43848bb4539f978a15dedc63c03022abeec6ef05c8cb6829f920f13b94bcaf04142fc6a088318e564c4785704072910d120d55dbc2e0c421969 - languageName: node - linkType: hard - -"map-obj@npm:^1.0.0": - version: 1.0.1 - resolution: "map-obj@npm:1.0.1" - checksum: 9949e7baec2a336e63b8d4dc71018c117c3ce6e39d2451ccbfd3b8350c547c4f6af331a4cbe1c83193d7c6b786082b6256bde843db90cb7da2a21e8fcc28afed - languageName: node - linkType: hard - -"map-obj@npm:^2.0.0": - version: 2.0.0 - resolution: "map-obj@npm:2.0.0" - checksum: 77d2b7b03398a71c84bd7df8ab7be2139e5459fc1e18dbb5f15055fe7284bec0fc37fe410185b5f8ca2e3c3e01fd0fd1f946c579607878adb26cad1cd75314aa - languageName: node - linkType: hard - -"map-visit@npm:^1.0.0": - version: 1.0.0 - resolution: "map-visit@npm:1.0.0" - dependencies: - object-visit: ^1.0.0 - checksum: c27045a5021c344fc19b9132eb30313e441863b2951029f8f8b66f79d3d8c1e7e5091578075a996f74e417479506fe9ede28c44ca7bc351a61c9d8073daec36a - languageName: node - linkType: hard - -"markdown-it-code-include@file:./markdown-it-code-include::locator=tibi-docs%40workspace%3A.": - version: 0.0.0 - resolution: "markdown-it-code-include@file:./markdown-it-code-include#./markdown-it-code-include::hash=8d8a72&locator=tibi-docs%40workspace%3A." - dependencies: - node-html-parser: ^1.3.1 - checksum: 3e79581a4d1ec0b796b6c3ae5a83f8a197daba7440c5bb5c6447b80f5cc04943e8eef5549af5408958c13e62bfe4fb5632c758da74668f90dc21bb22396d7813 - languageName: node - linkType: hard - -"markdown-it-decorate@npm:1.2.2": - version: 1.2.2 - resolution: "markdown-it-decorate@npm:1.2.2" - checksum: dd3b241c2e702b3e707d19451a6a17732d51e46df5491e233eda853acdec76ad787c13f7f2f4623c2f9062709bb020df37b73549e48a3946d4230f90b1782e69 - languageName: node - linkType: hard - -"markdown-it@npm:^10.0.0": - version: 10.0.0 - resolution: "markdown-it@npm:10.0.0" - dependencies: - argparse: ^1.0.7 - entities: ~2.0.0 - linkify-it: ^2.0.0 - mdurl: ^1.0.1 - uc.micro: ^1.0.5 - bin: - markdown-it: bin/markdown-it.js - checksum: 69f5ee640cbebb451b80d3cce308fff7230767e05c0f8c206a1e413775b7a6e5a08e91e9f3ec59f9b5c5a45493f9ce7ac089379cffb60c9d3e6677ed9d535086 - languageName: node - linkType: hard - -"marked@npm:^0.7.0": - version: 0.7.0 - resolution: "marked@npm:0.7.0" - bin: - marked: ./bin/marked - checksum: 5965e990ee0497aceae1b63c479ad614773331e255c7c9feb00120813574370d03e104d062f3c52ca4d96e7c4ff726ad8ca7ef2debe53728fb73975677b6878e - languageName: node - linkType: hard - -"md5.js@npm:^1.3.4": - version: 1.3.5 - resolution: "md5.js@npm:1.3.5" - dependencies: - hash-base: ^3.0.0 - inherits: ^2.0.1 - safe-buffer: ^5.1.2 - checksum: 098494d885684bcc4f92294b18ba61b7bd353c23147fbc4688c75b45cb8590f5a95fd4584d742415dcc52487f7a1ef6ea611cfa1543b0dc4492fe026357f3f0c - languageName: node - linkType: hard - -"mdurl@npm:^1.0.1": - version: 1.0.1 - resolution: "mdurl@npm:1.0.1" - checksum: 71731ecba943926bfbf9f9b51e28b5945f9411c4eda80894221b47cc105afa43ba2da820732b436f0798fd3edbbffcd1fc1415843c41a87fea08a41cc1e3d02b - languageName: node - linkType: hard - -"meow@npm:^5.0.0": - version: 5.0.0 - resolution: "meow@npm:5.0.0" - dependencies: - camelcase-keys: ^4.0.0 - decamelize-keys: ^1.0.0 - loud-rejection: ^1.0.0 - minimist-options: ^3.0.1 - normalize-package-data: ^2.3.4 - read-pkg-up: ^3.0.0 - redent: ^2.0.0 - trim-newlines: ^2.0.0 - yargs-parser: ^10.0.0 - checksum: c00b6cdde2b1c1d8679eb0de46a51ed4eb1ee2c8785454d7383d09ddde1076e6928f17ef0d9111e28585d4d59cc15b4ba85668e274211b502f14bd1cf659fc46 - languageName: node - linkType: hard - -"metalsmith-start@github:rstacruz/metalsmith-start#e88a7cdbb20aac1db176c121b429008073d8e9eb": - version: 2.0.1 - resolution: "metalsmith-start@https://github.com/rstacruz/metalsmith-start.git#commit=e88a7cdbb20aac1db176c121b429008073d8e9eb" - dependencies: - chalk: ^2.4.1 - chokidar: ^2.0.4 - co: 4.6.0 - connect: ^3.6.6 - connect-livereload: ^0.6.0 - debounce-collect: 1.0.2 - get-port: ^4.0.0 - gnode: 0.1.2 - jstransformer-handlebars: ^1.1.0 - meow: ^5.0.0 - metalsmith: ^2.3.0 - mz: ^2.7.0 - object-assign: ^4.1.1 - observatory: 1.0.0 - superstatic: ^6.0.3 - throat: ^4.1.0 - thunkify: 2.1.2 - tiny-lr: ^1.1.1 - bin: - metalsmith-start: bin/metalsmith-start - metalstart: bin/metalsmith-start - checksum: 9ebbfbd7d44b4a68e01eaa250843017696095a9c01cc0c2ff188e74781a7615140b7017c2e19dff3b92b8b05c8c974e673a2a4da1a64fc0570c323d077446d29 - languageName: node - linkType: hard - -"metalsmith@npm:2.3.0": - version: 2.3.0 - resolution: "metalsmith@npm:2.3.0" - dependencies: - absolute: 0.0.1 - chalk: ^1.1.3 - clone: ^1.0.2 - co-fs-extra: ^1.2.1 - commander: ^2.6.0 - gray-matter: ^2.0.0 - has-generators: ^1.0.1 - is: ^3.1.0 - is-utf8: ~0.2.0 - recursive-readdir: ^2.1.0 - rimraf: ^2.2.8 - stat-mode: ^0.2.0 - thunkify: ^2.1.2 - unyield: 0.0.1 - ware: ^1.2.0 - win-fork: ^1.1.1 - bin: - _metalsmith: bin/_metalsmith - metalsmith: bin/metalsmith - checksum: 845474a770d533cc86a75bcf43158530dfb8249ed730cf90daef78a4bc0ed5f6f13dbacf0d2bd3ac7f46181e9c341aac0ff71186dde6a6cf3a4b8d8e61158634 - languageName: node - linkType: hard - -"metalsmith@npm:^2.3.0": - version: 2.5.1 - resolution: "metalsmith@npm:2.5.1" - dependencies: - commander: ^6.2.1 - cross-spawn: ^7.0.3 - debug: ^4.3.4 - gray-matter: ^4.0.3 - is-utf8: ~0.2.0 - micromatch: ^4.0.5 - rimraf: ^3.0.2 - stat-mode: ^1.0.0 - ware: ^1.3.0 - bin: - _metalsmith: bin/_metalsmith - metalsmith: bin/metalsmith - checksum: af6dd8efe30580662e46821e8812d25c62de2c2a86f333c031036fa66d1c1c4d907c785eb7bf61bb637f167dbdd5eae0707b4cd5e5be57a72ef147f58ab667dd - languageName: node - linkType: hard - -"methods@npm:~1.1.2": - version: 1.1.2 - resolution: "methods@npm:1.1.2" - checksum: 0917ff4041fa8e2f2fda5425a955fe16ca411591fbd123c0d722fcf02b73971ed6f764d85f0a6f547ce49ee0221ce2c19a5fa692157931cecb422984f1dcd13a - languageName: node - linkType: hard - -"micromatch@npm:^3.1.10, micromatch@npm:^3.1.4": - version: 3.1.10 - resolution: "micromatch@npm:3.1.10" - dependencies: - arr-diff: ^4.0.0 - array-unique: ^0.3.2 - braces: ^2.3.1 - define-property: ^2.0.2 - extend-shallow: ^3.0.2 - extglob: ^2.0.4 - fragment-cache: ^0.2.1 - kind-of: ^6.0.2 - nanomatch: ^1.2.9 - object.pick: ^1.3.0 - regex-not: ^1.0.0 - snapdragon: ^0.8.1 - to-regex: ^3.0.2 - checksum: ad226cba4daa95b4eaf47b2ca331c8d2e038d7b41ae7ed0697cde27f3f1d6142881ab03d4da51b65d9d315eceb5e4cdddb3fbb55f5f72cfa19cf3ea469d054dc - languageName: node - linkType: hard - -"micromatch@npm:^4.0.5": - version: 4.0.5 - resolution: "micromatch@npm:4.0.5" - dependencies: - braces: ^3.0.2 - picomatch: ^2.3.1 - checksum: 02a17b671c06e8fefeeb6ef996119c1e597c942e632a21ef589154f23898c9c6a9858526246abb14f8bca6e77734aa9dcf65476fca47cedfb80d9577d52843fc - languageName: node - linkType: hard - -"miller-rabin@npm:^4.0.0": - version: 4.0.1 - resolution: "miller-rabin@npm:4.0.1" - dependencies: - bn.js: ^4.0.0 - brorand: ^1.0.1 - bin: - miller-rabin: bin/miller-rabin - checksum: 00cd1ab838ac49b03f236cc32a14d29d7d28637a53096bf5c6246a032a37749c9bd9ce7360cbf55b41b89b7d649824949ff12bc8eee29ac77c6b38eada619ece - languageName: node - linkType: hard - -"mime-db@npm:1.52.0, mime-db@npm:>= 1.43.0 < 2": - version: 1.52.0 - resolution: "mime-db@npm:1.52.0" - checksum: 0d99a03585f8b39d68182803b12ac601d9c01abfa28ec56204fa330bc9f3d1c5e14beb049bafadb3dbdf646dfb94b87e24d4ec7b31b7279ef906a8ea9b6a513f - languageName: node - linkType: hard - -"mime-types@npm:^2.1.16, mime-types@npm:~2.1.34": - version: 2.1.35 - resolution: "mime-types@npm:2.1.35" - dependencies: - mime-db: 1.52.0 - checksum: 89a5b7f1def9f3af5dad6496c5ed50191ae4331cc5389d7c521c8ad28d5fdad2d06fd81baf38fed813dc4e46bb55c8145bb0ff406330818c9cf712fb2e9b3836 - languageName: node - linkType: hard - -"minimalistic-assert@npm:^1.0.0, minimalistic-assert@npm:^1.0.1": - version: 1.0.1 - resolution: "minimalistic-assert@npm:1.0.1" - checksum: cc7974a9268fbf130fb055aff76700d7e2d8be5f761fb5c60318d0ed010d839ab3661a533ad29a5d37653133385204c503bfac995aaa4236f4e847461ea32ba7 - languageName: node - linkType: hard - -"minimalistic-crypto-utils@npm:^1.0.1": - version: 1.0.1 - resolution: "minimalistic-crypto-utils@npm:1.0.1" - checksum: 6e8a0422b30039406efd4c440829ea8f988845db02a3299f372fceba56ffa94994a9c0f2fd70c17f9969eedfbd72f34b5070ead9656a34d3f71c0bd72583a0ed - languageName: node - linkType: hard - -"minimatch@npm:2 || 3, minimatch@npm:^3.0.2, minimatch@npm:^3.0.4, minimatch@npm:^3.0.5, minimatch@npm:^3.1.1": - version: 3.1.2 - resolution: "minimatch@npm:3.1.2" - dependencies: - brace-expansion: ^1.1.7 - checksum: c154e566406683e7bcb746e000b84d74465b3a832c45d59912b9b55cd50dee66e5c4b1e5566dba26154040e51672f9aa450a9aef0c97cfc7336b78b7afb9540a - languageName: node - linkType: hard - -"minimatch@npm:^5.0.1": - version: 5.1.6 - resolution: "minimatch@npm:5.1.6" - dependencies: - brace-expansion: ^2.0.1 - checksum: 7564208ef81d7065a370f788d337cd80a689e981042cb9a1d0e6580b6c6a8c9279eba80010516e258835a988363f99f54a6f711a315089b8b42694f5da9d0d77 - languageName: node - linkType: hard - -"minimist-options@npm:^3.0.1": - version: 3.0.2 - resolution: "minimist-options@npm:3.0.2" - dependencies: - arrify: ^1.0.1 - is-plain-obj: ^1.1.0 - checksum: f111ff4a3371312f3827bc5a519d757bd5bd8406599193b6cd32b8137eeaee74dd8f1896b66778ac26069ecbaee0659dd0ca4b65c6ec9d0683b09a9573e4f389 - languageName: node - linkType: hard - -"minimist@npm:^1.1.0, minimist@npm:^1.2.0, minimist@npm:^1.2.5, minimist@npm:^1.2.6": - version: 1.2.8 - resolution: "minimist@npm:1.2.8" - checksum: 75a6d645fb122dad29c06a7597bddea977258957ed88d7a6df59b5cd3fe4a527e253e9bbf2e783e4b73657f9098b96a5fe96ab8a113655d4109108577ecf85b0 - languageName: node - linkType: hard - -"minipass-collect@npm:^1.0.2": - version: 1.0.2 - resolution: "minipass-collect@npm:1.0.2" - dependencies: - minipass: ^3.0.0 - checksum: 14df761028f3e47293aee72888f2657695ec66bd7d09cae7ad558da30415fdc4752bbfee66287dcc6fd5e6a2fa3466d6c484dc1cbd986525d9393b9523d97f10 - languageName: node - linkType: hard - -"minipass-fetch@npm:^2.0.3": - version: 2.1.2 - resolution: "minipass-fetch@npm:2.1.2" - dependencies: - encoding: ^0.1.13 - minipass: ^3.1.6 - minipass-sized: ^1.0.3 - minizlib: ^2.1.2 - dependenciesMeta: - encoding: - optional: true - checksum: 3f216be79164e915fc91210cea1850e488793c740534985da017a4cbc7a5ff50506956d0f73bb0cb60e4fe91be08b6b61ef35101706d3ef5da2c8709b5f08f91 - languageName: node - linkType: hard - -"minipass-flush@npm:^1.0.5": - version: 1.0.5 - resolution: "minipass-flush@npm:1.0.5" - dependencies: - minipass: ^3.0.0 - checksum: 56269a0b22bad756a08a94b1ffc36b7c9c5de0735a4dd1ab2b06c066d795cfd1f0ac44a0fcae13eece5589b908ecddc867f04c745c7009be0b566421ea0944cf - languageName: node - linkType: hard - -"minipass-pipeline@npm:^1.2.4": - version: 1.2.4 - resolution: "minipass-pipeline@npm:1.2.4" - dependencies: - minipass: ^3.0.0 - checksum: b14240dac0d29823c3d5911c286069e36d0b81173d7bdf07a7e4a91ecdef92cdff4baaf31ea3746f1c61e0957f652e641223970870e2353593f382112257971b - languageName: node - linkType: hard - -"minipass-sized@npm:^1.0.3": - version: 1.0.3 - resolution: "minipass-sized@npm:1.0.3" - dependencies: - minipass: ^3.0.0 - checksum: 79076749fcacf21b5d16dd596d32c3b6bf4d6e62abb43868fac21674078505c8b15eaca4e47ed844985a4514854f917d78f588fcd029693709417d8f98b2bd60 - languageName: node - linkType: hard - -"minipass@npm:^3.0.0, minipass@npm:^3.1.1, minipass@npm:^3.1.6": - version: 3.3.6 - resolution: "minipass@npm:3.3.6" - dependencies: - yallist: ^4.0.0 - checksum: a30d083c8054cee83cdcdc97f97e4641a3f58ae743970457b1489ce38ee1167b3aaf7d815cd39ec7a99b9c40397fd4f686e83750e73e652b21cb516f6d845e48 - languageName: node - linkType: hard - -"minipass@npm:^4.0.0": - version: 4.0.3 - resolution: "minipass@npm:4.0.3" - checksum: a09f405e2f380ae7f6ee0cbb53b45c1fcc1b6c70fc3896f4d20649d92a10e61892c57bd9960a64cedf6c90b50022cb6c195905b515039c335b423202f99e6f18 - languageName: node - linkType: hard - -"minizlib@npm:^2.1.1, minizlib@npm:^2.1.2": - version: 2.1.2 - resolution: "minizlib@npm:2.1.2" - dependencies: - minipass: ^3.0.0 - yallist: ^4.0.0 - checksum: f1fdeac0b07cf8f30fcf12f4b586795b97be856edea22b5e9072707be51fc95d41487faec3f265b42973a304fe3a64acd91a44a3826a963e37b37bafde0212c3 - languageName: node - linkType: hard - -"mixin-deep@npm:^1.2.0": - version: 1.3.2 - resolution: "mixin-deep@npm:1.3.2" - dependencies: - for-in: ^1.0.2 - is-extendable: ^1.0.1 - checksum: 820d5a51fcb7479f2926b97f2c3bb223546bc915e6b3a3eb5d906dda871bba569863595424a76682f2b15718252954644f3891437cb7e3f220949bed54b1750d - languageName: node - linkType: hard - -"mkdirp@npm:0.5.x, mkdirp@npm:^0.5.0": - version: 0.5.6 - resolution: "mkdirp@npm:0.5.6" - dependencies: - minimist: ^1.2.6 - bin: - mkdirp: bin/cmd.js - checksum: 0c91b721bb12c3f9af4b77ebf73604baf350e64d80df91754dc509491ae93bf238581e59c7188360cec7cb62fc4100959245a42cfe01834efedc5e9d068376c2 - languageName: node - linkType: hard - -"mkdirp@npm:^1.0.3, mkdirp@npm:^1.0.4": - version: 1.0.4 - resolution: "mkdirp@npm:1.0.4" - bin: - mkdirp: bin/cmd.js - checksum: a96865108c6c3b1b8e1d5e9f11843de1e077e57737602de1b82030815f311be11f96f09cce59bd5b903d0b29834733e5313f9301e3ed6d6f6fba2eae0df4298f - languageName: node - linkType: hard - -"module-deps@npm:^4.0.8": - version: 4.1.1 - resolution: "module-deps@npm:4.1.1" - dependencies: - JSONStream: ^1.0.3 - browser-resolve: ^1.7.0 - cached-path-relative: ^1.0.0 - concat-stream: ~1.5.0 - defined: ^1.0.0 - detective: ^4.0.0 - duplexer2: ^0.1.2 - inherits: ^2.0.1 - parents: ^1.0.0 - readable-stream: ^2.0.2 - resolve: ^1.1.3 - stream-combiner2: ^1.1.1 - subarg: ^1.0.0 - through2: ^2.0.0 - xtend: ^4.0.0 - bin: - module-deps: bin/cmd.js - checksum: 07b2c062fd6c6d4b7e0d58fc014f6be0a589f938cea89673928502ccb36ab8b15895d0c6cd81ce2aa9df7c159541665f48cff000500f7aa7a02547d73bc6d083 - languageName: node - linkType: hard - -"morgan@npm:^1.8.2": - version: 1.10.0 - resolution: "morgan@npm:1.10.0" - dependencies: - basic-auth: ~2.0.1 - debug: 2.6.9 - depd: ~2.0.0 - on-finished: ~2.3.0 - on-headers: ~1.0.2 - checksum: fb41e226ab5a1abf7e8909e486b387076534716d60207e361acfb5df78b84d703a7b7ea58f3046a9fd0b83d3c94bfabde32323341a1f1b26ce50680abd2ea5dd - languageName: node - linkType: hard - -"ms@npm:2.0.0": - version: 2.0.0 - resolution: "ms@npm:2.0.0" - checksum: 0e6a22b8b746d2e0b65a430519934fefd41b6db0682e3477c10f60c76e947c4c0ad06f63ffdf1d78d335f83edee8c0aa928aa66a36c7cd95b69b26f468d527f4 - languageName: node - linkType: hard - -"ms@npm:2.1.2": - version: 2.1.2 - resolution: "ms@npm:2.1.2" - checksum: 673cdb2c3133eb050c745908d8ce632ed2c02d85640e2edb3ace856a2266a813b30c613569bf3354fdf4ea7d1a1494add3bfa95e2713baa27d0c2c71fc44f58f - languageName: node - linkType: hard - -"ms@npm:^2.0.0, ms@npm:^2.1.1": - version: 2.1.3 - resolution: "ms@npm:2.1.3" - checksum: aa92de608021b242401676e35cfa5aa42dd70cbdc082b916da7fb925c542173e36bce97ea3e804923fe92c0ad991434e4a38327e15a1b5b5f945d66df615ae6d - languageName: node - linkType: hard - -"mz@npm:^2.7.0": - version: 2.7.0 - resolution: "mz@npm:2.7.0" - dependencies: - any-promise: ^1.0.0 - object-assign: ^4.0.1 - thenify-all: ^1.0.0 - checksum: 8427de0ece99a07e9faed3c0c6778820d7543e3776f9a84d22cf0ec0a8eb65f6e9aee9c9d353ff9a105ff62d33a9463c6ca638974cc652ee8140cd1e35951c87 - languageName: node - linkType: hard - -"nan@npm:^2.12.1": - version: 2.17.0 - resolution: "nan@npm:2.17.0" - dependencies: - node-gyp: latest - checksum: ec609aeaf7e68b76592a3ba96b372aa7f5df5b056c1e37410b0f1deefbab5a57a922061e2c5b369bae9c7c6b5e6eecf4ad2dac8833a1a7d3a751e0a7c7f849ed - languageName: node - linkType: hard - -"nanomatch@npm:^1.2.9": - version: 1.2.13 - resolution: "nanomatch@npm:1.2.13" - dependencies: - arr-diff: ^4.0.0 - array-unique: ^0.3.2 - define-property: ^2.0.2 - extend-shallow: ^3.0.2 - fragment-cache: ^0.2.1 - is-windows: ^1.0.2 - kind-of: ^6.0.2 - object.pick: ^1.3.0 - regex-not: ^1.0.0 - snapdragon: ^0.8.1 - to-regex: ^3.0.1 - checksum: 54d4166d6ef08db41252eb4e96d4109ebcb8029f0374f9db873bd91a1f896c32ec780d2a2ea65c0b2d7caf1f28d5e1ea33746a470f32146ac8bba821d80d38d8 - languageName: node - linkType: hard - -"nash@npm:^3.0.0": - version: 3.0.0 - resolution: "nash@npm:3.0.0" - dependencies: - async: ^1.3.0 - flat-arguments: ^1.0.0 - lodash: ^4.17.5 - minimist: ^1.1.0 - checksum: 16e754132f7d3919306455961759b17a092531cd1204d02aa5e7a8383b4576bd1b9b291779fe8fa01eea5ae0885cfb2e4567953122d992e617f75b154b354f96 - languageName: node - linkType: hard - -"negotiator@npm:0.6.3, negotiator@npm:^0.6.3": - version: 0.6.3 - resolution: "negotiator@npm:0.6.3" - checksum: b8ffeb1e262eff7968fc90a2b6767b04cfd9842582a9d0ece0af7049537266e7b2506dfb1d107a32f06dd849ab2aea834d5830f7f4d0e5cb7d36e1ae55d021d9 - languageName: node - linkType: hard - -"neo-async@npm:^2.6.0": - version: 2.6.2 - resolution: "neo-async@npm:2.6.2" - checksum: deac9f8d00eda7b2e5cd1b2549e26e10a0faa70adaa6fdadca701cc55f49ee9018e427f424bac0c790b7c7e2d3068db97f3093f1093975f2acb8f8818b936ed9 - languageName: node - linkType: hard - -"node-gyp@npm:latest": - version: 9.3.1 - resolution: "node-gyp@npm:9.3.1" - dependencies: - env-paths: ^2.2.0 - glob: ^7.1.4 - graceful-fs: ^4.2.6 - make-fetch-happen: ^10.0.3 - nopt: ^6.0.0 - npmlog: ^6.0.0 - rimraf: ^3.0.2 - semver: ^7.3.5 - tar: ^6.1.2 - which: ^2.0.2 - bin: - node-gyp: bin/node-gyp.js - checksum: b860e9976fa645ca0789c69e25387401b4396b93c8375489b5151a6c55cf2640a3b6183c212b38625ef7c508994930b72198338e3d09b9d7ade5acc4aaf51ea7 - languageName: node - linkType: hard - -"node-html-parser@npm:^1.3.1": - version: 1.4.9 - resolution: "node-html-parser@npm:1.4.9" - dependencies: - he: 1.2.0 - checksum: fbcf5ea22f266b36a4761d448d3db7bcee6d7570e3a8ec38cbde223fe3d705cda1df8c287907520ae2d6bac8f68ef4dacdb5fd76c375c13c50bc746e980f4a91 - languageName: node - linkType: hard - -"nopt@npm:^6.0.0": - version: 6.0.0 - resolution: "nopt@npm:6.0.0" - dependencies: - abbrev: ^1.0.0 - bin: - nopt: bin/nopt.js - checksum: 82149371f8be0c4b9ec2f863cc6509a7fd0fa729929c009f3a58e4eb0c9e4cae9920e8f1f8eb46e7d032fec8fb01bede7f0f41a67eb3553b7b8e14fa53de1dac - languageName: node - linkType: hard - -"normalize-package-data@npm:^2.3.2, normalize-package-data@npm:^2.3.4": - version: 2.5.0 - resolution: "normalize-package-data@npm:2.5.0" - dependencies: - hosted-git-info: ^2.1.4 - resolve: ^1.10.0 - semver: 2 || 3 || 4 || 5 - validate-npm-package-license: ^3.0.1 - checksum: 7999112efc35a6259bc22db460540cae06564aa65d0271e3bdfa86876d08b0e578b7b5b0028ee61b23f1cae9fc0e7847e4edc0948d3068a39a2a82853efc8499 - languageName: node - linkType: hard - -"normalize-path@npm:^2.1.1": - version: 2.1.1 - resolution: "normalize-path@npm:2.1.1" - dependencies: - remove-trailing-separator: ^1.0.1 - checksum: 7e9cbdcf7f5b8da7aa191fbfe33daf290cdcd8c038f422faf1b8a83c972bf7a6d94c5be34c4326cb00fb63bc0fd97d9fbcfaf2e5d6142332c2cd36d2e1b86cea - languageName: node - linkType: hard - -"normalize-path@npm:^3.0.0": - version: 3.0.0 - resolution: "normalize-path@npm:3.0.0" - checksum: 88eeb4da891e10b1318c4b2476b6e2ecbeb5ff97d946815ffea7794c31a89017c70d7f34b3c2ebf23ef4e9fc9fb99f7dffe36da22011b5b5c6ffa34f4873ec20 - languageName: node - linkType: hard - -"normalize-range@npm:^0.1.2": - version: 0.1.2 - resolution: "normalize-range@npm:0.1.2" - checksum: 9b2f14f093593f367a7a0834267c24f3cb3e887a2d9809c77d8a7e5fd08738bcd15af46f0ab01cc3a3d660386f015816b5c922cea8bf2ee79777f40874063184 - languageName: node - linkType: hard - -"normalize.css@npm:5.0.0": - version: 5.0.0 - resolution: "normalize.css@npm:5.0.0" - checksum: 47d045b5e2ccc67879bac85850013a62d508e55b4200343e54bb71404dd341eb08710c108e62f74353c305b7f230dffc2f1dbbd5f2b5a16ede819e2c651ab454 - languageName: node - linkType: hard - -"npm-run-path@npm:^2.0.0": - version: 2.0.2 - resolution: "npm-run-path@npm:2.0.2" - dependencies: - path-key: ^2.0.0 - checksum: acd5ad81648ba4588ba5a8effb1d98d2b339d31be16826a118d50f182a134ac523172101b82eab1d01cb4c2ba358e857d54cfafd8163a1ffe7bd52100b741125 - languageName: node - linkType: hard - -"npmlog@npm:^6.0.0": - version: 6.0.2 - resolution: "npmlog@npm:6.0.2" - dependencies: - are-we-there-yet: ^3.0.0 - console-control-strings: ^1.1.0 - gauge: ^4.0.3 - set-blocking: ^2.0.0 - checksum: ae238cd264a1c3f22091cdd9e2b106f684297d3c184f1146984ecbe18aaa86343953f26b9520dedd1b1372bc0316905b736c1932d778dbeb1fcf5a1001390e2a - languageName: node - linkType: hard - -"nprogress@npm:0.2.0": - version: 0.2.0 - resolution: "nprogress@npm:0.2.0" - checksum: 66b7bec5d563ecf2d1c3d2815e6d5eb74ed815eee8563e0afa63d3f185ab1b9cf2ddd97e1ded263b9995c5019d26d600320e849e50f3747984daa033744619dc - languageName: node - linkType: hard - -"nth-check@npm:~1.0.1": - version: 1.0.2 - resolution: "nth-check@npm:1.0.2" - dependencies: - boolbase: ~1.0.0 - checksum: 59e115fdd75b971d0030f42ada3aac23898d4c03aa13371fa8b3339d23461d1badf3fde5aad251fb956aaa75c0a3b9bfcd07c08a34a83b4f9dadfdce1d19337c - languageName: node - linkType: hard - -"num2fraction@npm:^1.2.2": - version: 1.2.2 - resolution: "num2fraction@npm:1.2.2" - checksum: 1da9c6797b505d3f5b17c7f694c4fa31565bdd5c0e5d669553253aed848a580804cd285280e8a73148bd9628839267daee4967f24b53d4e893e44b563e412635 - languageName: node - linkType: hard - -"object-assign@npm:^4.0.1, object-assign@npm:^4.1.0, object-assign@npm:^4.1.1": - version: 4.1.1 - resolution: "object-assign@npm:4.1.1" - checksum: fcc6e4ea8c7fe48abfbb552578b1c53e0d194086e2e6bbbf59e0a536381a292f39943c6e9628af05b5528aa5e3318bb30d6b2e53cadaf5b8fe9e12c4b69af23f - languageName: node - linkType: hard - -"object-copy@npm:^0.1.0": - version: 0.1.0 - resolution: "object-copy@npm:0.1.0" - dependencies: - copy-descriptor: ^0.1.0 - define-property: ^0.2.5 - kind-of: ^3.0.3 - checksum: a9e35f07e3a2c882a7e979090360d1a20ab51d1fa19dfdac3aa8873b328a7c4c7683946ee97c824ae40079d848d6740a3788fa14f2185155dab7ed970a72c783 - languageName: node - linkType: hard - -"object-inspect@npm:^1.9.0": - version: 1.12.3 - resolution: "object-inspect@npm:1.12.3" - checksum: dabfd824d97a5f407e6d5d24810d888859f6be394d8b733a77442b277e0808860555176719c5905e765e3743a7cada6b8b0a3b85e5331c530fd418cc8ae991db - languageName: node - linkType: hard - -"object-visit@npm:^1.0.0": - version: 1.0.1 - resolution: "object-visit@npm:1.0.1" - dependencies: - isobject: ^3.0.0 - checksum: b0ee07f5bf3bb881b881ff53b467ebbde2b37ebb38649d6944a6cd7681b32eedd99da9bd1e01c55facf81f54ed06b13af61aba6ad87f0052982995e09333f790 - languageName: node - linkType: hard - -"object.pick@npm:^1.3.0": - version: 1.3.0 - resolution: "object.pick@npm:1.3.0" - dependencies: - isobject: ^3.0.1 - checksum: 77fb6eed57c67adf75e9901187e37af39f052ef601cb4480386436561357eb9e459e820762f01fd02c5c1b42ece839ad393717a6d1850d848ee11fbabb3e580a - languageName: node - linkType: hard - -"observatory@npm:1.0.0": - version: 1.0.0 - resolution: "observatory@npm:1.0.0" - dependencies: - ansi-escapes: ^1.1.0 - chalk: ^1.1.1 - lodash: ^3.10.1 - checksum: e87209ed6a8371b33e0650f73d7d045b5142545c9a22a0a4f3cef4dd6ee9bfcc25ceabcd55a2bb59fc3f70d56d97e9e96190ae590726ca8849ff23917b75953f - languageName: node - linkType: hard - -"on-finished@npm:^2.2.0": - version: 2.4.1 - resolution: "on-finished@npm:2.4.1" - dependencies: - ee-first: 1.1.1 - checksum: d20929a25e7f0bb62f937a425b5edeb4e4cde0540d77ba146ec9357f00b0d497cdb3b9b05b9c8e46222407d1548d08166bff69cc56dfa55ba0e4469228920ff0 - languageName: node - linkType: hard - -"on-finished@npm:~2.3.0": - version: 2.3.0 - resolution: "on-finished@npm:2.3.0" - dependencies: - ee-first: 1.1.1 - checksum: 1db595bd963b0124d6fa261d18320422407b8f01dc65863840f3ddaaf7bcad5b28ff6847286703ca53f4ec19595bd67a2f1253db79fc4094911ec6aa8df1671b - languageName: node - linkType: hard - -"on-headers@npm:^1.0.0, on-headers@npm:~1.0.2": - version: 1.0.2 - resolution: "on-headers@npm:1.0.2" - checksum: 2bf13467215d1e540a62a75021e8b318a6cfc5d4fc53af8e8f84ad98dbcea02d506c6d24180cd62e1d769c44721ba542f3154effc1f7579a8288c9f7873ed8e5 - languageName: node - linkType: hard - -"once@npm:^1.3.0": - version: 1.4.0 - resolution: "once@npm:1.4.0" - dependencies: - wrappy: 1 - checksum: cd0a88501333edd640d95f0d2700fbde6bff20b3d4d9bdc521bdd31af0656b5706570d6c6afe532045a20bb8dc0849f8332d6f2a416e0ba6d3d3b98806c7db68 - languageName: node - linkType: hard - -"onmount@npm:1.3.0": - version: 1.3.0 - resolution: "onmount@npm:1.3.0" - checksum: 8cb3558a4c526ba80baf10a1d112fdc8a776bdadb4d121c94d65913c8be85aedf79c6b2eedadc99537b31b8b3a75ac1319fc5f102a636733044db94ac3053643 - languageName: node - linkType: hard - -"os-browserify@npm:~0.1.1": - version: 0.1.2 - resolution: "os-browserify@npm:0.1.2" - checksum: c00078aeda71e47d8e2443c43793bbe2745a079b224fc69c71228bd6b39782c15f6746b5c59e6dcc5bb930ee9185c34d8dcdbdc0b37b8dfaa20be347301c2f0e - languageName: node - linkType: hard - -"os-locale@npm:^1.4.0": - version: 1.4.0 - resolution: "os-locale@npm:1.4.0" - dependencies: - lcid: ^1.0.0 - checksum: 0161a1b6b5a8492f99f4b47fe465df9fc521c55ba5414fce6444c45e2500487b8ed5b40a47a98a2363fe83ff04ab033785300ed8df717255ec4c3b625e55b1fb - languageName: node - linkType: hard - -"p-finally@npm:^1.0.0": - version: 1.0.0 - resolution: "p-finally@npm:1.0.0" - checksum: 93a654c53dc805dd5b5891bab16eb0ea46db8f66c4bfd99336ae929323b1af2b70a8b0654f8f1eae924b2b73d037031366d645f1fd18b3d30cbd15950cc4b1d4 - languageName: node - linkType: hard - -"p-limit@npm:^1.1.0": - version: 1.3.0 - resolution: "p-limit@npm:1.3.0" - dependencies: - p-try: ^1.0.0 - checksum: 281c1c0b8c82e1ac9f81acd72a2e35d402bf572e09721ce5520164e9de07d8274451378a3470707179ad13240535558f4b277f02405ad752e08c7d5b0d54fbfd - languageName: node - linkType: hard - -"p-limit@npm:^2.2.0": - version: 2.3.0 - resolution: "p-limit@npm:2.3.0" - dependencies: - p-try: ^2.0.0 - checksum: 84ff17f1a38126c3314e91ecfe56aecbf36430940e2873dadaa773ffe072dc23b7af8e46d4b6485d302a11673fe94c6b67ca2cfbb60c989848b02100d0594ac1 - languageName: node - linkType: hard - -"p-locate@npm:^2.0.0": - version: 2.0.0 - resolution: "p-locate@npm:2.0.0" - dependencies: - p-limit: ^1.1.0 - checksum: e2dceb9b49b96d5513d90f715780f6f4972f46987dc32a0e18bc6c3fc74a1a5d73ec5f81b1398af5e58b99ea1ad03fd41e9181c01fa81b4af2833958696e3081 - languageName: node - linkType: hard - -"p-locate@npm:^4.1.0": - version: 4.1.0 - resolution: "p-locate@npm:4.1.0" - dependencies: - p-limit: ^2.2.0 - checksum: 513bd14a455f5da4ebfcb819ef706c54adb09097703de6aeaa5d26fe5ea16df92b48d1ac45e01e3944ce1e6aa2a66f7f8894742b8c9d6e276e16cd2049a2b870 - languageName: node - linkType: hard - -"p-map@npm:^4.0.0": - version: 4.0.0 - resolution: "p-map@npm:4.0.0" - dependencies: - aggregate-error: ^3.0.0 - checksum: cb0ab21ec0f32ddffd31dfc250e3afa61e103ef43d957cc45497afe37513634589316de4eb88abdfd969fe6410c22c0b93ab24328833b8eb1ccc087fc0442a1c - languageName: node - linkType: hard - -"p-try@npm:^1.0.0": - version: 1.0.0 - resolution: "p-try@npm:1.0.0" - checksum: 3b5303f77eb7722144154288bfd96f799f8ff3e2b2b39330efe38db5dd359e4fb27012464cd85cb0a76e9b7edd1b443568cb3192c22e7cffc34989df0bafd605 - languageName: node - linkType: hard - -"p-try@npm:^2.0.0": - version: 2.2.0 - resolution: "p-try@npm:2.2.0" - checksum: f8a8e9a7693659383f06aec604ad5ead237c7a261c18048a6e1b5b85a5f8a067e469aa24f5bc009b991ea3b058a87f5065ef4176793a200d4917349881216cae - languageName: node - linkType: hard - -"package-json@npm:^4.0.0": - version: 4.0.1 - resolution: "package-json@npm:4.0.1" - dependencies: - got: ^6.7.1 - registry-auth-token: ^3.0.1 - registry-url: ^3.0.3 - semver: ^5.1.0 - checksum: 920bd8280f9f42e0ebce69ecdc08327e716eec92127c4ff1dd4087dce236c7b29ad38e440bf40726a3d7b9e546d20ac0702cd82c8efe5390a84f9f2434ebd5b5 - languageName: node - linkType: hard - -"pako@npm:~0.2.0": - version: 0.2.9 - resolution: "pako@npm:0.2.9" - checksum: 055f9487cd57fbb78df84315873bbdd089ba286f3499daed47d2effdc6253e981f5db6898c23486de76d4a781559f890d643bd3a49f70f1b4a18019c98aa5125 - languageName: node - linkType: hard - -"parents@npm:^1.0.0, parents@npm:^1.0.1": - version: 1.0.1 - resolution: "parents@npm:1.0.1" - dependencies: - path-platform: ~0.11.15 - checksum: 094fc817d5e8d94e9f9d38c2618a2822f2960b7a268183a36326c5d1cf6ff32f97b1158b0f9b32ab126573996dfe6db104feda6d26e8531d762d178ef4488fc8 - languageName: node - linkType: hard - -"parse-asn1@npm:^5.0.0, parse-asn1@npm:^5.1.5": - version: 5.1.6 - resolution: "parse-asn1@npm:5.1.6" - dependencies: - asn1.js: ^5.2.0 - browserify-aes: ^1.0.0 - evp_bytestokey: ^1.0.0 - pbkdf2: ^3.0.3 - safe-buffer: ^5.1.1 - checksum: 9243311d1f88089bc9f2158972aa38d1abd5452f7b7cabf84954ed766048fe574d434d82c6f5a39b988683e96fb84cd933071dda38927e03469dc8c8d14463c7 - languageName: node - linkType: hard - -"parse-json@npm:^4.0.0": - version: 4.0.0 - resolution: "parse-json@npm:4.0.0" - dependencies: - error-ex: ^1.3.1 - json-parse-better-errors: ^1.0.1 - checksum: 0fe227d410a61090c247e34fa210552b834613c006c2c64d9a05cfe9e89cf8b4246d1246b1a99524b53b313e9ac024438d0680f67e33eaed7e6f38db64cfe7b5 - languageName: node - linkType: hard - -"parseurl@npm:~1.3.3": - version: 1.3.3 - resolution: "parseurl@npm:1.3.3" - checksum: 407cee8e0a3a4c5cd472559bca8b6a45b82c124e9a4703302326e9ab60fc1081442ada4e02628efef1eb16197ddc7f8822f5a91fd7d7c86b51f530aedb17dfa2 - languageName: node - linkType: hard - -"pascalcase@npm:^0.1.1": - version: 0.1.1 - resolution: "pascalcase@npm:0.1.1" - checksum: f83681c3c8ff75fa473a2bb2b113289952f802ff895d435edd717e7cb898b0408cbdb247117a938edcbc5d141020909846cc2b92c47213d764e2a94d2ad2b925 - languageName: node - linkType: hard - -"path-browserify@npm:~0.0.0": - version: 0.0.1 - resolution: "path-browserify@npm:0.0.1" - checksum: ae8dcd45d0d3cfbaf595af4f206bf3ed82d77f72b4877ae7e77328079e1468c84f9386754bb417d994d5a19bf47882fd253565c18441cd5c5c90ae5187599e35 - languageName: node - linkType: hard - -"path-dirname@npm:^1.0.0": - version: 1.0.2 - resolution: "path-dirname@npm:1.0.2" - checksum: 0d2f6604ae05a252a0025318685f290e2764ecf9c5436f203cdacfc8c0b17c24cdedaa449d766beb94ab88cc7fc70a09ec21e7933f31abc2b719180883e5e33f - languageName: node - linkType: hard - -"path-exists@npm:^3.0.0": - version: 3.0.0 - resolution: "path-exists@npm:3.0.0" - checksum: 96e92643aa34b4b28d0de1cd2eba52a1c5313a90c6542d03f62750d82480e20bfa62bc865d5cfc6165f5fcd5aeb0851043c40a39be5989646f223300021bae0a - languageName: node - linkType: hard - -"path-exists@npm:^4.0.0": - version: 4.0.0 - resolution: "path-exists@npm:4.0.0" - checksum: 505807199dfb7c50737b057dd8d351b82c033029ab94cb10a657609e00c1bc53b951cfdbccab8de04c5584d5eff31128ce6afd3db79281874a5ef2adbba55ed1 - languageName: node - linkType: hard - -"path-is-absolute@npm:^1.0.0, path-is-absolute@npm:^1.0.1": - version: 1.0.1 - resolution: "path-is-absolute@npm:1.0.1" - checksum: 060840f92cf8effa293bcc1bea81281bd7d363731d214cbe5c227df207c34cd727430f70c6037b5159c8a870b9157cba65e775446b0ab06fd5ecc7e54615a3b8 - languageName: node - linkType: hard - -"path-is-inside@npm:^1.0.1": - version: 1.0.2 - resolution: "path-is-inside@npm:1.0.2" - checksum: 0b5b6c92d3018b82afb1f74fe6de6338c4c654de4a96123cb343f2b747d5606590ac0c890f956ed38220a4ab59baddfd7b713d78a62d240b20b14ab801fa02cb - languageName: node - linkType: hard - -"path-key@npm:^2.0.0": - version: 2.0.1 - resolution: "path-key@npm:2.0.1" - checksum: f7ab0ad42fe3fb8c7f11d0c4f849871e28fbd8e1add65c370e422512fc5887097b9cf34d09c1747d45c942a8c1e26468d6356e2df3f740bf177ab8ca7301ebfd - languageName: node - linkType: hard - -"path-key@npm:^3.1.0": - version: 3.1.1 - resolution: "path-key@npm:3.1.1" - checksum: 55cd7a9dd4b343412a8386a743f9c746ef196e57c823d90ca3ab917f90ab9f13dd0ded27252ba49dbdfcab2b091d998bc446f6220cd3cea65db407502a740020 - languageName: node - linkType: hard - -"path-parse@npm:^1.0.7": - version: 1.0.7 - resolution: "path-parse@npm:1.0.7" - checksum: 49abf3d81115642938a8700ec580da6e830dde670be21893c62f4e10bd7dd4c3742ddc603fe24f898cba7eb0c6bc1777f8d9ac14185d34540c6d4d80cd9cae8a - languageName: node - linkType: hard - -"path-platform@npm:~0.11.15": - version: 0.11.15 - resolution: "path-platform@npm:0.11.15" - checksum: 239f2eae720531ff5a48837de68f94ebd7cf6cd2bf295b39beb97c5bafc34a34a683b62f9f5ad5ca5e78d71d7d44c29e7c56373c1c8473ab128a4e648bb898f0 - languageName: node - linkType: hard - -"path-to-regexp@npm:0.1.7": - version: 0.1.7 - resolution: "path-to-regexp@npm:0.1.7" - checksum: 69a14ea24db543e8b0f4353305c5eac6907917031340e5a8b37df688e52accd09e3cebfe1660b70d76b6bd89152f52183f28c74813dbf454ba1a01c82a38abce - languageName: node - linkType: hard - -"path-to-regexp@npm:^1.7.0": - version: 1.8.0 - resolution: "path-to-regexp@npm:1.8.0" - dependencies: - isarray: 0.0.1 - checksum: 709f6f083c0552514ef4780cb2e7e4cf49b0cc89a97439f2b7cc69a608982b7690fb5d1720a7473a59806508fc2dae0be751ba49f495ecf89fd8fbc62abccbcd - languageName: node - linkType: hard - -"path-type@npm:^3.0.0": - version: 3.0.0 - resolution: "path-type@npm:3.0.0" - dependencies: - pify: ^3.0.0 - checksum: 735b35e256bad181f38fa021033b1c33cfbe62ead42bb2222b56c210e42938eecb272ae1949f3b6db4ac39597a61b44edd8384623ec4d79bfdc9a9c0f12537a6 - languageName: node - linkType: hard - -"pbkdf2@npm:^3.0.3": - version: 3.1.2 - resolution: "pbkdf2@npm:3.1.2" - dependencies: - create-hash: ^1.1.2 - create-hmac: ^1.1.4 - ripemd160: ^2.0.1 - safe-buffer: ^5.0.1 - sha.js: ^2.4.8 - checksum: 2c950a100b1da72123449208e231afc188d980177d021d7121e96a2de7f2abbc96ead2b87d03d8fe5c318face097f203270d7e27908af9f471c165a4e8e69c92 - languageName: node - linkType: hard - -"picomatch@npm:^2.3.1": - version: 2.3.1 - resolution: "picomatch@npm:2.3.1" - checksum: 050c865ce81119c4822c45d3c84f1ced46f93a0126febae20737bd05ca20589c564d6e9226977df859ed5e03dc73f02584a2b0faad36e896936238238b0446cf - languageName: node - linkType: hard - -"pify@npm:^3.0.0": - version: 3.0.0 - resolution: "pify@npm:3.0.0" - checksum: 6cdcbc3567d5c412450c53261a3f10991665d660961e06605decf4544a61a97a54fefe70a68d5c37080ff9d6f4cf51444c90198d1ba9f9309a6c0d6e9f5c4fde - languageName: node - linkType: hard - -"pjax@npm:0.2.4": - version: 0.2.4 - resolution: "pjax@npm:0.2.4" - checksum: 08169162afcf2248c1c06ba4ab4580351c98db50b65e9d7457cfa0921665aeaa0f5b9bf8690b2e18b24028a07fa9a2cd7aebe36295f1553f486003a3106d42dc - languageName: node - linkType: hard - -"posix-character-classes@npm:^0.1.0": - version: 0.1.1 - resolution: "posix-character-classes@npm:0.1.1" - checksum: dedb99913c60625a16050cfed2fb5c017648fc075be41ac18474e1c6c3549ef4ada201c8bd9bd006d36827e289c571b6092e1ef6e756cdbab2fd7046b25c6442 - languageName: node - linkType: hard - -"postcss-value-parser@npm:^3.2.3": - version: 3.3.1 - resolution: "postcss-value-parser@npm:3.3.1" - checksum: 62cd26e1cdbcf2dcc6bcedf3d9b409c9027bc57a367ae20d31dd99da4e206f730689471fd70a2abe866332af83f54dc1fa444c589e2381bf7f8054c46209ce16 - languageName: node - linkType: hard - -"postcss@npm:5.2.5": - version: 5.2.5 - resolution: "postcss@npm:5.2.5" - dependencies: - chalk: ^1.1.3 - js-base64: ^2.1.9 - source-map: ^0.5.6 - supports-color: ^3.1.2 - checksum: 242dd0f2a428e349542eda1cac6b2b0369fc9636a8d7e54b2e38f8a0aabcae466c9468e63cd5c8908ac0f56d96fd211fed4d8958e5189c039a85f04526244f3a - languageName: node - linkType: hard - -"postcss@npm:^5.2.5": - version: 5.2.18 - resolution: "postcss@npm:5.2.18" - dependencies: - chalk: ^1.1.3 - js-base64: ^2.1.9 - source-map: ^0.5.6 - supports-color: ^3.2.3 - checksum: 0cb88e7c887b9b55d0362159846ec9fbf330892c5853b0e346929e723d215295ffae48d9a0f219f64f74767f9114802dc1b5cd21c327184f958b7efaa93dd629 - languageName: node - linkType: hard - -"prepend-http@npm:^1.0.1": - version: 1.0.4 - resolution: "prepend-http@npm:1.0.4" - checksum: 01e7baf4ad38af02257b99098543469332fc42ae50df33d97a124bf8172295907352fa6138c9b1610c10c6dd0847ca736e53fda736387cc5cf8fcffe96b47f29 - languageName: node - linkType: hard - -"private@npm:^0.1.6, private@npm:~0.1.5": - version: 0.1.8 - resolution: "private@npm:0.1.8" - checksum: a00abd713d25389f6de7294f0e7879b8a5d09a9ec5fd81cc2f21b29d4f9a80ec53bc4222927d3a281d4aadd4cd373d9a28726fca3935921950dc75fd71d1fdbb - languageName: node - linkType: hard - -"process-nextick-args@npm:~1.0.6": - version: 1.0.7 - resolution: "process-nextick-args@npm:1.0.7" - checksum: 41224fbc803ac6c96907461d4dfc20942efa3ca75f2d521bcf7cf0e89f8dec127fb3fb5d76746b8fb468a232ea02d84824fae08e027aec185fd29049c66d49f8 - languageName: node - linkType: hard - -"process-nextick-args@npm:~2.0.0": - version: 2.0.1 - resolution: "process-nextick-args@npm:2.0.1" - checksum: 1d38588e520dab7cea67cbbe2efdd86a10cc7a074c09657635e34f035277b59fbb57d09d8638346bf7090f8e8ebc070c96fa5fd183b777fff4f5edff5e9466cf - languageName: node - linkType: hard - -"process@npm:~0.11.0": - version: 0.11.10 - resolution: "process@npm:0.11.10" - checksum: bfcce49814f7d172a6e6a14d5fa3ac92cc3d0c3b9feb1279774708a719e19acd673995226351a082a9ae99978254e320ccda4240ddc474ba31a76c79491ca7c3 - languageName: node - linkType: hard - -"promise-inflight@npm:^1.0.1": - version: 1.0.1 - resolution: "promise-inflight@npm:1.0.1" - checksum: 22749483091d2c594261517f4f80e05226d4d5ecc1fc917e1886929da56e22b5718b7f2a75f3807e7a7d471bc3be2907fe92e6e8f373ddf5c64bae35b5af3981 - languageName: node - linkType: hard - -"promise-retry@npm:^2.0.1": - version: 2.0.1 - resolution: "promise-retry@npm:2.0.1" - dependencies: - err-code: ^2.0.2 - retry: ^0.12.0 - checksum: f96a3f6d90b92b568a26f71e966cbbc0f63ab85ea6ff6c81284dc869b41510e6cdef99b6b65f9030f0db422bf7c96652a3fff9f2e8fb4a0f069d8f4430359429 - languageName: node - linkType: hard - -"promise@npm:^7.0.1": - version: 7.3.1 - resolution: "promise@npm:7.3.1" - dependencies: - asap: ~2.0.3 - checksum: 475bb069130179fbd27ed2ab45f26d8862376a137a57314cf53310bdd85cc986a826fd585829be97ebc0aaf10e9d8e68be1bfe5a4a0364144b1f9eedfa940cf1 - languageName: node - linkType: hard - -"pseudomap@npm:^1.0.2": - version: 1.0.2 - resolution: "pseudomap@npm:1.0.2" - checksum: 856c0aae0ff2ad60881168334448e898ad7a0e45fe7386d114b150084254c01e200c957cf378378025df4e052c7890c5bd933939b0e0d2ecfcc1dc2f0b2991f5 - languageName: node - linkType: hard - -"public-encrypt@npm:^4.0.0": - version: 4.0.3 - resolution: "public-encrypt@npm:4.0.3" - dependencies: - bn.js: ^4.1.0 - browserify-rsa: ^4.0.0 - create-hash: ^1.1.0 - parse-asn1: ^5.0.0 - randombytes: ^2.0.1 - safe-buffer: ^5.1.2 - checksum: 215d446e43cef021a20b67c1df455e5eea134af0b1f9b8a35f9e850abf32991b0c307327bc5b9bc07162c288d5cdb3d4a783ea6c6640979ed7b5017e3e0c9935 - languageName: node - linkType: hard - -"pug-attrs@npm:^2.0.4": - version: 2.0.4 - resolution: "pug-attrs@npm:2.0.4" - dependencies: - constantinople: ^3.0.1 - js-stringify: ^1.0.1 - pug-runtime: ^2.0.5 - checksum: 5e17e3ce2955f67f2a8aa0c4e08e75b3f76c8ddd9b869dde5c33fec2a46497e5d9268212a04bf7fef1bc2c8681575360e352f8ba45e891592ac98a72e6ff595b - languageName: node - linkType: hard - -"pug-code-gen@npm:^2.0.2": - version: 2.0.3 - resolution: "pug-code-gen@npm:2.0.3" - dependencies: - constantinople: ^3.1.2 - doctypes: ^1.1.0 - js-stringify: ^1.0.1 - pug-attrs: ^2.0.4 - pug-error: ^1.3.3 - pug-runtime: ^2.0.5 - void-elements: ^2.0.1 - with: ^5.0.0 - checksum: 379c55f45306047b1978a33020009c670d8c1cb1bbdd15354cb7804898cca65d71739708c3a071ebb36fef53b074e47527a4fe78b66f78e95459c745cf622182 - languageName: node - linkType: hard - -"pug-error@npm:^1.3.3": - version: 1.3.3 - resolution: "pug-error@npm:1.3.3" - checksum: 1034a216585e5c037dc8c34b3dcc1bb76abaf20d74a79ec92500dc0efe25cdf56066d26d25d280d00c5adb9cc9d4ede6f4e4941f95a356ef1a34800545de087f - languageName: node - linkType: hard - -"pug-filters@npm:^3.1.1": - version: 3.1.1 - resolution: "pug-filters@npm:3.1.1" - dependencies: - clean-css: ^4.1.11 - constantinople: ^3.0.1 - jstransformer: 1.0.0 - pug-error: ^1.3.3 - pug-walk: ^1.1.8 - resolve: ^1.1.6 - uglify-js: ^2.6.1 - checksum: c0bccf0ac3ad3e6a024ad5f0f03767237fb36ab089233fefa88147ba284992e2d7da2a80b6496790af60d513594a0c8033719f6b16678a825a712d66703ecd0f - languageName: node - linkType: hard - -"pug-lexer@npm:^4.1.0": - version: 4.1.0 - resolution: "pug-lexer@npm:4.1.0" - dependencies: - character-parser: ^2.1.1 - is-expression: ^3.0.0 - pug-error: ^1.3.3 - checksum: 5bd8744e7fdbe5632611837231b64e35bf06cbb999a27909251cb420f403fb4edf007924a98654b6ff52f564716410da1d6912b1fd6cbe5d46f20770b072ad88 - languageName: node - linkType: hard - -"pug-linker@npm:^3.0.6": - version: 3.0.6 - resolution: "pug-linker@npm:3.0.6" - dependencies: - pug-error: ^1.3.3 - pug-walk: ^1.1.8 - checksum: 07c34849a0a7ed221862b0864bc59f3768a4cdb567b9404e0926c8d26452d67da3ce8243b3f3a704335fc6f9de8586e96affb1b88adea3bd1466e1a0b453c013 - languageName: node - linkType: hard - -"pug-load@npm:^2.0.12": - version: 2.0.12 - resolution: "pug-load@npm:2.0.12" - dependencies: - object-assign: ^4.1.0 - pug-walk: ^1.1.8 - checksum: 5170e030114c046cc2a56af69f11a39e334fdbb0653775be58b5e281c0af6132af8d8c57d5222253178426045694919894fb1cd2eb22ec54314f7ea03444b2f6 - languageName: node - linkType: hard - -"pug-parser@npm:^5.0.1": - version: 5.0.1 - resolution: "pug-parser@npm:5.0.1" - dependencies: - pug-error: ^1.3.3 - token-stream: 0.0.1 - checksum: d7810caa62be2a17a2879d91bed06df8783f070dab0e89dfcf430ff121db3654c0b3c73a12458ec00ba52261afd946c44a875c94a216af2c3c520a2fb56796da - languageName: node - linkType: hard - -"pug-runtime@npm:^2.0.5": - version: 2.0.5 - resolution: "pug-runtime@npm:2.0.5" - checksum: 451611c37ac2db0ffe1b53b7e79fe3622e60f84410d2ff487157fdf325365bdfaa2aae973f61333299e9b5d6be531d72ec5f95e00a9aca15f564690eec698fab - languageName: node - linkType: hard - -"pug-strip-comments@npm:^1.0.4": - version: 1.0.4 - resolution: "pug-strip-comments@npm:1.0.4" - dependencies: - pug-error: ^1.3.3 - checksum: 2718a8a2cf0f5a6d7959297670801de496322bd4a48a1fe521dcb392d93dff5f891b72d75ca1c8f539b3276a645a0dc98e92f1051fe615bba41043c6e7973253 - languageName: node - linkType: hard - -"pug-walk@npm:^1.1.8": - version: 1.1.8 - resolution: "pug-walk@npm:1.1.8" - checksum: b302b5ad6d2d1fbda73b8dc86f6963da5935371949fa5952735bebd7ace8a59c04c83f61800e78a5e5a0735a925e6674541b435a08db075bf029fbedb0dcaf08 - languageName: node - linkType: hard - -"pug@npm:^2.0.4": - version: 2.0.4 - resolution: "pug@npm:2.0.4" - dependencies: - pug-code-gen: ^2.0.2 - pug-filters: ^3.1.1 - pug-lexer: ^4.1.0 - pug-linker: ^3.0.6 - pug-load: ^2.0.12 - pug-parser: ^5.0.1 - pug-runtime: ^2.0.5 - pug-strip-comments: ^1.0.4 - checksum: 8644eca7d90c5eb5378639c298efa5f079f5ae1f8c6a178d81f437a4abb327acc57153e0b2f20acf785ddb799dbf4a87a3ad146f0b134150560eb80ef8862444 - languageName: node - linkType: hard - -"punycode@npm:1.3.2": - version: 1.3.2 - resolution: "punycode@npm:1.3.2" - checksum: b8807fd594b1db33335692d1f03e8beeddde6fda7fbb4a2e32925d88d20a3aa4cd8dcc0c109ccaccbd2ba761c208dfaaada83007087ea8bfb0129c9ef1b99ed6 - languageName: node - linkType: hard - -"punycode@npm:^1.3.2": - version: 1.4.1 - resolution: "punycode@npm:1.4.1" - checksum: fa6e698cb53db45e4628559e557ddaf554103d2a96a1d62892c8f4032cd3bc8871796cae9eabc1bc700e2b6677611521ce5bb1d9a27700086039965d0cf34518 - languageName: node - linkType: hard - -"q@npm:^1.1.2": - version: 1.5.1 - resolution: "q@npm:1.5.1" - checksum: 147baa93c805bc1200ed698bdf9c72e9e42c05f96d007e33a558b5fdfd63e5ea130e99313f28efc1783e90e6bdb4e48b67a36fcc026b7b09202437ae88a1fb12 - languageName: node - linkType: hard - -"qs@npm:^6.4.0": - version: 6.11.0 - resolution: "qs@npm:6.11.0" - dependencies: - side-channel: ^1.0.4 - checksum: 6e1f29dd5385f7488ec74ac7b6c92f4d09a90408882d0c208414a34dd33badc1a621019d4c799a3df15ab9b1d0292f97c1dd71dc7c045e69f81a8064e5af7297 - languageName: node - linkType: hard - -"qs@npm:~6.4.0": - version: 6.4.1 - resolution: "qs@npm:6.4.1" - checksum: d05cb45a9a25310aeb03190ff65f43b19a7dd7e06b2fd688a8317b74f69c1031adff9925fa8bc93b68ed350cd58b1ac72f956241ec7693b6267f8a7bb1883f9c - languageName: node - linkType: hard - -"querystring-es3@npm:~0.2.0": - version: 0.2.1 - resolution: "querystring-es3@npm:0.2.1" - checksum: 691e8d6b8b157e7cd49ae8e83fcf86de39ab3ba948c25abaa94fba84c0986c641aa2f597770848c64abce290ed17a39c9df6df737dfa7e87c3b63acc7d225d61 - languageName: node - linkType: hard - -"querystring@npm:0.2.0": - version: 0.2.0 - resolution: "querystring@npm:0.2.0" - checksum: 8258d6734f19be27e93f601758858c299bdebe71147909e367101ba459b95446fbe5b975bf9beb76390156a592b6f4ac3a68b6087cea165c259705b8b4e56a69 - languageName: node - linkType: hard - -"quick-lru@npm:^1.0.0": - version: 1.1.0 - resolution: "quick-lru@npm:1.1.0" - checksum: 7fd3fb3fb19dfc1d32bc0799c336f5867adc9ba3d9a662a50fdb463d2bb27d9c89b5e55b01a51fe09c3e251389ea858e1c38326bac8f550ff92dcebbf26665a3 - languageName: node - linkType: hard - -"randombytes@npm:^2.0.0, randombytes@npm:^2.0.1, randombytes@npm:^2.0.5": - version: 2.1.0 - resolution: "randombytes@npm:2.1.0" - dependencies: - safe-buffer: ^5.1.0 - checksum: d779499376bd4cbb435ef3ab9a957006c8682f343f14089ed5f27764e4645114196e75b7f6abf1cbd84fd247c0cb0651698444df8c9bf30e62120fbbc52269d6 - languageName: node - linkType: hard - -"randomfill@npm:^1.0.3": - version: 1.0.4 - resolution: "randomfill@npm:1.0.4" - dependencies: - randombytes: ^2.0.5 - safe-buffer: ^5.1.0 - checksum: 33734bb578a868d29ee1b8555e21a36711db084065d94e019a6d03caa67debef8d6a1bfd06a2b597e32901ddc761ab483a85393f0d9a75838f1912461d4dbfc7 - languageName: node - linkType: hard - -"raw-body@npm:~1.1.0": - version: 1.1.7 - resolution: "raw-body@npm:1.1.7" - dependencies: - bytes: 1 - string_decoder: 0.10 - checksum: 75ab1815ac54992abccccdffb27bd9ad9f5b6f5fb66e740474ad0d1bd3c1425e407b2be5eb34e0bef3da2c66bfa6a2c2b77498596f5b9999ead2d449fff0226f - languageName: node - linkType: hard - -"rc@npm:^1.0.1, rc@npm:^1.1.6": - version: 1.2.8 - resolution: "rc@npm:1.2.8" - dependencies: - deep-extend: ^0.6.0 - ini: ~1.3.0 - minimist: ^1.2.0 - strip-json-comments: ~2.0.1 - bin: - rc: ./cli.js - checksum: 2e26e052f8be2abd64e6d1dabfbd7be03f80ec18ccbc49562d31f617d0015fbdbcf0f9eed30346ea6ab789e0fdfe4337f033f8016efdbee0df5354751842080e - languageName: node - linkType: hard - -"read-only-stream@npm:^2.0.0": - version: 2.0.0 - resolution: "read-only-stream@npm:2.0.0" - dependencies: - readable-stream: ^2.0.2 - checksum: aa48979d1f0e8a83522e60698cf3375dca7b284dd066758ded7c3539613ac08275f94dfe0503d2bdfe964ef3cb65facb87a4b3a8250e5a7e89d07af4451019d8 - languageName: node - linkType: hard - -"read-pkg-up@npm:^3.0.0": - version: 3.0.0 - resolution: "read-pkg-up@npm:3.0.0" - dependencies: - find-up: ^2.0.0 - read-pkg: ^3.0.0 - checksum: 16175573f2914ab9788897bcbe2a62b5728d0075e62285b3680cebe97059e2911e0134a062cf6e51ebe3e3775312bc788ac2039ed6af38ec68d2c10c6f2b30fb - languageName: node - linkType: hard - -"read-pkg@npm:^3.0.0": - version: 3.0.0 - resolution: "read-pkg@npm:3.0.0" - dependencies: - load-json-file: ^4.0.0 - normalize-package-data: ^2.3.2 - path-type: ^3.0.0 - checksum: 398903ebae6c7e9965419a1062924436cc0b6f516c42c4679a90290d2f87448ed8f977e7aa2dbba4aa1ac09248628c43e493ac25b2bc76640e946035200e34c6 - languageName: node - linkType: hard - -"readable-stream@npm:^2.0.2, readable-stream@npm:^2.2.2, readable-stream@npm:^2.3.6, readable-stream@npm:~2.3.6": - version: 2.3.7 - resolution: "readable-stream@npm:2.3.7" - dependencies: - core-util-is: ~1.0.0 - inherits: ~2.0.3 - isarray: ~1.0.0 - process-nextick-args: ~2.0.0 - safe-buffer: ~5.1.1 - string_decoder: ~1.1.1 - util-deprecate: ~1.0.1 - checksum: e4920cf7549a60f8aaf694d483a0e61b2a878b969d224f89b3bc788b8d920075132c4b55a7494ee944c7b6a9a0eada28a7f6220d80b0312ece70bbf08eeca755 - languageName: node - linkType: hard - -"readable-stream@npm:^3.1.1, readable-stream@npm:^3.6.0": - version: 3.6.0 - resolution: "readable-stream@npm:3.6.0" - dependencies: - inherits: ^2.0.3 - string_decoder: ^1.1.1 - util-deprecate: ^1.0.1 - checksum: d4ea81502d3799439bb955a3a5d1d808592cf3133350ed352aeaa499647858b27b1c4013984900238b0873ec8d0d8defce72469fb7a83e61d53f5ad61cb80dc8 - languageName: node - linkType: hard - -"readable-stream@npm:~2.0.0": - version: 2.0.6 - resolution: "readable-stream@npm:2.0.6" - dependencies: - core-util-is: ~1.0.0 - inherits: ~2.0.1 - isarray: ~1.0.0 - process-nextick-args: ~1.0.6 - string_decoder: ~0.10.x - util-deprecate: ~1.0.1 - checksum: 5258b248531e58cbd855dab6a67dde3f4939f78a6d7707042ce61a74fe3421a7596405bc9c8970484dc9b2d929136e6cc40985f76759b9264a0a273f6136ed3b - languageName: node - linkType: hard - -"readdirp@npm:^2.2.1": - version: 2.2.1 - resolution: "readdirp@npm:2.2.1" - dependencies: - graceful-fs: ^4.1.11 - micromatch: ^3.1.10 - readable-stream: ^2.0.2 - checksum: 3879b20f1a871e0e004a14fbf1776e65ee0b746a62f5a416010808b37c272ac49b023c47042c7b1e281cba75a449696635bc64c397ed221ea81d853a8f2ed79a - languageName: node - linkType: hard - -"recast@npm:0.10.33": - version: 0.10.33 - resolution: "recast@npm:0.10.33" - dependencies: - ast-types: 0.8.12 - esprima-fb: ~15001.1001.0-dev-harmony-fb - private: ~0.1.5 - source-map: ~0.5.0 - checksum: 00f189f689cacfa6729e1898278e2743e502d626613efd993a996cc39d3944c58d5d8ace5469d20b7a13be7ff6e3d6b1f2d9afe5af94ddc25c95d4374ace9ed8 - languageName: node - linkType: hard - -"recast@npm:^0.11.17": - version: 0.11.23 - resolution: "recast@npm:0.11.23" - dependencies: - ast-types: 0.9.6 - esprima: ~3.1.0 - private: ~0.1.5 - source-map: ~0.5.0 - checksum: e2a6f973fa8e7f4aac6fdebd27706d67570c71d127632f15fad350a430c63b0dcdd9d7ceffad547b07114b5d28895e6fe078a287c1f8e5410c90aaa7289787ac - languageName: node - linkType: hard - -"recursive-readdir@npm:^2.1.0": - version: 2.2.3 - resolution: "recursive-readdir@npm:2.2.3" - dependencies: - minimatch: ^3.0.5 - checksum: 88ec96e276237290607edc0872b4f9842837b95cfde0cdbb1e00ba9623dfdf3514d44cdd14496ab60a0c2dd180a6ef8a3f1c34599e6cf2273afac9b72a6fb2b5 - languageName: node - linkType: hard - -"redent@npm:^2.0.0": - version: 2.0.0 - resolution: "redent@npm:2.0.0" - dependencies: - indent-string: ^3.0.0 - strip-indent: ^2.0.0 - checksum: c3bcea97de01023efbe826cd72abf2e5948e096acd808a498b4de5dd25e64ad8df0cb4218403197b4ea050ce73f2264a318bf469a27f87ba8ca31543892011d4 - languageName: node - linkType: hard - -"regenerator-runtime@npm:^0.11.0": - version: 0.11.1 - resolution: "regenerator-runtime@npm:0.11.1" - checksum: 3c97bd2c7b2b3247e6f8e2147a002eb78c995323732dad5dc70fac8d8d0b758d0295e7015b90d3d444446ae77cbd24b9f9123ec3a77018e81d8999818301b4f4 - languageName: node - linkType: hard - -"regenerator-runtime@npm:~0.9.5": - version: 0.9.6 - resolution: "regenerator-runtime@npm:0.9.6" - checksum: 4b0969f23863a6ef037b10c27f3ad33e66b8202c523ff5e9804178d51502b9884180733670f6ac2916d270969f986b0f5a489b00736a53bed430975d3029d5b7 - languageName: node - linkType: hard - -"regenerator@npm:~0.8.8": - version: 0.8.46 - resolution: "regenerator@npm:0.8.46" - dependencies: - commoner: ~0.10.3 - defs: ~1.1.0 - esprima-fb: ~15001.1001.0-dev-harmony-fb - private: ~0.1.5 - recast: 0.10.33 - regenerator-runtime: ~0.9.5 - through: ~2.3.8 - bin: - regenerator: bin/regenerator - checksum: 3d873d32cd3f53db3656d693cd0bc0a627da8b7442bb51f5f74383d94ce38f012ea209217518267048a9c7445d6bb11da77b11b23a885e4df4d2b0d64fc70663 - languageName: node - linkType: hard - -"regex-not@npm:^1.0.0, regex-not@npm:^1.0.2": - version: 1.0.2 - resolution: "regex-not@npm:1.0.2" - dependencies: - extend-shallow: ^3.0.2 - safe-regex: ^1.1.0 - checksum: 3081403de79559387a35ef9d033740e41818a559512668cef3d12da4e8a29ef34ee13c8ed1256b07e27ae392790172e8a15c8a06b72962fd4550476cde3d8f77 - languageName: node - linkType: hard - -"registry-auth-token@npm:^3.0.1": - version: 3.4.0 - resolution: "registry-auth-token@npm:3.4.0" - dependencies: - rc: ^1.1.6 - safe-buffer: ^5.0.1 - checksum: a15780726bae327a8fff4048cb6a5de03d58bc19ea9e2411322e32e4ebb59962efb669d270bdde384ed68ed7b948f5feb11469e3d0c7e50a33cc8866710f0bc2 - languageName: node - linkType: hard - -"registry-url@npm:^3.0.3": - version: 3.1.0 - resolution: "registry-url@npm:3.1.0" - dependencies: - rc: ^1.0.1 - checksum: 6d223da41b04e1824f5faa63905c6f2e43b216589d72794111573f017352b790aef42cd1f826463062f89d804abb2027e3d9665d2a9a0426a11eedd04d470af3 - languageName: node - linkType: hard - -"remove-trailing-separator@npm:^1.0.1": - version: 1.1.0 - resolution: "remove-trailing-separator@npm:1.1.0" - checksum: d3c20b5a2d987db13e1cca9385d56ecfa1641bae143b620835ac02a6b70ab88f68f117a0021838db826c57b31373d609d52e4f31aca75fc490c862732d595419 - languageName: node - linkType: hard - -"repeat-element@npm:^1.1.2": - version: 1.1.4 - resolution: "repeat-element@npm:1.1.4" - checksum: 1edd0301b7edad71808baad226f0890ba709443f03a698224c9ee4f2494c317892dc5211b2ba8cbea7194a9ddbcac01e283bd66de0467ab24ee1fc1a3711d8a9 - languageName: node - linkType: hard - -"repeat-string@npm:^1.5.2, repeat-string@npm:^1.6.1": - version: 1.6.1 - resolution: "repeat-string@npm:1.6.1" - checksum: 1b809fc6db97decdc68f5b12c4d1a671c8e3f65ec4a40c238bc5200e44e85bcc52a54f78268ab9c29fcf5fe4f1343e805420056d1f30fa9a9ee4c2d93e3cc6c0 - languageName: node - linkType: hard - -"require-directory@npm:^2.1.1": - version: 2.1.1 - resolution: "require-directory@npm:2.1.1" - checksum: fb47e70bf0001fdeabdc0429d431863e9475e7e43ea5f94ad86503d918423c1543361cc5166d713eaa7029dd7a3d34775af04764bebff99ef413111a5af18c80 - languageName: node - linkType: hard - -"require-main-filename@npm:^2.0.0": - version: 2.0.0 - resolution: "require-main-filename@npm:2.0.0" - checksum: e9e294695fea08b076457e9ddff854e81bffbe248ed34c1eec348b7abbd22a0d02e8d75506559e2265e96978f3c4720bd77a6dad84755de8162b357eb6c778c7 - languageName: node - linkType: hard - -"resolve-url@npm:^0.2.1": - version: 0.2.1 - resolution: "resolve-url@npm:0.2.1" - checksum: 7b7035b9ed6e7bc7d289e90aef1eab5a43834539695dac6416ca6e91f1a94132ae4796bbd173cdacfdc2ade90b5f38a3fb6186bebc1b221cd157777a23b9ad14 - languageName: node - linkType: hard - -"resolve@npm:1.1.7": - version: 1.1.7 - resolution: "resolve@npm:1.1.7" - checksum: afd20873fbde7641c9125efe3f940c2a99f6b1f90f1b7b743e744bdaac1cb105b2e4e0317bcc052ed7e31d57afa86b394a4dc9a1b33a297977be134fdf0250ab - languageName: node - linkType: hard - -"resolve@npm:^1.1.3, resolve@npm:^1.1.4, resolve@npm:^1.1.6, resolve@npm:^1.10.0": - version: 1.22.1 - resolution: "resolve@npm:1.22.1" - dependencies: - is-core-module: ^2.9.0 - path-parse: ^1.0.7 - supports-preserve-symlinks-flag: ^1.0.0 - bin: - resolve: bin/resolve - checksum: 07af5fc1e81aa1d866cbc9e9460fbb67318a10fa3c4deadc35c3ad8a898ee9a71a86a65e4755ac3195e0ea0cfbe201eb323ebe655ce90526fd61917313a34e4e - languageName: node - linkType: hard - -"resolve@patch:resolve@1.1.7#~builtin": - version: 1.1.7 - resolution: "resolve@patch:resolve@npm%3A1.1.7#~builtin::version=1.1.7&hash=07638b" - checksum: e9dbca78600ae56835c43a09f1276876c883e4b4bbd43e2683fa140671519d2bdebeb1c1576ca87c8c508ae2987b3ec481645ac5d3054b0f23254cfc1ce49942 - languageName: node - linkType: hard - -"resolve@patch:resolve@^1.1.3#~builtin, resolve@patch:resolve@^1.1.4#~builtin, resolve@patch:resolve@^1.1.6#~builtin, resolve@patch:resolve@^1.10.0#~builtin": - version: 1.22.1 - resolution: "resolve@patch:resolve@npm%3A1.22.1#~builtin::version=1.22.1&hash=07638b" - dependencies: - is-core-module: ^2.9.0 - path-parse: ^1.0.7 - supports-preserve-symlinks-flag: ^1.0.0 - bin: - resolve: bin/resolve - checksum: 5656f4d0bedcf8eb52685c1abdf8fbe73a1603bb1160a24d716e27a57f6cecbe2432ff9c89c2bd57542c3a7b9d14b1882b73bfe2e9d7849c9a4c0b8b39f02b8b - languageName: node - linkType: hard - -"ret@npm:~0.1.10": - version: 0.1.15 - resolution: "ret@npm:0.1.15" - checksum: d76a9159eb8c946586567bd934358dfc08a36367b3257f7a3d7255fdd7b56597235af23c6afa0d7f0254159e8051f93c918809962ebd6df24ca2a83dbe4d4151 - languageName: node - linkType: hard - -"retry@npm:^0.12.0": - version: 0.12.0 - resolution: "retry@npm:0.12.0" - checksum: 623bd7d2e5119467ba66202d733ec3c2e2e26568074923bc0585b6b99db14f357e79bdedb63cab56cec47491c4a0da7e6021a7465ca6dc4f481d3898fdd3158c - languageName: node - linkType: hard - -"right-align@npm:^0.1.1": - version: 0.1.3 - resolution: "right-align@npm:0.1.3" - dependencies: - align-text: ^0.1.1 - checksum: 7011dc8c0eb2ee04daab45d1251b5efff9956607e130b4a4005ed76e48bddf97c1de3cc70463ca0476949fce5d0af7d652619a538c1b9105b6eff6a59f15c4b9 - languageName: node - linkType: hard - -"rimraf@npm:^2.2.8": - version: 2.7.1 - resolution: "rimraf@npm:2.7.1" - dependencies: - glob: ^7.1.3 - bin: - rimraf: ./bin.js - checksum: cdc7f6eacb17927f2a075117a823e1c5951792c6498ebcce81ca8203454a811d4cf8900314154d3259bb8f0b42ab17f67396a8694a54cae3283326e57ad250cd - languageName: node - linkType: hard - -"rimraf@npm:^3.0.2": - version: 3.0.2 - resolution: "rimraf@npm:3.0.2" - dependencies: - glob: ^7.1.3 - bin: - rimraf: bin.js - checksum: 87f4164e396f0171b0a3386cc1877a817f572148ee13a7e113b238e48e8a9f2f31d009a92ec38a591ff1567d9662c6b67fd8818a2dbbaed74bc26a87a2a4a9a0 - languageName: node - linkType: hard - -"ripemd160@npm:^2.0.0, ripemd160@npm:^2.0.1": - version: 2.0.2 - resolution: "ripemd160@npm:2.0.2" - dependencies: - hash-base: ^3.0.0 - inherits: ^2.0.1 - checksum: 006accc40578ee2beae382757c4ce2908a826b27e2b079efdcd2959ee544ddf210b7b5d7d5e80467807604244e7388427330f5c6d4cd61e6edaddc5773ccc393 - languageName: node - linkType: hard - -"router@npm:^1.3.1": - version: 1.3.7 - resolution: "router@npm:1.3.7" - dependencies: - array-flatten: 3.0.0 - debug: 2.6.9 - methods: ~1.1.2 - parseurl: ~1.3.3 - path-to-regexp: 0.1.7 - setprototypeof: 1.2.0 - utils-merge: 1.0.1 - checksum: ae595e4d1e875f26934a012d39bfdc232135e1ee956f68b1b808fab166ac48d4a5025b30cb793bcf4ad8978884c1a7a65acf17a9cdd84e0340862bf0c12a6a47 - languageName: node - linkType: hard - -"rsvp@npm:^3.6.2": - version: 3.6.2 - resolution: "rsvp@npm:3.6.2" - checksum: 08504ea7ab3dba0349ff820011a460da69de08edf7149ee672f4511310ee4bd3767bfa83b6db019fa99b144125e1e93e6fba122d75a702a005360393f4352864 - languageName: node - linkType: hard - -"safe-buffer@npm:5.1.2, safe-buffer@npm:~5.1.0, safe-buffer@npm:~5.1.1": - version: 5.1.2 - resolution: "safe-buffer@npm:5.1.2" - checksum: f2f1f7943ca44a594893a852894055cf619c1fbcb611237fc39e461ae751187e7baf4dc391a72125e0ac4fb2d8c5c0b3c71529622e6a58f46b960211e704903c - languageName: node - linkType: hard - -"safe-buffer@npm:>=5.1.0, safe-buffer@npm:^5.0.1, safe-buffer@npm:^5.1.0, safe-buffer@npm:^5.1.1, safe-buffer@npm:^5.1.2, safe-buffer@npm:^5.2.0, safe-buffer@npm:~5.2.0": - version: 5.2.1 - resolution: "safe-buffer@npm:5.2.1" - checksum: b99c4b41fdd67a6aaf280fcd05e9ffb0813654894223afb78a31f14a19ad220bba8aba1cb14eddce1fcfb037155fe6de4e861784eb434f7d11ed58d1e70dd491 - languageName: node - linkType: hard - -"safe-json-parse@npm:~1.0.1": - version: 1.0.1 - resolution: "safe-json-parse@npm:1.0.1" - checksum: aea585d967fb373903aae99e6e31157a68ebebdc9d0011bc86732b6c700994768349e30d4fb6dfdc346106004a85104187d0b48964fe1caff90b0886df5827eb - languageName: node - linkType: hard - -"safe-regex@npm:^1.1.0": - version: 1.1.0 - resolution: "safe-regex@npm:1.1.0" - dependencies: - ret: ~0.1.10 - checksum: 9a8bba57c87a841f7997b3b951e8e403b1128c1a4fd1182f40cc1a20e2d490593d7c2a21030fadfea320c8e859219019e136f678c6689ed5960b391b822f01d5 - languageName: node - linkType: hard - -"safer-buffer@npm:>= 2.1.2 < 3, safer-buffer@npm:>= 2.1.2 < 3.0.0, safer-buffer@npm:^2.1.0": - version: 2.1.2 - resolution: "safer-buffer@npm:2.1.2" - checksum: cab8f25ae6f1434abee8d80023d7e72b598cf1327164ddab31003c51215526801e40b66c5e65d658a0af1e9d6478cadcb4c745f4bd6751f97d8644786c0978b0 - languageName: node - linkType: hard - -"sax@npm:0.5.x": - version: 0.5.8 - resolution: "sax@npm:0.5.8" - checksum: 03cc053e706114e721ff88fd7c8beef286a2ad7fd73d873eee602c010e6053b58964abfa93f3436363e94e8d273e680ad8b851ed27a18899f605cf3dffefaa77 - languageName: node - linkType: hard - -"section-matter@npm:^1.0.0": - version: 1.0.0 - resolution: "section-matter@npm:1.0.0" - dependencies: - extend-shallow: ^2.0.1 - kind-of: ^6.0.0 - checksum: 3cc4131705493b2955729b075dcf562359bba66183debb0332752dc9cad35616f6da7a23e42b6cab45cd2e4bb5cda113e9e84c8f05aee77adb6b0289a0229101 - languageName: node - linkType: hard - -"semver-diff@npm:^2.0.0": - version: 2.1.0 - resolution: "semver-diff@npm:2.1.0" - dependencies: - semver: ^5.0.3 - checksum: 14e50363d12ac7e77c2dd89319d97f9ec075ed8ee7ab1bde867b30f8e890fffd637dd90c7c2559e2431278d555b8bc6abc5796bb40b734cea267631c9501827c - languageName: node - linkType: hard - -"semver@npm:2 || 3 || 4 || 5, semver@npm:^5.0.1, semver@npm:^5.0.3, semver@npm:^5.1.0": - version: 5.7.1 - resolution: "semver@npm:5.7.1" - bin: - semver: ./bin/semver - checksum: 57fd0acfd0bac382ee87cd52cd0aaa5af086a7dc8d60379dfe65fea491fb2489b6016400813930ecd61fd0952dae75c115287a1b16c234b1550887117744dfaf - languageName: node - linkType: hard - -"semver@npm:^7.3.5": - version: 7.3.8 - resolution: "semver@npm:7.3.8" - dependencies: - lru-cache: ^6.0.0 - bin: - semver: bin/semver.js - checksum: ba9c7cbbf2b7884696523450a61fee1a09930d888b7a8d7579025ad93d459b2d1949ee5bbfeb188b2be5f4ac163544c5e98491ad6152df34154feebc2cc337c1 - languageName: node - linkType: hard - -"set-blocking@npm:^2.0.0": - version: 2.0.0 - resolution: "set-blocking@npm:2.0.0" - checksum: 6e65a05f7cf7ebdf8b7c75b101e18c0b7e3dff4940d480efed8aad3a36a4005140b660fa1d804cb8bce911cac290441dc728084a30504d3516ac2ff7ad607b02 - languageName: node - linkType: hard - -"set-value@npm:^2.0.0, set-value@npm:^2.0.1": - version: 2.0.1 - resolution: "set-value@npm:2.0.1" - dependencies: - extend-shallow: ^2.0.1 - is-extendable: ^0.1.1 - is-plain-object: ^2.0.3 - split-string: ^3.0.1 - checksum: 09a4bc72c94641aeae950eb60dc2755943b863780fcc32e441eda964b64df5e3f50603d5ebdd33394ede722528bd55ed43aae26e9df469b4d32e2292b427b601 - languageName: node - linkType: hard - -"setprototypeof@npm:1.2.0": - version: 1.2.0 - resolution: "setprototypeof@npm:1.2.0" - checksum: be18cbbf70e7d8097c97f713a2e76edf84e87299b40d085c6bf8b65314e994cc15e2e317727342fa6996e38e1f52c59720b53fe621e2eb593a6847bf0356db89 - languageName: node - linkType: hard - -"sha.js@npm:^2.4.0, sha.js@npm:^2.4.8, sha.js@npm:~2.4.4": - version: 2.4.11 - resolution: "sha.js@npm:2.4.11" - dependencies: - inherits: ^2.0.1 - safe-buffer: ^5.0.1 - bin: - sha.js: ./bin.js - checksum: ebd3f59d4b799000699097dadb831c8e3da3eb579144fd7eb7a19484cbcbb7aca3c68ba2bb362242eb09e33217de3b4ea56e4678184c334323eca24a58e3ad07 - languageName: node - linkType: hard - -"shasum-object@npm:^1.0.0": - version: 1.0.0 - resolution: "shasum-object@npm:1.0.0" - dependencies: - fast-safe-stringify: ^2.0.7 - checksum: fc3531b7ae6ca1cc76138bec54896ee61ff4e7cc62e37ebd47963c8c92f867c6232332e21437dbca60c9109e077b38ece631b59b045e10e0502949363e337895 - languageName: node - linkType: hard - -"shasum@npm:^1.0.0": - version: 1.0.2 - resolution: "shasum@npm:1.0.2" - dependencies: - json-stable-stringify: ~0.0.0 - sha.js: ~2.4.4 - checksum: 61d908825cb4c7a40aa098a5b1a6f8baa782dee38f996fbb0b86358b92a424a6467c5f6e1cadf42567f4283ff640dbf2dbc321e5ab293ca3d4d50657c3908bec - languageName: node - linkType: hard - -"shebang-command@npm:^1.2.0": - version: 1.2.0 - resolution: "shebang-command@npm:1.2.0" - dependencies: - shebang-regex: ^1.0.0 - checksum: 9eed1750301e622961ba5d588af2212505e96770ec376a37ab678f965795e995ade7ed44910f5d3d3cb5e10165a1847f52d3348c64e146b8be922f7707958908 - languageName: node - linkType: hard - -"shebang-command@npm:^2.0.0": - version: 2.0.0 - resolution: "shebang-command@npm:2.0.0" - dependencies: - shebang-regex: ^3.0.0 - checksum: 6b52fe87271c12968f6a054e60f6bde5f0f3d2db483a1e5c3e12d657c488a15474121a1d55cd958f6df026a54374ec38a4a963988c213b7570e1d51575cea7fa - languageName: node - linkType: hard - -"shebang-regex@npm:^1.0.0": - version: 1.0.0 - resolution: "shebang-regex@npm:1.0.0" - checksum: 404c5a752cd40f94591dfd9346da40a735a05139dac890ffc229afba610854d8799aaa52f87f7e0c94c5007f2c6af55bdcaeb584b56691926c5eaf41dc8f1372 - languageName: node - linkType: hard - -"shebang-regex@npm:^3.0.0": - version: 3.0.0 - resolution: "shebang-regex@npm:3.0.0" - checksum: 1a2bcae50de99034fcd92ad4212d8e01eedf52c7ec7830eedcf886622804fe36884278f2be8be0ea5fde3fd1c23911643a4e0f726c8685b61871c8908af01222 - languageName: node - linkType: hard - -"shell-quote@npm:^1.4.3": - version: 1.8.0 - resolution: "shell-quote@npm:1.8.0" - checksum: 6ef7c5e308b9c77eedded882653a132214fa98b4a1512bb507588cf6cd2fc78bfee73e945d0c3211af028a1eabe09c6a19b96edd8977dc149810797e93809749 - languageName: node - linkType: hard - -"side-channel@npm:^1.0.4": - version: 1.0.4 - resolution: "side-channel@npm:1.0.4" - dependencies: - call-bind: ^1.0.0 - get-intrinsic: ^1.0.2 - object-inspect: ^1.9.0 - checksum: 351e41b947079c10bd0858364f32bb3a7379514c399edb64ab3dce683933483fc63fb5e4efe0a15a2e8a7e3c436b6a91736ddb8d8c6591b0460a24bb4a1ee245 - languageName: node - linkType: hard - -"signal-exit@npm:^3.0.0, signal-exit@npm:^3.0.2, signal-exit@npm:^3.0.7": - version: 3.0.7 - resolution: "signal-exit@npm:3.0.7" - checksum: a2f098f247adc367dffc27845853e9959b9e88b01cb301658cfe4194352d8d2bb32e18467c786a7fe15f1d44b233ea35633d076d5e737870b7139949d1ab6318 - languageName: node - linkType: hard - -"simple-concat@npm:^1.0.0": - version: 1.0.1 - resolution: "simple-concat@npm:1.0.1" - checksum: 4d211042cc3d73a718c21ac6c4e7d7a0363e184be6a5ad25c8a1502e49df6d0a0253979e3d50dbdd3f60ef6c6c58d756b5d66ac1e05cda9cacd2e9fc59e3876a - languageName: node - linkType: hard - -"simple-fmt@npm:~0.1.0": - version: 0.1.0 - resolution: "simple-fmt@npm:0.1.0" - checksum: 13eb3381f294c1d022db3d35c65224a8eafa358032d98271841ead905a30f74ba7565876839a0b7015036ca8391512aae9d2c1983f9f27bc77ef1b8f75b85a51 - languageName: node - linkType: hard - -"simple-is@npm:~0.2.0": - version: 0.2.0 - resolution: "simple-is@npm:0.2.0" - checksum: 9ab19289a1da9551f91715f4ae838790c13752ccf7e8b7dce69e4b056f4ab7c2b13486fe987ab00c01294cb33a63bb08fd66a1a4170c70fcc6d3a310bf406e8c - languageName: node - linkType: hard - -"slugify@npm:^1.3.2": - version: 1.6.5 - resolution: "slugify@npm:1.6.5" - checksum: a955a1b600201030f4c1daa9bb74a17d4402a0693fc40978bbd17e44e64fd72dad3bac4037422aa8aed55b5170edd57f3f4cd8f59ba331f5cf0f10f1a7795609 - languageName: node - linkType: hard - -"smart-buffer@npm:^4.2.0": - version: 4.2.0 - resolution: "smart-buffer@npm:4.2.0" - checksum: b5167a7142c1da704c0e3af85c402002b597081dd9575031a90b4f229ca5678e9a36e8a374f1814c8156a725d17008ae3bde63b92f9cfd132526379e580bec8b - languageName: node - linkType: hard - -"snapdragon-node@npm:^2.0.1": - version: 2.1.1 - resolution: "snapdragon-node@npm:2.1.1" - dependencies: - define-property: ^1.0.0 - isobject: ^3.0.0 - snapdragon-util: ^3.0.1 - checksum: 9bb57d759f9e2a27935dbab0e4a790137adebace832b393e350a8bf5db461ee9206bb642d4fe47568ee0b44080479c8b4a9ad0ebe3712422d77edf9992a672fd - languageName: node - linkType: hard - -"snapdragon-util@npm:^3.0.1": - version: 3.0.1 - resolution: "snapdragon-util@npm:3.0.1" - dependencies: - kind-of: ^3.2.0 - checksum: 684997dbe37ec995c03fd3f412fba2b711fc34cb4010452b7eb668be72e8811a86a12938b511e8b19baf853b325178c56d8b78d655305e5cfb0bb8b21677e7b7 - languageName: node - linkType: hard - -"snapdragon@npm:^0.8.1": - version: 0.8.2 - resolution: "snapdragon@npm:0.8.2" - dependencies: - base: ^0.11.1 - debug: ^2.2.0 - define-property: ^0.2.5 - extend-shallow: ^2.0.1 - map-cache: ^0.2.2 - source-map: ^0.5.6 - source-map-resolve: ^0.5.0 - use: ^3.1.0 - checksum: a197f242a8f48b11036563065b2487e9b7068f50a20dd81d9161eca6af422174fc158b8beeadbe59ce5ef172aa5718143312b3aebaae551c124b7824387c8312 - languageName: node - linkType: hard - -"socks-proxy-agent@npm:^7.0.0": - version: 7.0.0 - resolution: "socks-proxy-agent@npm:7.0.0" - dependencies: - agent-base: ^6.0.2 - debug: ^4.3.3 - socks: ^2.6.2 - checksum: 720554370154cbc979e2e9ce6a6ec6ced205d02757d8f5d93fe95adae454fc187a5cbfc6b022afab850a5ce9b4c7d73e0f98e381879cf45f66317a4895953846 - languageName: node - linkType: hard - -"socks@npm:^2.6.2": - version: 2.7.1 - resolution: "socks@npm:2.7.1" - dependencies: - ip: ^2.0.0 - smart-buffer: ^4.2.0 - checksum: 259d9e3e8e1c9809a7f5c32238c3d4d2a36b39b83851d0f573bfde5f21c4b1288417ce1af06af1452569cd1eb0841169afd4998f0e04ba04656f6b7f0e46d748 - languageName: node - linkType: hard - -"source-map-resolve@npm:^0.5.0": - version: 0.5.3 - resolution: "source-map-resolve@npm:0.5.3" - dependencies: - atob: ^2.1.2 - decode-uri-component: ^0.2.0 - resolve-url: ^0.2.1 - source-map-url: ^0.4.0 - urix: ^0.1.0 - checksum: c73fa44ac00783f025f6ad9e038ab1a2e007cd6a6b86f47fe717c3d0765b4a08d264f6966f3bd7cd9dbcd69e4832783d5472e43247775b2a550d6f2155d24bae - languageName: node - linkType: hard - -"source-map-url@npm:^0.4.0": - version: 0.4.1 - resolution: "source-map-url@npm:0.4.1" - checksum: 64c5c2c77aff815a6e61a4120c309ae4cac01298d9bcbb3deb1b46a4dd4c46d4a1eaeda79ec9f684766ae80e8dc86367b89326ce9dd2b89947bd9291fc1ac08c - languageName: node - linkType: hard - -"source-map@npm:0.1.x": - version: 0.1.43 - resolution: "source-map@npm:0.1.43" - dependencies: - amdefine: ">=0.0.4" - checksum: 0a230f8cae8a8ea70bd36701c33d01fb0c437b798508a561c896a99b42f5af81a206176a250fc654c7c57a736b8081c4b4a6c9887455f7d2724f847451f1d7d9 - languageName: node - linkType: hard - -"source-map@npm:^0.5.6, source-map@npm:~0.5.0, source-map@npm:~0.5.1, source-map@npm:~0.5.3": - version: 0.5.7 - resolution: "source-map@npm:0.5.7" - checksum: 5dc2043b93d2f194142c7f38f74a24670cd7a0063acdaf4bf01d2964b402257ae843c2a8fa822ad5b71013b5fcafa55af7421383da919752f22ff488bc553f4d - languageName: node - linkType: hard - -"source-map@npm:^0.6.1, source-map@npm:~0.6.0": - version: 0.6.1 - resolution: "source-map@npm:0.6.1" - checksum: 59ce8640cf3f3124f64ac289012c2b8bd377c238e316fb323ea22fbfe83da07d81e000071d7242cad7a23cd91c7de98e4df8830ec3f133cb6133a5f6e9f67bc2 - languageName: node - linkType: hard - -"spdx-correct@npm:^3.0.0": - version: 3.1.1 - resolution: "spdx-correct@npm:3.1.1" - dependencies: - spdx-expression-parse: ^3.0.0 - spdx-license-ids: ^3.0.0 - checksum: 77ce438344a34f9930feffa61be0eddcda5b55fc592906ef75621d4b52c07400a97084d8701557b13f7d2aae0cb64f808431f469e566ef3fe0a3a131dcb775a6 - languageName: node - linkType: hard - -"spdx-exceptions@npm:^2.1.0": - version: 2.3.0 - resolution: "spdx-exceptions@npm:2.3.0" - checksum: cb69a26fa3b46305637123cd37c85f75610e8c477b6476fa7354eb67c08128d159f1d36715f19be6f9daf4b680337deb8c65acdcae7f2608ba51931540687ac0 - languageName: node - linkType: hard - -"spdx-expression-parse@npm:^3.0.0": - version: 3.0.1 - resolution: "spdx-expression-parse@npm:3.0.1" - dependencies: - spdx-exceptions: ^2.1.0 - spdx-license-ids: ^3.0.0 - checksum: a1c6e104a2cbada7a593eaa9f430bd5e148ef5290d4c0409899855ce8b1c39652bcc88a725259491a82601159d6dc790bedefc9016c7472f7de8de7361f8ccde - languageName: node - linkType: hard - -"spdx-license-ids@npm:^3.0.0": - version: 3.0.12 - resolution: "spdx-license-ids@npm:3.0.12" - checksum: 92a4dddce62ce1db6fe54a7a839cf85e06abc308fc83b776a55b44e4f1906f02e7ebd506120847039e976bbbad359ea8bdfafb7925eae5cd7e73255f02e0b7d6 - languageName: node - linkType: hard - -"split-string@npm:^3.0.1, split-string@npm:^3.0.2": - version: 3.1.0 - resolution: "split-string@npm:3.1.0" - dependencies: - extend-shallow: ^3.0.0 - checksum: ae5af5c91bdc3633628821bde92fdf9492fa0e8a63cf6a0376ed6afde93c701422a1610916f59be61972717070119e848d10dfbbd5024b7729d6a71972d2a84c - languageName: node - linkType: hard - -"sprintf-js@npm:~1.0.2": - version: 1.0.3 - resolution: "sprintf-js@npm:1.0.3" - checksum: 19d79aec211f09b99ec3099b5b2ae2f6e9cdefe50bc91ac4c69144b6d3928a640bb6ae5b3def70c2e85a2c3d9f5ec2719921e3a59d3ca3ef4b2fd1a4656a0df3 - languageName: node - linkType: hard - -"ssri@npm:^9.0.0": - version: 9.0.1 - resolution: "ssri@npm:9.0.1" - dependencies: - minipass: ^3.1.1 - checksum: fb58f5e46b6923ae67b87ad5ef1c5ab6d427a17db0bead84570c2df3cd50b4ceb880ebdba2d60726588272890bae842a744e1ecce5bd2a2a582fccd5068309eb - languageName: node - linkType: hard - -"stable@npm:~0.1.3": - version: 0.1.8 - resolution: "stable@npm:0.1.8" - checksum: 2ff482bb100285d16dd75cd8f7c60ab652570e8952c0bfa91828a2b5f646a0ff533f14596ea4eabd48bb7f4aeea408dce8f8515812b975d958a4cc4fa6b9dfeb - languageName: node - linkType: hard - -"stat-mode@npm:^0.2.0": - version: 0.2.2 - resolution: "stat-mode@npm:0.2.2" - checksum: 1921d631618707afb3dea6c273f7eca35b7edcd91a9aa10e46869974a7d67f9562cc7d19a56ef2f256dc842a7784cc9b24be5b3059f13ff7e2ed81cff7d3d0e0 - languageName: node - linkType: hard - -"stat-mode@npm:^1.0.0": - version: 1.0.0 - resolution: "stat-mode@npm:1.0.0" - checksum: f9daea2dba41e1dffae5543a8af087ec8b56ff6ae1c729b5373b4f528e214f53260108dab522d2660cca2215dc3e61f164920a82136ad142dab50b3faa6f6090 - languageName: node - linkType: hard - -"static-extend@npm:^0.1.1": - version: 0.1.2 - resolution: "static-extend@npm:0.1.2" - dependencies: - define-property: ^0.2.5 - object-copy: ^0.1.0 - checksum: 8657485b831f79e388a437260baf22784540417a9b29e11572c87735df24c22b84eda42107403a64b30861b2faf13df9f7fc5525d51f9d1d2303aba5cbf4e12c - languageName: node - linkType: hard - -"statuses@npm:~1.5.0": - version: 1.5.0 - resolution: "statuses@npm:1.5.0" - checksum: c469b9519de16a4bb19600205cffb39ee471a5f17b82589757ca7bd40a8d92ebb6ed9f98b5a540c5d302ccbc78f15dc03cc0280dd6e00df1335568a5d5758a5c - languageName: node - linkType: hard - -"stream-browserify@npm:^2.0.0": - version: 2.0.2 - resolution: "stream-browserify@npm:2.0.2" - dependencies: - inherits: ~2.0.1 - readable-stream: ^2.0.2 - checksum: 8de7bcab5582e9a931ae1a4768be7efe8fa4b0b95fd368d16d8cf3e494b897d6b0a7238626de5d71686e53bddf417fd59d106cfa3af0ec055f61a8d1f8fc77b3 - languageName: node - linkType: hard - -"stream-combiner2@npm:^1.1.1": - version: 1.1.1 - resolution: "stream-combiner2@npm:1.1.1" - dependencies: - duplexer2: ~0.1.0 - readable-stream: ^2.0.2 - checksum: dd32d179fa8926619c65471a7396fc638ec8866616c0b8747c4e05563ccdb0b694dd4e83cd799f1c52789c965a40a88195942b82b8cea2ee7a5536f1954060f9 - languageName: node - linkType: hard - -"stream-http@npm:^2.0.0": - version: 2.8.3 - resolution: "stream-http@npm:2.8.3" - dependencies: - builtin-status-codes: ^3.0.0 - inherits: ^2.0.1 - readable-stream: ^2.3.6 - to-arraybuffer: ^1.0.0 - xtend: ^4.0.0 - checksum: f57dfaa21a015f72e6ce6b199cf1762074cfe8acf0047bba8f005593754f1743ad0a91788f95308d9f3829ad55742399ad27b4624432f2752a08e62ef4346e05 - languageName: node - linkType: hard - -"stream-splicer@npm:^2.0.0": - version: 2.0.1 - resolution: "stream-splicer@npm:2.0.1" - dependencies: - inherits: ^2.0.1 - readable-stream: ^2.0.2 - checksum: 7bb3563961450e69183baa04272e042bdd7df44f6d75bf1cce0d6a628efd2d4b0a0d2a290bed0674ea7719c87e6cf6bf7406ca1d17413abf1484430d36d65580 - languageName: node - linkType: hard - -"string-length@npm:^1.0.0": - version: 1.0.1 - resolution: "string-length@npm:1.0.1" - dependencies: - strip-ansi: ^3.0.0 - checksum: 404b130feeca0f91d22ade49634b12ef56330ab9c7cafaddfa454a3d5581170aada2cfe12e97f2c9bb3e7dac0a743fedea36a2e4fa07b666dc98586e002204b5 - languageName: node - linkType: hard - -"string-template@npm:~0.2.1": - version: 0.2.1 - resolution: "string-template@npm:0.2.1" - checksum: 042cdcf4d4832378f12fbf45b42f479990f330cc409e6dc184838801efbc8352ccf9428fe169f8f8cfff2b864879d4ba1ef8b5f41d63d1d71844c48005a1683f - languageName: node - linkType: hard - -"string-width@npm:^1.0.2 || 2 || 3 || 4, string-width@npm:^4.1.0, string-width@npm:^4.2.0, string-width@npm:^4.2.3": - version: 4.2.3 - resolution: "string-width@npm:4.2.3" - dependencies: - emoji-regex: ^8.0.0 - is-fullwidth-code-point: ^3.0.0 - strip-ansi: ^6.0.1 - checksum: e52c10dc3fbfcd6c3a15f159f54a90024241d0f149cf8aed2982a2d801d2e64df0bf1dc351cf8e95c3319323f9f220c16e740b06faecd53e2462df1d2b5443fb - languageName: node - linkType: hard - -"string-width@npm:^2.0.0, string-width@npm:^2.1.1": - version: 2.1.1 - resolution: "string-width@npm:2.1.1" - dependencies: - is-fullwidth-code-point: ^2.0.0 - strip-ansi: ^4.0.0 - checksum: d6173abe088c615c8dffaf3861dc5d5906ed3dc2d6fd67ff2bd2e2b5dce7fd683c5240699cf0b1b8aa679a3b3bd6b28b5053c824cb89b813d7f6541d8f89064a - languageName: node - linkType: hard - -"string_decoder@npm:0.10, string_decoder@npm:~0.10.0, string_decoder@npm:~0.10.x": - version: 0.10.31 - resolution: "string_decoder@npm:0.10.31" - checksum: fe00f8e303647e5db919948ccb5ce0da7dea209ab54702894dd0c664edd98e5d4df4b80d6fabf7b9e92b237359d21136c95bf068b2f7760b772ca974ba970202 - languageName: node - linkType: hard - -"string_decoder@npm:^1.1.1": - version: 1.3.0 - resolution: "string_decoder@npm:1.3.0" - dependencies: - safe-buffer: ~5.2.0 - checksum: 8417646695a66e73aefc4420eb3b84cc9ffd89572861fe004e6aeb13c7bc00e2f616247505d2dbbef24247c372f70268f594af7126f43548565c68c117bdeb56 - languageName: node - linkType: hard - -"string_decoder@npm:~1.1.1": - version: 1.1.1 - resolution: "string_decoder@npm:1.1.1" - dependencies: - safe-buffer: ~5.1.0 - checksum: 9ab7e56f9d60a28f2be697419917c50cac19f3e8e6c28ef26ed5f4852289fe0de5d6997d29becf59028556f2c62983790c1d9ba1e2a3cc401768ca12d5183a5b - languageName: node - linkType: hard - -"stringmap@npm:~0.2.2": - version: 0.2.2 - resolution: "stringmap@npm:0.2.2" - checksum: 7b6b9745c4a0c10c1bee05fd022dd01e4f0939383a6aad6b514f6c96f618044d73012f6b7f78d6976de3893507d3a198f427980ec3fc179b45a91f30f03d934a - languageName: node - linkType: hard - -"stringset@npm:~0.2.1": - version: 0.2.1 - resolution: "stringset@npm:0.2.1" - checksum: 63fe3deb778a924c2dc554f0aeeed972e1cc38e761b13c22151c2c9839fea893310b8e229a65f65b189fcf3cd40ec24ea2a880ab9b9ef65c7d9dd65861dc93a5 - languageName: node - linkType: hard - -"strip-ansi@npm:^3.0.0": - version: 3.0.1 - resolution: "strip-ansi@npm:3.0.1" - dependencies: - ansi-regex: ^2.0.0 - checksum: 9b974de611ce5075c70629c00fa98c46144043db92ae17748fb780f706f7a789e9989fd10597b7c2053ae8d1513fd707816a91f1879b2f71e6ac0b6a863db465 - languageName: node - linkType: hard - -"strip-ansi@npm:^4.0.0": - version: 4.0.0 - resolution: "strip-ansi@npm:4.0.0" - dependencies: - ansi-regex: ^3.0.0 - checksum: d9186e6c0cf78f25274f6750ee5e4a5725fb91b70fdd79aa5fe648eab092a0ec5b9621b22d69d4534a56319f75d8944efbd84e3afa8d4ad1b9a9491f12c84eca - languageName: node - linkType: hard - -"strip-ansi@npm:^6.0.0, strip-ansi@npm:^6.0.1": - version: 6.0.1 - resolution: "strip-ansi@npm:6.0.1" - dependencies: - ansi-regex: ^5.0.1 - checksum: f3cd25890aef3ba6e1a74e20896c21a46f482e93df4a06567cebf2b57edabb15133f1f94e57434e0a958d61186087b1008e89c94875d019910a213181a14fc8c - languageName: node - linkType: hard - -"strip-bom-string@npm:^1.0.0": - version: 1.0.0 - resolution: "strip-bom-string@npm:1.0.0" - checksum: 5635a3656d8512a2c194d6c8d5dee7ef0dde6802f7be9413b91e201981ad4132506656d9cf14137f019fd50f0269390d91c7f6a2601b1bee039a4859cfce4934 - languageName: node - linkType: hard - -"strip-bom@npm:^3.0.0": - version: 3.0.0 - resolution: "strip-bom@npm:3.0.0" - checksum: 8d50ff27b7ebe5ecc78f1fe1e00fcdff7af014e73cf724b46fb81ef889eeb1015fc5184b64e81a2efe002180f3ba431bdd77e300da5c6685d702780fbf0c8d5b - languageName: node - linkType: hard - -"strip-eof@npm:^1.0.0": - version: 1.0.0 - resolution: "strip-eof@npm:1.0.0" - checksum: 40bc8ddd7e072f8ba0c2d6d05267b4e0a4800898c3435b5fb5f5a21e6e47dfaff18467e7aa0d1844bb5d6274c3097246595841fbfeb317e541974ee992cac506 - languageName: node - linkType: hard - -"strip-indent@npm:^2.0.0": - version: 2.0.0 - resolution: "strip-indent@npm:2.0.0" - checksum: 7d9080d02ddace616ebbc17846e41d3880cb147e2a81e51142281322ded6b05b230a4fb12c2e5266f62735cf8f5fb9839e55d74799d11f26bcc8c71ca049a0ba - languageName: node - linkType: hard - -"strip-json-comments@npm:~2.0.1": - version: 2.0.1 - resolution: "strip-json-comments@npm:2.0.1" - checksum: 1074ccb63270d32ca28edfb0a281c96b94dc679077828135141f27d52a5a398ef5e78bcf22809d23cadc2b81dfbe345eb5fd8699b385c8b1128907dec4a7d1e1 - languageName: node - linkType: hard - -"stylus@npm:0.54.5": - version: 0.54.5 - resolution: "stylus@npm:0.54.5" - dependencies: - css-parse: 1.7.x - debug: "*" - glob: 7.0.x - mkdirp: 0.5.x - sax: 0.5.x - source-map: 0.1.x - bin: - stylus: ./bin/stylus - checksum: 85b7ffde6284a369666cd61cab80e12fa36aa67a043c5bd459d0dc586ef06a30547e3ac00be5d0e3a3112e442fdac8db2357417b8c936e8584356561cc51b8e6 - languageName: node - linkType: hard - -"subarg@npm:^1.0.0": - version: 1.0.0 - resolution: "subarg@npm:1.0.0" - dependencies: - minimist: ^1.1.0 - checksum: 8359df72e9a2d03c35702ba58e49cac04daae8f27dff26837e12687c7d10cb800a036fd33fdc5eb0e8c24fb25d804f657fe8bde18dd3dd6ec7dab8eff7aac27e - languageName: node - linkType: hard - -"superstatic@npm:^6.0.3": - version: 6.0.4 - resolution: "superstatic@npm:6.0.4" - dependencies: - as-array: ^2.0.0 - async: ^1.5.2 - basic-auth-connect: ^1.0.0 - chalk: ^1.1.3 - char-spinner: ^1.0.1 - compare-semver: ^1.0.0 - compression: ^1.7.0 - connect: ^3.6.2 - connect-query: ^1.0.0 - destroy: ^1.0.4 - fast-url-parser: ^1.1.3 - fs-extra: ^0.30.0 - glob: ^7.1.2 - glob-slasher: ^1.0.1 - home-dir: ^1.0.0 - is-url: ^1.2.2 - join-path: ^1.1.1 - lodash: ^4.17.4 - mime-types: ^2.1.16 - minimatch: ^3.0.4 - morgan: ^1.8.2 - nash: ^3.0.0 - on-finished: ^2.2.0 - on-headers: ^1.0.0 - path-to-regexp: ^1.7.0 - router: ^1.3.1 - rsvp: ^3.6.2 - string-length: ^1.0.0 - try-require: ^1.0.0 - update-notifier: ^2.5.0 - bin: - superstatic: bin/server - checksum: 63a8c1d818e2d0965fc7fa998508e081f741fffc59248b18d744ca1ec255902568b2351a980c933b746fb717ba8074b9175b49a186ed55ed5ed31871b9857b1d - languageName: node - linkType: hard - -"supports-color@npm:^2.0.0": - version: 2.0.0 - resolution: "supports-color@npm:2.0.0" - checksum: 602538c5812b9006404370b5a4b885d3e2a1f6567d314f8b4a41974ffe7d08e525bf92ae0f9c7030e3b4c78e4e34ace55d6a67a74f1571bc205959f5972f88f0 - languageName: node - linkType: hard - -"supports-color@npm:^3.1.2, supports-color@npm:^3.2.3": - version: 3.2.3 - resolution: "supports-color@npm:3.2.3" - dependencies: - has-flag: ^1.0.0 - checksum: 56afc05fa87d00100d90148c4d0a6e20a0af0d56dca5c54d4d40b2553ee737dab0ca4e8b53c4471afc035227b5b44dfa4824747a7f01ad733173536f7da6fbbb - languageName: node - linkType: hard - -"supports-color@npm:^5.3.0": - version: 5.5.0 - resolution: "supports-color@npm:5.5.0" - dependencies: - has-flag: ^3.0.0 - checksum: 95f6f4ba5afdf92f495b5a912d4abee8dcba766ae719b975c56c084f5004845f6f5a5f7769f52d53f40e21952a6d87411bafe34af4a01e65f9926002e38e1dac - languageName: node - linkType: hard - -"supports-preserve-symlinks-flag@npm:^1.0.0": - version: 1.0.0 - resolution: "supports-preserve-symlinks-flag@npm:1.0.0" - checksum: 53b1e247e68e05db7b3808b99b892bd36fb096e6fba213a06da7fab22045e97597db425c724f2bbd6c99a3c295e1e73f3e4de78592289f38431049e1277ca0ae - languageName: node - linkType: hard - -"syntax-error@npm:^1.1.1": - version: 1.4.0 - resolution: "syntax-error@npm:1.4.0" - dependencies: - acorn-node: ^1.2.0 - checksum: c1c3f048fed1948865fda5e79e11b02addb32da323c9c9fb214d3a933f9fda668e55c848f7c4082514ea4f1cf3dcfab0c7b9c762bfad1306271753c0fcc4b14f - languageName: node - linkType: hard - -"tar@npm:^6.1.11, tar@npm:^6.1.2": - version: 6.1.13 - resolution: "tar@npm:6.1.13" - dependencies: - chownr: ^2.0.0 - fs-minipass: ^2.0.0 - minipass: ^4.0.0 - minizlib: ^2.1.1 - mkdirp: ^1.0.3 - yallist: ^4.0.0 - checksum: 8a278bed123aa9f53549b256a36b719e317c8b96fe86a63406f3c62887f78267cea9b22dc6f7007009738509800d4a4dccc444abd71d762287c90f35b002eb1c - languageName: node - linkType: hard - -"term-size@npm:^1.2.0": - version: 1.2.0 - resolution: "term-size@npm:1.2.0" - dependencies: - execa: ^0.7.0 - checksum: 833aeb21c74d735c6ab63859fec6a7308d8724089b23b6f58e1a21c015058383529222a63074cbf0814a1812621bf11f01e60d5c5afbbfedcc31d115bf54631a - languageName: node - linkType: hard - -"thenify-all@npm:^1.0.0": - version: 1.6.0 - resolution: "thenify-all@npm:1.6.0" - dependencies: - thenify: ">= 3.1.0 < 4" - checksum: dba7cc8a23a154cdcb6acb7f51d61511c37a6b077ec5ab5da6e8b874272015937788402fd271fdfc5f187f8cb0948e38d0a42dcc89d554d731652ab458f5343e - languageName: node - linkType: hard - -"thenify@npm:>= 3.1.0 < 4": - version: 3.3.1 - resolution: "thenify@npm:3.3.1" - dependencies: - any-promise: ^1.0.0 - checksum: 84e1b804bfec49f3531215f17b4a6e50fd4397b5f7c1bccc427b9c656e1ecfb13ea79d899930184f78bc2f57285c54d9a50a590c8868f4f0cef5c1d9f898b05e - languageName: node - linkType: hard - -"throat@npm:^4.1.0": - version: 4.1.0 - resolution: "throat@npm:4.1.0" - checksum: 43519b0cea6d3b2a8fe056fcbc319e289037be67d2204d4d33513d20d6ee9da6255f7ba8c89e2ec8c97b0f188a910b8666def38d1058d2bf4a39613812c36d98 - languageName: node - linkType: hard - -"through2@npm:^2.0.0": - version: 2.0.5 - resolution: "through2@npm:2.0.5" - dependencies: - readable-stream: ~2.3.6 - xtend: ~4.0.1 - checksum: beb0f338aa2931e5660ec7bf3ad949e6d2e068c31f4737b9525e5201b824ac40cac6a337224856b56bd1ddd866334bbfb92a9f57cd6f66bc3f18d3d86fc0fe50 - languageName: node - linkType: hard - -"through@npm:>=2.2.7 <3, through@npm:~2.3.4, through@npm:~2.3.8": - version: 2.3.8 - resolution: "through@npm:2.3.8" - checksum: a38c3e059853c494af95d50c072b83f8b676a9ba2818dcc5b108ef252230735c54e0185437618596c790bbba8fcdaef5b290405981ffa09dce67b1f1bf190cbd - languageName: node - linkType: hard - -"thunkify-wrap@npm:~1.0.4": - version: 1.0.4 - resolution: "thunkify-wrap@npm:1.0.4" - dependencies: - enable: 1 - checksum: ce55d15760d808c30fab75fe29f9a5e317ced7073017b03db16ef45b87adc787efea7cdaa204e5a5644d2b8b120fd4bbea75b2099c1e8e81de6fa9f1389f668a - languageName: node - linkType: hard - -"thunkify@npm:2.1.2, thunkify@npm:^2.1.2": - version: 2.1.2 - resolution: "thunkify@npm:2.1.2" - checksum: 75118f37e7cdb52841675fceb255c532b9637b860168fc617a0d6ef3c0ebe5aa2f1335a54cd034063fa1b0d19454170483b63c500c71b885c08082c224638a5e - languageName: node - linkType: hard - -"tibi-docs@workspace:.": - version: 0.0.0-use.local - resolution: "tibi-docs@workspace:." - dependencies: - docpress: ^0.8.2 - markdown-it-code-include: ./markdown-it-code-include - languageName: unknown - linkType: soft - -"timed-out@npm:^4.0.0": - version: 4.0.1 - resolution: "timed-out@npm:4.0.1" - checksum: 98efc5d6fc0d2a329277bd4d34f65c1bf44d9ca2b14fd267495df92898f522e6f563c5e9e467c418e0836f5ca1f47a84ca3ee1de79b1cc6fe433834b7f02ec54 - languageName: node - linkType: hard - -"timers-browserify@npm:^1.0.1": - version: 1.4.2 - resolution: "timers-browserify@npm:1.4.2" - dependencies: - process: ~0.11.0 - checksum: b7437e228684d8e6e193580d363ffdcd752396c0d1013503f50e412aa86e920248a8627450ad40557443e07ef6b9b602ffc940b3ba06db23774a7ab507e1911d - languageName: node - linkType: hard - -"tiny-lr@npm:^1.1.1": - version: 1.1.1 - resolution: "tiny-lr@npm:1.1.1" - dependencies: - body: ^5.1.0 - debug: ^3.1.0 - faye-websocket: ~0.10.0 - livereload-js: ^2.3.0 - object-assign: ^4.1.0 - qs: ^6.4.0 - checksum: d32912d4ce09ea905649905162f4f76c141523822efe6a54861affe0b2be336b6f30ec244a8a5857aa59f3fb94a029d3eb4a33444de89ddd5118fa4687292fe8 - languageName: node - linkType: hard - -"to-arraybuffer@npm:^1.0.0": - version: 1.0.1 - resolution: "to-arraybuffer@npm:1.0.1" - checksum: 31433c10b388722729f5da04c6b2a06f40dc84f797bb802a5a171ced1e599454099c6c5bc5118f4b9105e7d049d3ad9d0f71182b77650e4fdb04539695489941 - languageName: node - linkType: hard - -"to-fast-properties@npm:^1.0.3": - version: 1.0.3 - resolution: "to-fast-properties@npm:1.0.3" - checksum: bd0abb58c4722851df63419de3f6d901d5118f0440d3f71293ed776dd363f2657edaaf2dc470e3f6b7b48eb84aa411193b60db8a4a552adac30de9516c5cc580 - languageName: node - linkType: hard - -"to-object-path@npm:^0.3.0": - version: 0.3.0 - resolution: "to-object-path@npm:0.3.0" - dependencies: - kind-of: ^3.0.2 - checksum: 9425effee5b43e61d720940fa2b889623f77473d459c2ce3d4a580a4405df4403eec7be6b857455908070566352f9e2417304641ed158dda6f6a365fe3e66d70 - languageName: node - linkType: hard - -"to-regex-range@npm:^2.1.0": - version: 2.1.1 - resolution: "to-regex-range@npm:2.1.1" - dependencies: - is-number: ^3.0.0 - repeat-string: ^1.6.1 - checksum: 46093cc14be2da905cc931e442d280b2e544e2bfdb9a24b3cf821be8d342f804785e5736c108d5be026021a05d7b38144980a61917eee3c88de0a5e710e10320 - languageName: node - linkType: hard - -"to-regex-range@npm:^5.0.1": - version: 5.0.1 - resolution: "to-regex-range@npm:5.0.1" - dependencies: - is-number: ^7.0.0 - checksum: f76fa01b3d5be85db6a2a143e24df9f60dd047d151062d0ba3df62953f2f697b16fe5dad9b0ac6191c7efc7b1d9dcaa4b768174b7b29da89d4428e64bc0a20ed - languageName: node - linkType: hard - -"to-regex@npm:^3.0.1, to-regex@npm:^3.0.2": - version: 3.0.2 - resolution: "to-regex@npm:3.0.2" - dependencies: - define-property: ^2.0.2 - extend-shallow: ^3.0.2 - regex-not: ^1.0.2 - safe-regex: ^1.1.0 - checksum: 4ed4a619059b64e204aad84e4e5f3ea82d97410988bcece7cf6cbfdbf193d11bff48cf53842d88b8bb00b1bfc0d048f61f20f0709e6f393fd8fe0122662d9db4 - languageName: node - linkType: hard - -"token-stream@npm:0.0.1": - version: 0.0.1 - resolution: "token-stream@npm:0.0.1" - checksum: 45b7bb2f582e6fb1098f19386cf5d9c41121f81a371f810cc3459be552c0543ac081302ca3323c3469c3ef95112883d6f0b5544a58c2cb2057e9b815f058b640 - languageName: node - linkType: hard - -"toml@npm:^2.3.2": - version: 2.3.6 - resolution: "toml@npm:2.3.6" - checksum: e1be1ec9dad3049459d0c81e5b7b40ce8356ca5fc27d23cab101551447e22af7fe6d903d19162389ffd50cb3ff4e986374992d4c293da84166fa6307c7c1b5cf - languageName: node - linkType: hard - -"toxic@npm:^1.0.0": - version: 1.0.1 - resolution: "toxic@npm:1.0.1" - dependencies: - lodash: ^4.17.10 - checksum: 47921e401c7fadb4eea5049002555578da4285edaa9d7fed74f16d68dba8b019e8673cbdf179a29c11e025a579878ab9907d41e184797a74bcf0a059f7ad0a24 - languageName: node - linkType: hard - -"trim-newlines@npm:^2.0.0": - version: 2.0.0 - resolution: "trim-newlines@npm:2.0.0" - checksum: 8a288a860f051f585bdda07ffb97e9e0791ca7c5c1c025b6af4badac185f2eed23ccedeb54da2a79e06ead69824d69b6c9c35c7a69c48e07ee56ac76f91c3096 - languageName: node - linkType: hard - -"try-require@npm:^1.0.0": - version: 1.2.1 - resolution: "try-require@npm:1.2.1" - checksum: 9c26a9be5953fa58bdff7ef3c5c598a96ee6a85f67cb8bb3961202775eaf2ac1baceaade9d0c0758e627819d2bdd7070ae4907f0fec5ce1978d81a38b58a09ec - languageName: node - linkType: hard - -"tryor@npm:~0.1.2": - version: 0.1.2 - resolution: "tryor@npm:0.1.2" - checksum: 7c54816fc38a910f6447813419efe7f11f1a36ca536e10579d7555d0363c84aeb824f52f346922e31f4ae6675d1e202192c92f44d9e9a82dec8d07544fc01a24 - languageName: node - linkType: hard - -"tty-browserify@npm:~0.0.0": - version: 0.0.1 - resolution: "tty-browserify@npm:0.0.1" - checksum: 93b745d43fa5a7d2b948fa23be8d313576d1d884b48acd957c07710bac1c0d8ac34c0556ad4c57c73d36e11741763ef66b3fb4fb97b06b7e4d525315a3cd45f5 - languageName: node - linkType: hard - -"typedarray@npm:^0.0.6": - version: 0.0.6 - resolution: "typedarray@npm:0.0.6" - checksum: 33b39f3d0e8463985eeaeeacc3cb2e28bc3dfaf2a5ed219628c0b629d5d7b810b0eb2165f9f607c34871d5daa92ba1dc69f49051cf7d578b4cbd26c340b9d1b1 - languageName: node - linkType: hard - -"typedarray@npm:~0.0.5": - version: 0.0.7 - resolution: "typedarray@npm:0.0.7" - checksum: 29337342f85f0bb1d9aca211d3a15355e9d46a942efcc63fb922e7b9a0ed86e3559e7beb70e362942d0dab4cb5aa3a5f07a6d94d39028e0fe7051c25ffb79679 - languageName: node - linkType: hard - -"uc.micro@npm:^1.0.1, uc.micro@npm:^1.0.5": - version: 1.0.6 - resolution: "uc.micro@npm:1.0.6" - checksum: 6898bb556319a38e9cf175e3628689347bd26fec15fc6b29fa38e0045af63075ff3fea4cf1fdba9db46c9f0cbf07f2348cd8844889dd31ebd288c29fe0d27e7a - languageName: node - linkType: hard - -"uglify-js@npm:2.x.x, uglify-js@npm:^2.6.1": - version: 2.8.29 - resolution: "uglify-js@npm:2.8.29" - dependencies: - source-map: ~0.5.1 - uglify-to-browserify: ~1.0.0 - yargs: ~3.10.0 - dependenciesMeta: - uglify-to-browserify: - optional: true - bin: - uglifyjs: bin/uglifyjs - checksum: 24f2ae09b96bbb56cc3802f575ee2cdbc6822d942c6877ee4a5637e949f269e48f4baa8d193c47324cdfc1cc8e6853e1479d26e228be2412bc0da3649eaedb35 - languageName: node - linkType: hard - -"uglify-js@npm:^3.1.4": - version: 3.17.4 - resolution: "uglify-js@npm:3.17.4" - bin: - uglifyjs: bin/uglifyjs - checksum: 7b3897df38b6fc7d7d9f4dcd658599d81aa2b1fb0d074829dd4e5290f7318dbca1f4af2f45acb833b95b1fe0ed4698662ab61b87e94328eb4c0a0d3435baf924 - languageName: node - linkType: hard - -"uglify-to-browserify@npm:~1.0.0": - version: 1.0.2 - resolution: "uglify-to-browserify@npm:1.0.2" - checksum: cfa7e2c233b33dc952fcf6ddb2a1e04f48b733fc00314d7282447dde0d7cebc7cf0085d4752abbc82127a4b458c2bf66c63bd8a574be3b2faa0effaabd971370 - languageName: node - linkType: hard - -"uglifyify@npm:3.0.4": - version: 3.0.4 - resolution: "uglifyify@npm:3.0.4" - dependencies: - convert-source-map: ~1.1.0 - extend: ^1.2.1 - minimatch: ^3.0.2 - through: ~2.3.4 - uglify-js: 2.x.x - checksum: a98cd8cb57df5dc4ac6816a0c5450e938f40e564c21facffb4fdd91335c703d15019090b7675e4a4b7beff60d576904999d8d5302f5ef2237f9fe5f7e768ed25 - languageName: node - linkType: hard - -"umd@npm:^3.0.0": - version: 3.0.3 - resolution: "umd@npm:3.0.3" - bin: - umd: ./bin/cli.js - checksum: 264302acabbc71ef279cfb832d6bb53096a12618e9ef8465b274c5a3fffa5f4da6cf7b8d024fec53a7114742c132bba9f6a6d4d4b5eca2bb55d556d0c57a9f15 - languageName: node - linkType: hard - -"undeclared-identifiers@npm:^1.1.2": - version: 1.1.3 - resolution: "undeclared-identifiers@npm:1.1.3" - dependencies: - acorn-node: ^1.3.0 - dash-ast: ^1.0.0 - get-assigned-identifiers: ^1.2.0 - simple-concat: ^1.0.0 - xtend: ^4.0.1 - bin: - undeclared-identifiers: bin.js - checksum: e1f2a18d7bf735ec2b9ee464a621d8db72768e75e59334d34d1f7085e21558c621cc105dfd4cc7a0a219b91c43b71fbdea0508cdbe3b3396ed96902c6d5d590e - languageName: node - linkType: hard - -"union-value@npm:^1.0.0": - version: 1.0.1 - resolution: "union-value@npm:1.0.1" - dependencies: - arr-union: ^3.1.0 - get-value: ^2.0.6 - is-extendable: ^0.1.1 - set-value: ^2.0.1 - checksum: a3464097d3f27f6aa90cf103ed9387541bccfc006517559381a10e0dffa62f465a9d9a09c9b9c3d26d0f4cbe61d4d010e2fbd710fd4bf1267a768ba8a774b0ba - languageName: node - linkType: hard - -"unique-filename@npm:^2.0.0": - version: 2.0.1 - resolution: "unique-filename@npm:2.0.1" - dependencies: - unique-slug: ^3.0.0 - checksum: 807acf3381aff319086b64dc7125a9a37c09c44af7620bd4f7f3247fcd5565660ac12d8b80534dcbfd067e6fe88a67e621386dd796a8af828d1337a8420a255f - languageName: node - linkType: hard - -"unique-slug@npm:^3.0.0": - version: 3.0.0 - resolution: "unique-slug@npm:3.0.0" - dependencies: - imurmurhash: ^0.1.4 - checksum: 49f8d915ba7f0101801b922062ee46b7953256c93ceca74303bd8e6413ae10aa7e8216556b54dc5382895e8221d04f1efaf75f945c2e4a515b4139f77aa6640c - languageName: node - linkType: hard - -"unique-string@npm:^1.0.0": - version: 1.0.0 - resolution: "unique-string@npm:1.0.0" - dependencies: - crypto-random-string: ^1.0.0 - checksum: 588f16bd4ec99b5130f237793d1a5694156adde20460366726573238e41e93b739b87987e863792aeb2392b26f8afb292490ace119c82ed12c46816c9c859f5f - languageName: node - linkType: hard - -"unpipe@npm:~1.0.0": - version: 1.0.0 - resolution: "unpipe@npm:1.0.0" - checksum: 4fa18d8d8d977c55cb09715385c203197105e10a6d220087ec819f50cb68870f02942244f1017565484237f1f8c5d3cd413631b1ae104d3096f24fdfde1b4aa2 - languageName: node - linkType: hard - -"unset-value@npm:^1.0.0": - version: 1.0.0 - resolution: "unset-value@npm:1.0.0" - dependencies: - has-value: ^0.3.1 - isobject: ^3.0.0 - checksum: 5990ecf660672be2781fc9fb322543c4aa592b68ed9a3312fa4df0e9ba709d42e823af090fc8f95775b4cd2c9a5169f7388f0cec39238b6d0d55a69fc2ab6b29 - languageName: node - linkType: hard - -"unyield@npm:0.0.1": - version: 0.0.1 - resolution: "unyield@npm:0.0.1" - dependencies: - co: ~3.1.0 - checksum: e60b75a6e02f1c1446e78e137e7112b5b298062e24b28b13f9a6ba8cc4d69c2012c1f0129150af83e5c6f38754abe60c685515a6da527bfc20300ada212579c6 - languageName: node - linkType: hard - -"unzip-response@npm:^2.0.1": - version: 2.0.1 - resolution: "unzip-response@npm:2.0.1" - checksum: 433aa4869a82c0e2bf2896dce8072b723511023515ba97155759efeea7c0e4db8ecfee2fcc0babf168545c2be613aed205d5237423c249d77d0f5327a842c20d - languageName: node - linkType: hard - -"upath@npm:^1.1.1": - version: 1.2.0 - resolution: "upath@npm:1.2.0" - checksum: 4c05c094797cb733193a0784774dbea5b1889d502fc9f0572164177e185e4a59ba7099bf0b0adf945b232e2ac60363f9bf18aac9b2206fb99cbef971a8455445 - languageName: node - linkType: hard - -"update-notifier@npm:^2.5.0": - version: 2.5.0 - resolution: "update-notifier@npm:2.5.0" - dependencies: - boxen: ^1.2.1 - chalk: ^2.0.1 - configstore: ^3.0.0 - import-lazy: ^2.1.0 - is-ci: ^1.0.10 - is-installed-globally: ^0.1.0 - is-npm: ^1.0.0 - latest-version: ^3.0.0 - semver-diff: ^2.0.0 - xdg-basedir: ^3.0.0 - checksum: a9ba50396b7f66ae32897be76165a3b344a15e8605efebf1e0c7bd82a27e3f69b5372c54c2c5e35685ea3918212246fba5faf942f341258d4f4590f7f80a2ce7 - languageName: node - linkType: hard - -"urix@npm:^0.1.0": - version: 0.1.0 - resolution: "urix@npm:0.1.0" - checksum: 4c076ecfbf3411e888547fe844e52378ab5ada2d2f27625139011eada79925e77f7fbf0e4016d45e6a9e9adb6b7e64981bd49b22700c7c401c5fc15f423303b3 - languageName: node - linkType: hard - -"url-join@npm:0.0.1": - version: 0.0.1 - resolution: "url-join@npm:0.0.1" - checksum: f1d75a8fea205337a4310c90f9fa72e4d9204e16c4d2494b553d899420aa0a2bd91af9e5cddade005e536b8058b4eee43d2405c76bc852eb9ebf8f4e0ba3c7ec - languageName: node - linkType: hard - -"url-parse-lax@npm:^1.0.0": - version: 1.0.0 - resolution: "url-parse-lax@npm:1.0.0" - dependencies: - prepend-http: ^1.0.1 - checksum: 03316acff753845329652258c16d1688765ee34f7d242a94dadf9ff6e43ea567ec062cec7aa27c37f76f2c57f95e0660695afff32fb97b527591c7340a3090fa - languageName: node - linkType: hard - -"url@npm:~0.11.0": - version: 0.11.0 - resolution: "url@npm:0.11.0" - dependencies: - punycode: 1.3.2 - querystring: 0.2.0 - checksum: 50d100d3dd2d98b9fe3ada48cadb0b08aa6be6d3ac64112b867b56b19be4bfcba03c2a9a0d7922bfd7ac17d4834e88537749fe182430dfd9b68e520175900d90 - languageName: node - linkType: hard - -"use@npm:^3.1.0": - version: 3.1.1 - resolution: "use@npm:3.1.1" - checksum: 08a130289f5238fcbf8f59a18951286a6e660d17acccc9d58d9b69dfa0ee19aa038e8f95721b00b432c36d1629a9e32a464bf2e7e0ae6a244c42ddb30bdd8b33 - languageName: node - linkType: hard - -"util-deprecate@npm:^1.0.1, util-deprecate@npm:~1.0.1": - version: 1.0.2 - resolution: "util-deprecate@npm:1.0.2" - checksum: 474acf1146cb2701fe3b074892217553dfcf9a031280919ba1b8d651a068c9b15d863b7303cb15bd00a862b498e6cf4ad7b4a08fb134edd5a6f7641681cb54a2 - languageName: node - linkType: hard - -"util@npm:0.10.3": - version: 0.10.3 - resolution: "util@npm:0.10.3" - dependencies: - inherits: 2.0.1 - checksum: bd800f5d237a82caddb61723a6cbe45297d25dd258651a31335a4d5d981fd033cb4771f82db3d5d59b582b187cb69cfe727dc6f4d8d7826f686ee6c07ce611e0 - languageName: node - linkType: hard - -"util@npm:~0.10.1": - version: 0.10.4 - resolution: "util@npm:0.10.4" - dependencies: - inherits: 2.0.3 - checksum: 913f9a90d05a60e91f91af01b8bd37e06bca4cc02d7b49e01089f9d5b78be2fffd61fb1a41b517de7238c5fc7337fa939c62d1fb4eb82e014894c7bee6637aaf - languageName: node - linkType: hard - -"utils-merge@npm:1.0.1": - version: 1.0.1 - resolution: "utils-merge@npm:1.0.1" - checksum: c81095493225ecfc28add49c106ca4f09cdf56bc66731aa8dabc2edbbccb1e1bfe2de6a115e5c6a380d3ea166d1636410b62ef216bb07b3feb1cfde1d95d5080 - languageName: node - linkType: hard - -"valid-url@npm:^1": - version: 1.0.9 - resolution: "valid-url@npm:1.0.9" - checksum: 3ecb030559404441c2cf104cbabab8770efb0f36d117db03d1081052ef133015a68806148ce954bb4dd0b5c42c14b709a88783c93d66b0916cb67ba771c98702 - languageName: node - linkType: hard - -"validate-npm-package-license@npm:^3.0.1": - version: 3.0.4 - resolution: "validate-npm-package-license@npm:3.0.4" - dependencies: - spdx-correct: ^3.0.0 - spdx-expression-parse: ^3.0.0 - checksum: 35703ac889d419cf2aceef63daeadbe4e77227c39ab6287eeb6c1b36a746b364f50ba22e88591f5d017bc54685d8137bc2d328d0a896e4d3fd22093c0f32a9ad - languageName: node - linkType: hard - -"vary@npm:~1.1.2": - version: 1.1.2 - resolution: "vary@npm:1.1.2" - checksum: ae0123222c6df65b437669d63dfa8c36cee20a504101b2fcd97b8bf76f91259c17f9f2b4d70a1e3c6bbcee7f51b28392833adb6b2770b23b01abec84e369660b - languageName: node - linkType: hard - -"vm-browserify@npm:~0.0.1": - version: 0.0.4 - resolution: "vm-browserify@npm:0.0.4" - dependencies: - indexof: 0.0.1 - checksum: 96f216ab040452b4da801c3e759307f10782017e9e7eae8ebd5a93e61340ff46caa4b13839ece52b8947b8e8aca59a285f723b6b7b101d8e46131b804bcf195d - languageName: node - linkType: hard - -"void-elements@npm:^2.0.1": - version: 2.0.1 - resolution: "void-elements@npm:2.0.1" - checksum: 700c07ba9cfa2dff88bb23974b3173118f9ad8107143db9e5d753552be15cf93380954d4e7f7d7bc80e7306c35c3a7fb83ab0ce4d4dcc18abf90ca8b31452126 - languageName: node - linkType: hard - -"ware@npm:1.3.0, ware@npm:^1.2.0, ware@npm:^1.3.0": - version: 1.3.0 - resolution: "ware@npm:1.3.0" - dependencies: - wrap-fn: ^0.1.0 - checksum: 600b7db1f9aef1422aa5656e3877b4fc555a26066d86d5842ee33f02a8948cd601371082f098f9c6d7031c4636439749cd615f67e8343b70a28f1c676c6bba02 - languageName: node - linkType: hard - -"websocket-driver@npm:>=0.5.1": - version: 0.7.4 - resolution: "websocket-driver@npm:0.7.4" - dependencies: - http-parser-js: ">=0.5.1" - safe-buffer: ">=5.1.0" - websocket-extensions: ">=0.1.1" - checksum: fffe5a33fe8eceafd21d2a065661d09e38b93877eae1de6ab5d7d2734c6ed243973beae10ae48c6613cfd675f200e5a058d1e3531bc9e6c5d4f1396ff1f0bfb9 - languageName: node - linkType: hard - -"websocket-extensions@npm:>=0.1.1": - version: 0.1.4 - resolution: "websocket-extensions@npm:0.1.4" - checksum: 5976835e68a86afcd64c7a9762ed85f2f27d48c488c707e67ba85e717b90fa066b98ab33c744d64255c9622d349eedecf728e65a5f921da71b58d0e9591b9038 - languageName: node - linkType: hard - -"which-module@npm:^2.0.0": - version: 2.0.0 - resolution: "which-module@npm:2.0.0" - checksum: 809f7fd3dfcb2cdbe0180b60d68100c88785084f8f9492b0998c051d7a8efe56784492609d3f09ac161635b78ea29219eb1418a98c15ce87d085bce905705c9c - languageName: node - linkType: hard - -"which@npm:^1.2.9": - version: 1.3.1 - resolution: "which@npm:1.3.1" - dependencies: - isexe: ^2.0.0 - bin: - which: ./bin/which - checksum: f2e185c6242244b8426c9df1510e86629192d93c1a986a7d2a591f2c24869e7ffd03d6dac07ca863b2e4c06f59a4cc9916c585b72ee9fa1aa609d0124df15e04 - languageName: node - linkType: hard - -"which@npm:^2.0.1, which@npm:^2.0.2": - version: 2.0.2 - resolution: "which@npm:2.0.2" - dependencies: - isexe: ^2.0.0 - bin: - node-which: ./bin/node-which - checksum: 1a5c563d3c1b52d5f893c8b61afe11abc3bab4afac492e8da5bde69d550de701cf9806235f20a47b5c8fa8a1d6a9135841de2596535e998027a54589000e66d1 - languageName: node - linkType: hard - -"wide-align@npm:^1.1.5": - version: 1.1.5 - resolution: "wide-align@npm:1.1.5" - dependencies: - string-width: ^1.0.2 || 2 || 3 || 4 - checksum: d5fc37cd561f9daee3c80e03b92ed3e84d80dde3365a8767263d03dacfc8fa06b065ffe1df00d8c2a09f731482fcacae745abfbb478d4af36d0a891fad4834d3 - languageName: node - linkType: hard - -"widest-line@npm:^2.0.0": - version: 2.0.1 - resolution: "widest-line@npm:2.0.1" - dependencies: - string-width: ^2.1.1 - checksum: 6245b1f2cff418107f937691d1cafd0e416b9e350aa79e3853dc0759ad20849451d7126c2f06d0a13286d37b44b8e79e4220df09630bce1e4722d9808bc7bfd2 - languageName: node - linkType: hard - -"win-fork@npm:^1.1.1": - version: 1.1.1 - resolution: "win-fork@npm:1.1.1" - bin: - win-fork: ./bin/win-spawn - win-line-endings: ./bin/win-line-endings - win-spawn: ./bin/win-spawn - checksum: 1db0b02494568121fd889bd43def7d2f3fd8629fb1641c5eaa6af2290c32d6d5ad25859583258db875677759f78140e1655469f4bb7eb5b236c6602fc89c87de - languageName: node - linkType: hard - -"window-size@npm:0.1.0": - version: 0.1.0 - resolution: "window-size@npm:0.1.0" - checksum: ca88d06a353e2ab264f68d8684c3e6bb461ac3b2205c372c290785cb4367e57a025d7760a0b030ea6af4daf5884394b78d0b2480e8d6699d8d799d5c65edcbd0 - languageName: node - linkType: hard - -"window-size@npm:^0.1.2": - version: 0.1.4 - resolution: "window-size@npm:0.1.4" - bin: - window-size: cli.js - checksum: 409accca0b1373c69897400e3cc6a56a2acc8a6ba9009f0cd8e4adda4ebf308e50425d3bd375c0c08efb803c8f0b09d84d7266faa05422b3fadfe6ee422d0aef - languageName: node - linkType: hard - -"with@npm:^5.0.0": - version: 5.1.1 - resolution: "with@npm:5.1.1" - dependencies: - acorn: ^3.1.0 - acorn-globals: ^3.0.0 - checksum: 09266872ae4a7c35df39c1d133b40119c5e20459ce712071c63a016350ba3d1aeb80b0ea970a03d6710b69af183feeeea205e25b315fc11e94ea2a4c159c7e2a - languageName: node - linkType: hard - -"wordwrap@npm:0.0.2": - version: 0.0.2 - resolution: "wordwrap@npm:0.0.2" - checksum: 1152eb7f04c3771df4fd8ea817e3945586f6be2e906cd7d95e60248e136a7f506c911cc738f963b7b18f74c215d7fe61f5b276fc82c3cee930abfc61a215afec - languageName: node - linkType: hard - -"wordwrap@npm:^1.0.0": - version: 1.0.0 - resolution: "wordwrap@npm:1.0.0" - checksum: 2a44b2788165d0a3de71fd517d4880a8e20ea3a82c080ce46e294f0b68b69a2e49cff5f99c600e275c698a90d12c5ea32aff06c311f0db2eb3f1201f3e7b2a04 - languageName: node - linkType: hard - -"wrap-ansi@npm:^6.2.0": - version: 6.2.0 - resolution: "wrap-ansi@npm:6.2.0" - dependencies: - ansi-styles: ^4.0.0 - string-width: ^4.1.0 - strip-ansi: ^6.0.0 - checksum: 6cd96a410161ff617b63581a08376f0cb9162375adeb7956e10c8cd397821f7eb2a6de24eb22a0b28401300bf228c86e50617cd568209b5f6775b93c97d2fe3a - languageName: node - linkType: hard - -"wrap-fn@npm:^0.1.0": - version: 0.1.5 - resolution: "wrap-fn@npm:0.1.5" - dependencies: - co: 3.1.0 - checksum: 7b958a014a06f95a0663012cff92eae0cc5ab8beef7fe0dc69ac9af6152bbbf728b0f9e10d414f6877ed71d0f19017a6a115152927b8f1d406bc70b9b207f61a - languageName: node - linkType: hard - -"wrappy@npm:1": - version: 1.0.2 - resolution: "wrappy@npm:1.0.2" - checksum: 159da4805f7e84a3d003d8841557196034155008f817172d4e986bd591f74aa82aa7db55929a54222309e01079a65a92a9e6414da5a6aa4b01ee44a511ac3ee5 - languageName: node - linkType: hard - -"write-file-atomic@npm:^2.0.0": - version: 2.4.3 - resolution: "write-file-atomic@npm:2.4.3" - dependencies: - graceful-fs: ^4.1.11 - imurmurhash: ^0.1.4 - signal-exit: ^3.0.2 - checksum: 2db81f92ae974fd87ab4a5e7932feacaca626679a7c98fcc73ad8fcea5a1950eab32fa831f79e9391ac99b562ca091ad49be37a79045bd65f595efbb8f4596ae - languageName: node - linkType: hard - -"xdg-basedir@npm:^3.0.0": - version: 3.0.0 - resolution: "xdg-basedir@npm:3.0.0" - checksum: 60d613dcb09b1198c70cb442979825531c605ac7861a8a6131304207d2962020dbb23660ac7e1be324fb9e4111a51a6206d875148d3e98df47a7d1869fa1515f - languageName: node - linkType: hard - -"xtend@npm:^4.0.0, xtend@npm:^4.0.1, xtend@npm:^4.0.2, xtend@npm:~4.0.1": - version: 4.0.2 - resolution: "xtend@npm:4.0.2" - checksum: ac5dfa738b21f6e7f0dd6e65e1b3155036d68104e67e5d5d1bde74892e327d7e5636a076f625599dc394330a731861e87343ff184b0047fef1360a7ec0a5a36a - languageName: node - linkType: hard - -"y18n@npm:^3.2.0": - version: 3.2.2 - resolution: "y18n@npm:3.2.2" - checksum: 6154fd7544f8bbf5b18cdf77692ed88d389be49c87238ecb4e0d6a5276446cd2a5c29cc4bdbdddfc7e4e498b08df9d7e38df4a1453cf75eecfead392246ea74a - languageName: node - linkType: hard - -"y18n@npm:^4.0.0": - version: 4.0.3 - resolution: "y18n@npm:4.0.3" - checksum: 014dfcd9b5f4105c3bb397c1c8c6429a9df004aa560964fb36732bfb999bfe83d45ae40aeda5b55d21b1ee53d8291580a32a756a443e064317953f08025b1aa4 - languageName: node - linkType: hard - -"yallist@npm:^2.1.2": - version: 2.1.2 - resolution: "yallist@npm:2.1.2" - checksum: 9ba99409209f485b6fcb970330908a6d41fa1c933f75e08250316cce19383179a6b70a7e0721b89672ebb6199cc377bf3e432f55100da6a7d6e11902b0a642cb - languageName: node - linkType: hard - -"yallist@npm:^4.0.0": - version: 4.0.0 - resolution: "yallist@npm:4.0.0" - checksum: 343617202af32df2a15a3be36a5a8c0c8545208f3d3dfbc6bb7c3e3b7e8c6f8e7485432e4f3b88da3031a6e20afa7c711eded32ddfb122896ac5d914e75848d5 - languageName: node - linkType: hard - -"yargs-parser@npm:^10.0.0": - version: 10.1.0 - resolution: "yargs-parser@npm:10.1.0" - dependencies: - camelcase: ^4.1.0 - checksum: 4cd46207839192785675893ae2d69ebc9acb31237f0f1a4016002fecdd92715656fd44facc27172e437ac503dbd5793f534cb2d412347e525b426ffcac727080 - languageName: node - linkType: hard - -"yargs-parser@npm:^18.1.2": - version: 18.1.3 - resolution: "yargs-parser@npm:18.1.3" - dependencies: - camelcase: ^5.0.0 - decamelize: ^1.2.0 - checksum: 60e8c7d1b85814594d3719300ecad4e6ae3796748b0926137bfec1f3042581b8646d67e83c6fc80a692ef08b8390f21ddcacb9464476c39bbdf52e34961dd4d9 - languageName: node - linkType: hard - -"yargs@npm:^15.0.2": - version: 15.4.1 - resolution: "yargs@npm:15.4.1" - 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 - checksum: 40b974f508d8aed28598087720e086ecd32a5fd3e945e95ea4457da04ee9bdb8bdd17fd91acff36dc5b7f0595a735929c514c40c402416bbb87c03f6fb782373 - languageName: node - linkType: hard - -"yargs@npm:~3.10.0": - version: 3.10.0 - resolution: "yargs@npm:3.10.0" - dependencies: - camelcase: ^1.0.2 - cliui: ^2.1.0 - decamelize: ^1.0.0 - window-size: 0.1.0 - checksum: 73fd1978a311c853ae4c2c2da12642878912a33e4a8e9e8fec00900dc3b5db31a334c337cff04a542ebba7a32f64a9330419ba45249002f45f349a5d41010cab - languageName: node - linkType: hard - -"yargs@npm:~3.27.0": - version: 3.27.0 - resolution: "yargs@npm:3.27.0" - dependencies: - camelcase: ^1.2.1 - cliui: ^2.1.0 - decamelize: ^1.0.0 - os-locale: ^1.4.0 - window-size: ^0.1.2 - y18n: ^3.2.0 - checksum: 267dc77029b53283f8c53c7cde2e60593a519beae130f7985fda02dd79bdf5cd162130bd6b0a7dbac16b166b462e5acc30103b466b4fb1d2c6c3050bf0f87fe7 - languageName: node - linkType: hard diff --git a/drone.yml b/drone.yml deleted file mode 100644 index e69de29..0000000 diff --git a/esbuild.config.js b/esbuild.config.js index dc5ba09..03c25e5 100644 --- a/esbuild.config.js +++ b/esbuild.config.js @@ -1,3 +1,5 @@ +const fs = require("fs") + const resolvePlugin = { name: "resolvePlugin", setup(build) { @@ -29,7 +31,7 @@ const distDir = frontendDir + "/dist" const svelteConfig = require("./svelte.config") const esbuildSvelte = sveltePlugin({ compilerOptions: { - css: "external", + css: false, hydratable: true, dev: (process.argv?.length > 2 ? process.argv[2] : "build") !== "build", }, @@ -68,7 +70,9 @@ const bsMiddleware = [] if (process.argv[2] == "start") { const { createProxyMiddleware } = require("http-proxy-middleware") - const apiBase = process.env.API_BASE || "http://localhost:8080/api/v1/_/" + process.env.NAMESPACE + const dotEnv = fs.readFileSync(__dirname + "/.env", "utf8") + const TIBI_NAMESPACE = dotEnv.match(/TIBI_NAMESPACE=(.*)/)[1] + const apiBase = process.env.API_BASE || "http://localhost:8080/api/v1/_/" + TIBI_NAMESPACE bsMiddleware.push( createProxyMiddleware("/api", { target: apiBase, @@ -77,12 +81,39 @@ if (process.argv[2] == "start") { logLevel: "debug", }) ) + + // if SSR env variable is set + console.log(process.env, "=========================ENV") + if (process.env.SSR) { + // read api/config.yml.env and read SSR_TOKEN variable from it + const configEnv = fs.readFileSync(__dirname + "/api/config.yml.env", "utf8") + const SSR_TOKEN = configEnv.match(/SSR_TOKEN=(.*)/)[1] + + // redirect all other requests to /api/ssr?token=owshwerNwoa&url=... + bsMiddleware.push( + createProxyMiddleware( + function (path, req) { + return !path.match(/\./) + }, + { + target: apiBase, + changeOrigin: true, + logLevel: "debug", + pathRewrite: function (path, req) { + console.log(path) + return "/ssr?token=" + SSR_TOKEN + "&url=" + encodeURIComponent(path) + }, + } + ) + ) + } } module.exports = { sveltePlugin: sveltePlugin, resolvePlugin: resolvePlugin, options: options, + distDir, watch: { path: [__dirname + "/" + frontendDir + "/src/**/*"], }, diff --git a/esbuild.config.server.js b/esbuild.config.server.js index 9604bf1..1ba3891 100644 --- a/esbuild.config.server.js +++ b/esbuild.config.server.js @@ -11,7 +11,7 @@ config.options.plugins = [ config.sveltePlugin({ compilerOptions: { generate: "ssr", - css: "external", + css: false, hydratable: true, dev: (process.argv?.length > 2 ? process.argv[2] : "build") !== "build", }, diff --git a/frontend/src/components/App.svelte b/frontend/src/App.svelte similarity index 77% rename from frontend/src/components/App.svelte rename to frontend/src/App.svelte index 590c723..0e77521 100644 --- a/frontend/src/components/App.svelte +++ b/frontend/src/App.svelte @@ -1,5 +1,5 @@

Hello World

diff --git a/frontend/src/api.ts b/frontend/src/api.ts new file mode 100644 index 0000000..934069f --- /dev/null +++ b/frontend/src/api.ts @@ -0,0 +1,12 @@ +import { apiRequest } from "../../api/hooks/lib/ssr" + +export const api = async ( + endpoint: string, + options?: ApiOptions, + body?: any +): Promise<{ data: T; count: number } | any> => { + let data = await apiRequest(endpoint, options, body) + // @ts-ignore + console.log(data, "data") + return data +} diff --git a/frontend/src/config.ts b/frontend/src/config.ts index 62e4e24..1b420cf 100644 --- a/frontend/src/config.ts +++ b/frontend/src/config.ts @@ -3,7 +3,6 @@ import configClient from "../../api/hooks/config-client" export const apiBaseURL = "/api/" export const release = configClient.release -console.log("Release: ", release) export const sentryDSN = "https://5063f9b5564d0fdece4e47a8e2e63672@sentry.basehosts.de/3" export const sentryTracingOrigins = ["localhost", "project-domain.tld", /^\//] diff --git a/frontend/src/index.ts b/frontend/src/index.ts index b880b01..a628b32 100644 --- a/frontend/src/index.ts +++ b/frontend/src/index.ts @@ -1,5 +1,5 @@ -import App from "./components/App.svelte" -import { location } from "./store" +import App from "./App.svelte" +import { location } from "./lib/store" const publishLocation = (_p?: string) => { let _s: string @@ -17,11 +17,8 @@ const publishLocation = (_p?: string) => { } const newLocation = { - path: - _p || (typeof window !== "undefined" && window.location?.pathname), - search: _p - ? _s - : typeof window !== "undefined" && window.location?.search, + path: _p || (typeof window !== "undefined" && window.location?.pathname), + search: _p ? _s : typeof window !== "undefined" && window.location?.search, hash: _p ? _h : typeof window !== "undefined" && window.location?.hash, push: !!_p, pop: !_p, @@ -35,9 +32,7 @@ if (typeof history !== "undefined") { if (typeof Proxy !== "undefined") { // modern browser const historyApply = (target, thisArg, argumentsList) => { - publishLocation( - argumentsList && argumentsList.length >= 2 && argumentsList[2] - ) + publishLocation(argumentsList && argumentsList.length >= 2 && argumentsList[2]) Reflect.apply(target, thisArg, argumentsList) } @@ -57,11 +52,7 @@ if (typeof history !== "undefined") { publishLocation(url) return pushStateFn.apply(history, arguments) } - history.replaceState = function ( - data: any, - title: string, - url?: string - ) { + history.replaceState = function (data: any, title: string, url?: string) { publishLocation(url) return replaceStateFn.apply(history, arguments) } @@ -83,4 +74,4 @@ const app = new App({ hydrate, }) -export default app \ No newline at end of file +export default app diff --git a/frontend/src/lib/components/pagebuilder/form/Checkbox.svelte b/frontend/src/lib/components/pagebuilder/form/Checkbox.svelte new file mode 100644 index 0000000..2ef46d2 --- /dev/null +++ b/frontend/src/lib/components/pagebuilder/form/Checkbox.svelte @@ -0,0 +1,18 @@ + + + + + diff --git a/frontend/src/lib/components/pagebuilder/form/CheckboxGroup.svelte b/frontend/src/lib/components/pagebuilder/form/CheckboxGroup.svelte new file mode 100644 index 0000000..beb7771 --- /dev/null +++ b/frontend/src/lib/components/pagebuilder/form/CheckboxGroup.svelte @@ -0,0 +1,48 @@ + + +
+

{groupTitle}

+
+ {#each checkboxes as checkbox, i} + + {/each} +
+
+ + diff --git a/frontend/src/lib/components/pagebuilder/form/Datepicker.svelte b/frontend/src/lib/components/pagebuilder/form/Datepicker.svelte new file mode 100644 index 0000000..5a251c5 --- /dev/null +++ b/frontend/src/lib/components/pagebuilder/form/Datepicker.svelte @@ -0,0 +1,133 @@ + + + + +
+
+ +
+
+ + diff --git a/frontend/src/lib/components/pagebuilder/form/Form.svelte b/frontend/src/lib/components/pagebuilder/form/Form.svelte new file mode 100644 index 0000000..dcfb5ac --- /dev/null +++ b/frontend/src/lib/components/pagebuilder/form/Form.svelte @@ -0,0 +1,200 @@ + + +
+

+ {#if formRow.showRowName}{formRow.rowName || ""}{/if} +

+
+ {#each formRow.columns as column, columnIndex} +
+

{column?.title ?? ""}

+ {#if column?.annotation} +

{column?.annotation}

+ {/if} + {#if column.showLabelNumber} + + {/if} + + {#if column?.showTimes} + + {/if} + + {#if column?.showSelect} + + {/if} + + {#if column.showDate} + + {/if} + {#if column.showNumber} + + {/if} + + {#if column.showCheckboxGroup} + + {/if} + + {#if column.showDatePicker} + + {/if} + + {#if column.showMultiSelect} + + + {:else} + + {/if} +
+ {/each} +
+ {/each} +
+ diff --git a/frontend/src/lib/components/pagebuilder/form/FormLabelNumberBlock.svelte b/frontend/src/lib/components/pagebuilder/form/FormLabelNumberBlock.svelte new file mode 100644 index 0000000..0b76ce1 --- /dev/null +++ b/frontend/src/lib/components/pagebuilder/form/FormLabelNumberBlock.svelte @@ -0,0 +1,64 @@ + + +
+ {#each column.labelNumber as outerblock, i} +
+

{outerblock.title}

+
+ {#each outerblock.block as innerBlock} +
+
{innerBlock.label}
+ +
+ {/each} +
+
+ {/each} +
+ + diff --git a/frontend/src/lib/components/pagebuilder/form/Formular.svelte b/frontend/src/lib/components/pagebuilder/form/Formular.svelte new file mode 100644 index 0000000..2940daa --- /dev/null +++ b/frontend/src/lib/components/pagebuilder/form/Formular.svelte @@ -0,0 +1,401 @@ + + +{#if formSend} +
+

Formular erfolgreich gesendet!

+

Vielen Dank für Ihre Anfrage. Wir werden uns in Kürze bei Ihnen melden.

+
+{:else} +
+ {#each col.formRows ?? [] as formRow, i} + {#if innerWidth < 768} + + {:else} + + {/if} + {/each} +
+
+ + +
+ + akzeptieren +
+
+ + + +
+ +{/if} + + diff --git a/frontend/src/lib/components/pagebuilder/form/MobileForm.svelte b/frontend/src/lib/components/pagebuilder/form/MobileForm.svelte new file mode 100644 index 0000000..8217860 --- /dev/null +++ b/frontend/src/lib/components/pagebuilder/form/MobileForm.svelte @@ -0,0 +1,351 @@ + + +
+

+ {#if formRow.showRowName}{formRow.rowName || ""}{/if} +

+
+ {#each formRow.columns as column, columnIndex} +

{column?.title ?? ""}

+ {#if column?.annotation} +

{column?.annotation}

+ {/if} + {#if column.showLabelNumber} +
+ +
+ {/if} + + {#if column?.showTimes} +
+ +
+ {/if} + + {#if column?.showSelect} +
+ +
+ {/if} + + {#if column.showDate} +
+ +
+ {/if} + {#if column.showNumber} +
+ +
+ {/if} + {#if column.showCheckboxGroup} + + {/if} + {#if column.showDatePicker} + + {/if} + + {#if column.showMultiSelect} + + + {:else} + + {/if} +
+
+ {/each} + {/each} + + + + diff --git a/frontend/src/lib/components/pagebuilder/form/Select.svelte b/frontend/src/lib/components/pagebuilder/form/Select.svelte new file mode 100644 index 0000000..277e4d5 --- /dev/null +++ b/frontend/src/lib/components/pagebuilder/form/Select.svelte @@ -0,0 +1,84 @@ + + +