From 49e55a90f7a74a90cee8326d54f71445e738908c Mon Sep 17 00:00:00 2001 From: robin Date: Tue, 13 Feb 2024 16:36:09 +0000 Subject: [PATCH] zwischenstand --- Makefile | 2 + api/assets/dist.yml | 12 + api/collections/backups.yml | 57 +- api/collections/content.yml | 78 +- api/collections/fieldLists/column.yml | 47 +- .../fieldLists/formular/checkboxGroup.yml | 9 +- .../fieldLists/formular/dateInput.yml | 1 + .../fieldLists/formular/datePicker.yml | 52 +- api/collections/fieldLists/formular/form.yml | 113 +- .../fieldLists/formular/labelNumberInput.yml | 16 +- .../fieldLists/formular/multiSelectInput.yml | 17 +- .../fieldLists/formular/numberInput.yml | 1 + .../formular/standardInputProperties.yml | 32 +- .../fieldLists/formular/standardSelect.yml | 58 + .../fieldLists/formular/textInputs.yml | 13 +- .../fieldLists/formular/timeSelect.yml | 45 + .../fieldLists/formular/timesInput.yml | 21 +- api/collections/fieldLists/meta.yml | 16 +- api/collections/fieldLists/row.yml | 27 +- api/collections/fields/active.yml | 16 + api/collections/fields/backup.yml | 3 + api/collections/fields/contentType.yml | 19 + api/collections/fields/emailCC.yml | 11 + api/collections/fields/excludedDays.yml | 40 + api/collections/fields/file.yml | 6 + api/collections/fields/form.yml | 7 + api/collections/fields/from.yml | 13 + api/collections/fields/imageFilter.yml | 37 + .../collections/fields/imageTitle.yml | 0 api/collections/fields/images.yml | 25 + api/collections/fields/manualSort.yml | 11 + api/collections/fields/medialibCardList.yml | 27 + api/collections/fields/medialibSimpleList.yml | 25 + api/collections/fields/medialibTable.yml | 30 + api/collections/fields/mutliupload.yml | 10 + api/collections/fields/pageTitle.yml | 23 + api/collections/fields/quickEditMedialib.yml | 6 + api/collections/fields/rows.yml | 9 + api/collections/fields/text.yml | 9 + api/collections/fields/textIndex.yml | 6 + api/collections/forms.yml | 6 +- api/collections/lighthouse.yml | 61 +- api/collections/lighthouseSubpath.yml | 4 +- api/collections/medialib.yml | 262 +- api/collections/module.yml | 8 +- api/collections/navigation.yml | 131 +- api/config.yml | 13 +- api/hooks/backups/post_create.js | 20 + api/jobs/lighthouse.js | 1 - api/jobs/lighthouse.yml | 14 + api/templates/spa.html | 9 + docker-compose-local.yml | 10 +- docs/README.md | 21 + docs/docpress.json | 9 + docs/markdown-it-code-include/index.js | 106 + docs/markdown-it-code-include/package.json | 24 + .../admin-javascript-kontext/allgemeines.md | 47 + .../collection.meta..eval.md | 9 + .../field.meta..eval.md | 104 + docs/md/begriffe.md | 53 + docs/md/docpress.css | 34 + docs/md/github-dark-dimmed.css | 130 + docs/md/projektkonfig/api-ordner.png | Bin 0 -> 48466 bytes docs/md/projektkonfig/assets.md | 3 + docs/md/projektkonfig/collections.md | 17 + .../projektkonfig/collections/dependsOn.webm | Bin 0 -> 123672 bytes docs/md/projektkonfig/collections/fields.md | 295 + .../collections/fields/datentypen.md | 43 + .../collections/fields/defaultArray.png | Bin 0 -> 47517 bytes .../collections/fields/foreign.png | Bin 0 -> 32745 bytes .../collections/fields/widgets.md | 131 + docs/md/projektkonfig/collections/hooks.md | 112 + .../projektkonfig/collections/imageFilter.md | 29 + docs/md/projektkonfig/collections/indexes.md | 30 + docs/md/projektkonfig/collections/meta.md | 76 + .../projektkonfig/collections/validator.webm | Bin 0 -> 352494 bytes docs/md/projektkonfig/config.yml.md | 34 + docs/md/projektkonfig/dashboard.png | Bin 0 -> 111548 bytes docs/md/projektkonfig/jobs.md | 13 + docs/md/projektkonfig/ordnerstruktur.md | 65 + docs/md/restapi/assets.md | 27 + docs/md/restapi/collection.md | 239 + docs/md/restapi/login.md | 63 + docs/md/restapi/project.md | 99 + docs/md/restapi/user.md | 81 + .../server-javascript-kontext/allgemeines.md | 71 + .../packages/bcrypt.md | 34 + .../packages/charset.md | 17 + .../packages/cookie.md | 39 + .../server-javascript-kontext/packages/db.md | 87 + .../packages/debug.md | 25 + .../server-javascript-kontext/packages/fs.md | 93 + .../packages/http.md | 37 + .../packages/image.md | 39 + .../server-javascript-kontext/packages/jwt.md | 59 + .../server-javascript-kontext/packages/pdf.md | 113 + .../packages/response.md | 18 + .../packages/smtp.md | 32 + .../server-javascript-kontext/packages/tpl.md | 23 + .../packages/user.md | 20 + .../server-javascript-kontext/packages/xml.md | 29 + docs/md/servergrundlagen/entitaeten.md | 26 + docs/md/servergrundlagen/konfiguration.md | 3 + docs/md/servergrundlagen/ssr&htaccess.md | 143 + docs/md/tibi-aufbau.svg | 5 + docs/package.json | 19 + docs/yarn.lock | 7181 +++++++++++++++++ frontend/spa.html | 11 +- frontend/src/App.svelte | 112 +- frontend/src/config.ts | 1 + .../css/components/pagebuilder/form/form.less | 252 + frontend/src/lib/assets/css/main.less | 99 + frontend/src/lib/assets/css/variables.less | 18 + .../fonts/LibreCaslonText-Regular.woff2 | Bin 0 -> 36184 bytes .../libre-franklin-v13-latin-regular.woff2 | Bin 0 -> 14152 bytes frontend/src/lib/components/CookieSet.svelte | 60 + frontend/src/lib/components/Footer.svelte | 123 + frontend/src/lib/components/Header.svelte | 382 + .../src/lib/components/ScrollBottom.svelte | 71 + frontend/src/lib/components/ScrollTop.svelte | 52 + .../components/pagebuilder/GoogleMaps.svelte | 27 + .../lib/components/pagebuilder/Image.svelte | 96 + .../lib/components/pagebuilder/Modules.svelte | 14 + .../components/pagebuilder/Pagebuilder.svelte | 158 + .../lib/components/pagebuilder/Text.svelte | 10 + .../pagebuilder/form/Checkbox.svelte | 4 - .../pagebuilder/form/CheckboxGroup.svelte | 7 +- .../pagebuilder/form/Datepicker.svelte | 407 +- .../components/pagebuilder/form/Form.svelte | 200 - .../pagebuilder/form/FormColumn.svelte | 469 ++ .../pagebuilder/form/FormColumnWrapper.svelte | 56 + .../form/FormLabelNumberBlock.svelte | 6 +- .../pagebuilder/form/Formular.svelte | 416 +- .../pagebuilder/form/MobileForm.svelte | 351 - .../components/pagebuilder/form/Select.svelte | 70 +- frontend/src/lib/functions/eventBus.ts | 13 + .../fetch/loadContentAndSetStores.ts | 16 + .../fetch/loadLibraryAndSetStores.ts | 12 + .../src/lib/functions/fetch/loadModules.ts | 11 + .../fetch/loadNavigationAndSetStores.ts | 15 + .../components/form/validateFields.ts | 3 + frontend/src/lib/functions/utils.ts | 14 + frontend/src/lib/store.ts | 9 +- frontend/src/routes/NotFound.svelte | 56 + frontend/src/routes/Page.svelte | 119 + package.json | 6 +- types/content.d.ts | 12 +- types/formComponent.d.ts | 206 +- types/navigation.d.ts | 7 +- vendor/svelte-routing/.gitattributes | 1 + vendor/svelte-routing/.prettierrc | 9 + vendor/svelte-routing/CHANGELOG.md | 309 + vendor/svelte-routing/CODE_OF_CONDUCT.md | 128 + vendor/svelte-routing/LICENSE | 20 + vendor/svelte-routing/README.md | 234 + vendor/svelte-routing/package.json | 34 + vendor/svelte-routing/src/Link.svelte | 50 + vendor/svelte-routing/src/Route.svelte | 59 + vendor/svelte-routing/src/Router.svelte | 145 + vendor/svelte-routing/src/actions.js | 87 + vendor/svelte-routing/src/contexts.js | 9 + vendor/svelte-routing/src/history.js | 109 + vendor/svelte-routing/src/index.js | 6 + vendor/svelte-routing/src/utils.js | 278 + vendor/svelte-routing/types/Link.d.ts | 24 + vendor/svelte-routing/types/Route.d.ts | 37 + vendor/svelte-routing/types/Router.d.ts | 20 + vendor/svelte-routing/types/actions.d.ts | 2 + vendor/svelte-routing/types/ambient.d.ts | 38 + vendor/svelte-routing/types/contexts.d.ts | 11 + vendor/svelte-routing/types/functions.d.ts | 14 + vendor/svelte-routing/types/index.d.ts | 8 + yarn.lock | 92 +- 173 files changed, 15832 insertions(+), 1359 deletions(-) create mode 100644 api/assets/dist.yml create mode 100644 api/collections/fieldLists/formular/standardSelect.yml create mode 100644 api/collections/fieldLists/formular/timeSelect.yml create mode 100644 api/collections/fields/active.yml create mode 100644 api/collections/fields/backup.yml create mode 100644 api/collections/fields/contentType.yml create mode 100644 api/collections/fields/emailCC.yml create mode 100644 api/collections/fields/excludedDays.yml create mode 100644 api/collections/fields/file.yml create mode 100644 api/collections/fields/form.yml create mode 100644 api/collections/fields/from.yml create mode 100644 api/collections/fields/imageFilter.yml rename types/modules.d.ts => api/collections/fields/imageTitle.yml (100%) create mode 100644 api/collections/fields/images.yml create mode 100644 api/collections/fields/manualSort.yml create mode 100644 api/collections/fields/medialibCardList.yml create mode 100644 api/collections/fields/medialibSimpleList.yml create mode 100644 api/collections/fields/medialibTable.yml create mode 100644 api/collections/fields/mutliupload.yml create mode 100644 api/collections/fields/pageTitle.yml create mode 100644 api/collections/fields/quickEditMedialib.yml create mode 100644 api/collections/fields/rows.yml create mode 100644 api/collections/fields/text.yml create mode 100644 api/collections/fields/textIndex.yml create mode 100644 api/jobs/lighthouse.yml create mode 100644 docs/README.md create mode 100644 docs/docpress.json create mode 100644 docs/markdown-it-code-include/index.js create mode 100644 docs/markdown-it-code-include/package.json create mode 100644 docs/md/admin-javascript-kontext/allgemeines.md create mode 100644 docs/md/admin-javascript-kontext/collection.meta..eval.md create mode 100644 docs/md/admin-javascript-kontext/field.meta..eval.md create mode 100644 docs/md/begriffe.md create mode 100644 docs/md/docpress.css create mode 100644 docs/md/github-dark-dimmed.css create mode 100644 docs/md/projektkonfig/api-ordner.png create mode 100644 docs/md/projektkonfig/assets.md create mode 100644 docs/md/projektkonfig/collections.md create mode 100644 docs/md/projektkonfig/collections/dependsOn.webm create mode 100644 docs/md/projektkonfig/collections/fields.md create mode 100644 docs/md/projektkonfig/collections/fields/datentypen.md create mode 100644 docs/md/projektkonfig/collections/fields/defaultArray.png create mode 100644 docs/md/projektkonfig/collections/fields/foreign.png create mode 100644 docs/md/projektkonfig/collections/fields/widgets.md create mode 100644 docs/md/projektkonfig/collections/hooks.md create mode 100644 docs/md/projektkonfig/collections/imageFilter.md create mode 100644 docs/md/projektkonfig/collections/indexes.md create mode 100644 docs/md/projektkonfig/collections/meta.md create mode 100644 docs/md/projektkonfig/collections/validator.webm create mode 100644 docs/md/projektkonfig/config.yml.md create mode 100644 docs/md/projektkonfig/dashboard.png create mode 100644 docs/md/projektkonfig/jobs.md create mode 100644 docs/md/projektkonfig/ordnerstruktur.md create mode 100644 docs/md/restapi/assets.md create mode 100644 docs/md/restapi/collection.md create mode 100644 docs/md/restapi/login.md create mode 100644 docs/md/restapi/project.md create mode 100644 docs/md/restapi/user.md create mode 100644 docs/md/server-javascript-kontext/allgemeines.md create mode 100644 docs/md/server-javascript-kontext/packages/bcrypt.md create mode 100644 docs/md/server-javascript-kontext/packages/charset.md create mode 100644 docs/md/server-javascript-kontext/packages/cookie.md create mode 100644 docs/md/server-javascript-kontext/packages/db.md create mode 100644 docs/md/server-javascript-kontext/packages/debug.md create mode 100644 docs/md/server-javascript-kontext/packages/fs.md create mode 100644 docs/md/server-javascript-kontext/packages/http.md create mode 100644 docs/md/server-javascript-kontext/packages/image.md create mode 100644 docs/md/server-javascript-kontext/packages/jwt.md create mode 100644 docs/md/server-javascript-kontext/packages/pdf.md create mode 100644 docs/md/server-javascript-kontext/packages/response.md create mode 100644 docs/md/server-javascript-kontext/packages/smtp.md create mode 100644 docs/md/server-javascript-kontext/packages/tpl.md create mode 100644 docs/md/server-javascript-kontext/packages/user.md create mode 100644 docs/md/server-javascript-kontext/packages/xml.md create mode 100644 docs/md/servergrundlagen/entitaeten.md create mode 100644 docs/md/servergrundlagen/konfiguration.md create mode 100644 docs/md/servergrundlagen/ssr&htaccess.md create mode 100644 docs/md/tibi-aufbau.svg create mode 100644 docs/package.json create mode 100644 docs/yarn.lock create mode 100644 frontend/src/lib/assets/css/components/pagebuilder/form/form.less create mode 100644 frontend/src/lib/assets/css/main.less create mode 100644 frontend/src/lib/assets/css/variables.less create mode 100644 frontend/src/lib/assets/fonts/LibreCaslonText-Regular.woff2 create mode 100644 frontend/src/lib/assets/fonts/libre-franklin-v13-latin-regular.woff2 create mode 100644 frontend/src/lib/components/CookieSet.svelte create mode 100644 frontend/src/lib/components/Footer.svelte create mode 100644 frontend/src/lib/components/Header.svelte create mode 100644 frontend/src/lib/components/ScrollBottom.svelte create mode 100644 frontend/src/lib/components/ScrollTop.svelte create mode 100644 frontend/src/lib/components/pagebuilder/GoogleMaps.svelte create mode 100644 frontend/src/lib/components/pagebuilder/Image.svelte create mode 100644 frontend/src/lib/components/pagebuilder/Modules.svelte create mode 100644 frontend/src/lib/components/pagebuilder/Pagebuilder.svelte create mode 100644 frontend/src/lib/components/pagebuilder/Text.svelte delete mode 100644 frontend/src/lib/components/pagebuilder/form/Form.svelte create mode 100644 frontend/src/lib/components/pagebuilder/form/FormColumn.svelte create mode 100644 frontend/src/lib/components/pagebuilder/form/FormColumnWrapper.svelte delete mode 100644 frontend/src/lib/components/pagebuilder/form/MobileForm.svelte create mode 100644 frontend/src/lib/functions/eventBus.ts create mode 100644 frontend/src/lib/functions/fetch/loadContentAndSetStores.ts create mode 100644 frontend/src/lib/functions/fetch/loadLibraryAndSetStores.ts create mode 100644 frontend/src/lib/functions/fetch/loadModules.ts create mode 100644 frontend/src/lib/functions/fetch/loadNavigationAndSetStores.ts create mode 100644 frontend/src/lib/functions/utils.ts create mode 100644 frontend/src/routes/NotFound.svelte create mode 100644 frontend/src/routes/Page.svelte create mode 100644 vendor/svelte-routing/.gitattributes create mode 100644 vendor/svelte-routing/.prettierrc create mode 100644 vendor/svelte-routing/CHANGELOG.md create mode 100644 vendor/svelte-routing/CODE_OF_CONDUCT.md create mode 100644 vendor/svelte-routing/LICENSE create mode 100644 vendor/svelte-routing/README.md create mode 100644 vendor/svelte-routing/package.json create mode 100644 vendor/svelte-routing/src/Link.svelte create mode 100644 vendor/svelte-routing/src/Route.svelte create mode 100644 vendor/svelte-routing/src/Router.svelte create mode 100644 vendor/svelte-routing/src/actions.js create mode 100644 vendor/svelte-routing/src/contexts.js create mode 100644 vendor/svelte-routing/src/history.js create mode 100644 vendor/svelte-routing/src/index.js create mode 100644 vendor/svelte-routing/src/utils.js create mode 100644 vendor/svelte-routing/types/Link.d.ts create mode 100644 vendor/svelte-routing/types/Route.d.ts create mode 100644 vendor/svelte-routing/types/Router.d.ts create mode 100644 vendor/svelte-routing/types/actions.d.ts create mode 100644 vendor/svelte-routing/types/ambient.d.ts create mode 100644 vendor/svelte-routing/types/contexts.d.ts create mode 100644 vendor/svelte-routing/types/functions.d.ts create mode 100644 vendor/svelte-routing/types/index.d.ts diff --git a/Makefile b/Makefile index c4b2ddd..601f513 100644 --- a/Makefile +++ b/Makefile @@ -10,6 +10,8 @@ help: ## show this help @echo MAKE TARGETS @grep -h -E '^[a-zA-Z_-]+:.*?## .*$$' $(MAKEFILE_LIST) | awk 'BEGIN {FS = ":.*?## "}; {printf "\033[36m%-30s\033[0m %s\n", $$1, $$2}' + + docker-up: ## bring docker compose stack up in background $(DOCKER_COMPOSE) --profile tibi up -d diff --git a/api/assets/dist.yml b/api/assets/dist.yml new file mode 100644 index 0000000..48c6460 --- /dev/null +++ b/api/assets/dist.yml @@ -0,0 +1,12 @@ +# 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 0d6051a..55288cd 100644 --- a/api/collections/backups.yml +++ b/api/collections/backups.yml @@ -41,22 +41,30 @@ fields: - name: collectionName type: string meta: - label: Collection Name + label: + de: Collection Name + en: Collection Name - name: entryId type: string meta: - label: Entry ID + label: + de: Entry ID + en: Entry ID - name: versionNr type: number meta: - label: Version Nr + label: + de: Version Nr + en: Version Nr - name: manipulatedBy type: string meta: - label: Manipulated By + label: + de: Manipulated By + en: Manipulated By - name: eventDescription type: string @@ -65,38 +73,59 @@ fields: widget: select choices: - id: create - name: Create + name: + de: Erstellt + en: Create - id: update - name: Update + name: + de: Update + en: Update - id: delete - name: Delete + name: + de: Gelöscht + en: Delete - id: recreate - name: Recreate + name: + de: Wiederhergestellt + en: Recreate - id: activate - name: Activate + name: + de: Aktiviert + en: Activate - name: updateLogs type: object[] meta: - label: Veränderungen + label: + de: Veränderungen + en: Update Logs subFields: - name: field type: string meta: - label: Feldname + label: + de: Feldname + en: Fieldname - name: previous type: string meta: - label: Vorheriger Wert + label: + de: Vorheriger Wert + en: Previous Value - name: current type: string meta: - label: Aktueller Wert + label: + + de: Aktueller Wert + en: Current Value - name: entry type: object meta: - label: Entry + label: + de: Eintrag + en: Entry diff --git a/api/collections/content.yml b/api/collections/content.yml index a12c79c..403af0e 100644 --- a/api/collections/content.yml +++ b/api/collections/content.yml @@ -37,7 +37,6 @@ meta: tablist: activeTab: general - tabs: - name: general label: Allgemein @@ -124,8 +123,12 @@ fields: - type: string name: path meta: - label: Pfad - helperText: "Ein Pfad sollte mit einem / starten und ohne eins enden." + label: + de: Pfad + en: Path + helperText: + de: "Ein Pfad sollte mit einem / starten und ohne eins enden." + en: "A path should start with a / and end without one." containerProps: layout: size: @@ -133,73 +136,20 @@ fields: 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" + - !include fields/active.yml + - !include fields/contentType.yml - - 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 + - !include fields/pageTitle.yml + - !include fields/rows.yml - name: meta type: object meta: - label: Meta Agaben + label: + de: Meta Agaben + en: Meta Data 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. + - !include fields/manualSort.yml diff --git a/api/collections/fieldLists/column.yml b/api/collections/fieldLists/column.yml index f13b7ec..27afd5f 100644 --- a/api/collections/fieldLists/column.yml +++ b/api/collections/fieldLists/column.yml @@ -1,16 +1,49 @@ -# attribute auf column ebene - - name: contentType type: string meta: - label: "" + label: + de: Inhaltstyp + en: Content Type widget: select choices: - - name: Bild - id: image + - name: + de: Bilder + en: Images + id: images - - name: Modul Import + - name: + de: Modul Import + en: Module Import id: moduleImport + - name: + de: Formular + en: form + id: form - - name: Text + - name: + de: Text + en: Text id: text + - name: + de: Google Maps + en: Google Maps + id: googleMaps +- !include ../fields/images.yml + +- name: moduleImport + type: string + meta: + label: + de: Modul Import + en: Module Import + dependsOn: + eval: $parent.contentType == 'moduleImport' || $parent.contentType == 'form' + widget: foreignKey + foreign: + collection: module + id: id + subNavigation: 0 + render: + defaultCollectionViews: true + +- !include ../fields/text.yml diff --git a/api/collections/fieldLists/formular/checkboxGroup.yml b/api/collections/fieldLists/formular/checkboxGroup.yml index 615e4b5..2f9d955 100644 --- a/api/collections/fieldLists/formular/checkboxGroup.yml +++ b/api/collections/fieldLists/formular/checkboxGroup.yml @@ -13,12 +13,17 @@ subFields: - name: groupTitle type: string meta: - label: Checkbox Gruppe Titel + label: + de: Gruppe Titel + en: Group title - name: checkboxes type: object[] meta: - label: Checkbox Gruppe + label: + + de: Checkbox Gruppe + en: Checkbox Group direction: row widget: containerLessObjectArray subFields: diff --git a/api/collections/fieldLists/formular/dateInput.yml b/api/collections/fieldLists/formular/dateInput.yml index 1a07b6a..ef8902a 100644 --- a/api/collections/fieldLists/formular/dateInput.yml +++ b/api/collections/fieldLists/formular/dateInput.yml @@ -11,6 +11,7 @@ meta: eval: $parent?.inputWidgets?.includes('defaultCalendar') subFields: - name: standardInputProperties + type: object meta: widget: containerLessObject subFields: !include standardInputProperties.yml diff --git a/api/collections/fieldLists/formular/datePicker.yml b/api/collections/fieldLists/formular/datePicker.yml index f1b54ce..1977934 100644 --- a/api/collections/fieldLists/formular/datePicker.yml +++ b/api/collections/fieldLists/formular/datePicker.yml @@ -10,29 +10,25 @@ subFields: - name: props type: object meta: - label: Datumauswahl Eigenschaften + label: + de: Datumauswahl Eigenschaften + en: Date selection properties subFields: - name: allowedDateRanges type: object[] meta: - label: Erlaubte Datumsbereiche + label: + de: Erlaubte Datumsbereiche + en: Allowed date ranges widget: containerLessObjectArray subFields: - - name: from - type: date - meta: - label: Von - widget: date - containerProps: - layout: - size: - default: "col-6" - small: "col-12" - large: "col-6" + - !include ../../fields/from.yml - name: to type: date meta: - label: Bis + label: + de: Bis + en: To widget: date containerProps: layout: @@ -41,34 +37,10 @@ subFields: 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 + - !include ../../fields/excludedDays.yml - name: standardInputProperties + type: object meta: widget: containerLessObject subFields: !include standardInputProperties.yml diff --git a/api/collections/fieldLists/formular/form.yml b/api/collections/fieldLists/formular/form.yml index 62af1aa..a462a0a 100644 --- a/api/collections/fieldLists/formular/form.yml +++ b/api/collections/fieldLists/formular/form.yml @@ -27,17 +27,7 @@ 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" +- !include ../../fields/emailCC.yml - name: emailIntroduction type: string @@ -49,10 +39,22 @@ de: "Bsp: Hallo xyz, sie haben eine neue Kaufanfrage erhalten!" en: "E.g.: Hello xyz, you have received a new purchase request!" +- name: sendFormBtnText + type: string + meta: + label: + de: Formular Absenden Button Text + en: Form Submit Button Text + helperText: + de: "Bsp: Absenden" + en: "E.g.: Submit" + - name: rows type: object[] meta: - label: Zeile + label: + de: Zeile + en: Row widget: grid addElementLabel: Zeile Hinzufügen @@ -60,7 +62,9 @@ - name: title type: string meta: - label: Zeilenname + label: + de: Zeilenname + en: Row name 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!" @@ -68,7 +72,9 @@ - name: emailTitle type: string meta: - label: Email Abschnitt Titel + label: + de: Email Abschnitt Titel + en: Email section title 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!" @@ -77,16 +83,38 @@ type: object[] meta: - label: Spalte - addElementLabel: Spalte hinzufügen + label: + de: Spalte + en: Column + addElementLabel: + de: Spalte hinzufügen + en: Add column widget: grid direction: horizontal subFields: - name: title type: string meta: - label: Überschrift - helperText: Optional + label: + de: Überschrift + en: Headline + helperText: + de: Optional + en: Optional + + - name: emailTitle + type: string + meta: + label: + de: Email Abschnitt Titel + en: Email section title + + - name: annotation + type: string + meta: + label: + de: Zusatzinformation + en: Additional information - name: inputWidgets type: string[] @@ -96,33 +124,63 @@ en: Displayed input fields widget: selectArray choices: - - name: Nummernblock + - name: + de: Nummernblock + en: Number block id: labelNumber - - name: Zeitenauswahlfeld + - name: + de: Zeitenauswahlfeld + en: Time selection field id: times - - name: Auswahlfeld + - name: + de: Auswahlfeld + en: Selection field id: select - - name: Datumsauswahl - Standard Kalender + - name: + de: Datumsauswahl - Standard Kalender + en: Date selection - Standard calendar id: defaultCalendar - - name: Datumauswahl - Custom Kalender + - name: + de: Datumauswahl - Custom Kalender + en: Date selection - Custom calendar id: customCalendar - - name: Nummerfeld + - name: + de: Nummerfeld + en: Number field id: number - - name: Checkbox Gruppe + - name: + de: Checkbox Gruppe + en: Checkbox group id: checkboxGroup - - name: Mehrfachauswahl + - name: + de: Mehrfachauswahl + en: Multiple selection id: multiSelect - - name: Textfeld + - name: + de: Textfeld + en: Text field id: text + - name: + de: Zeitenauswahl + en: Time selection + id: timeSelect + + - name: + de: Standardauswahl + en: Standard selection + id: standardSelect + + - !include standardSelect.yml + - !include labelNumberInput.yml - !include timesInput.yml - !include dateInput.yml @@ -131,3 +189,4 @@ - !include datePicker.yml - !include multiSelectInput.yml - !include textInputs.yml + - !include timeSelect.yml diff --git a/api/collections/fieldLists/formular/labelNumberInput.yml b/api/collections/fieldLists/formular/labelNumberInput.yml index 2d3b944..eaec506 100644 --- a/api/collections/fieldLists/formular/labelNumberInput.yml +++ b/api/collections/fieldLists/formular/labelNumberInput.yml @@ -1,7 +1,9 @@ name: labelNumberInput type: object[] meta: - label: Nummer block + label: + de: Nummer block + en: Number block dependsOn: eval: $parent?.inputWidgets?.includes('labelNumber') helperText: @@ -12,7 +14,9 @@ subFields: - name: group type: number meta: - label: Gruppe + label: + de: Gruppe + en: Group 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. @@ -34,7 +38,9 @@ subFields: - name: emailName type: string meta: - label: Email Name + label: + de: Email Name + en: Email name containerProps: layout: size: @@ -62,7 +68,9 @@ subFields: - name: emailName type: string meta: - label: Email Name + label: + de: Email Name + en: Email name containerProps: layout: size: diff --git a/api/collections/fieldLists/formular/multiSelectInput.yml b/api/collections/fieldLists/formular/multiSelectInput.yml index d2af23d..d8b0315 100644 --- a/api/collections/fieldLists/formular/multiSelectInput.yml +++ b/api/collections/fieldLists/formular/multiSelectInput.yml @@ -8,6 +8,7 @@ meta: eval: $parent?.inputWidgets?.includes('multiSelect') subFields: - name: standardInputProperties + type: object meta: widget: containerLessObject subFields: !include standardInputProperties.yml @@ -15,24 +16,32 @@ subFields: - name: options type: object[] meta: - label: Mehrfachauswahl Optionen + label: + de: Mehrfachauswahl Optionen + en: Multi Select Options direction: row widget: containerLessObjectArray subFields: - name: name type: string meta: - label: Name + label: + de: Name + en: Name - name: props type: object meta: - label: Mehrfachauswahl Eigenschaften + label: + de: Mehrfachauswahl Eigenschaften + en: Multi Select Properties subFields: - name: additionalAddableValues type: boolean meta: - label: Zusätzliche hinzufügbare Werte + label: + de: Zusätzliche hinzufügbare Werte + en: Additional addable values containerProps: layout: size: diff --git a/api/collections/fieldLists/formular/numberInput.yml b/api/collections/fieldLists/formular/numberInput.yml index b8cb6fc..38e8ff6 100644 --- a/api/collections/fieldLists/formular/numberInput.yml +++ b/api/collections/fieldLists/formular/numberInput.yml @@ -8,6 +8,7 @@ meta: eval: $parent?.inputWidgets?.includes('number') subFields: - name: standardInputProperties + type: object meta: widget: containerLessObject subFields: !include standardInputProperties.yml diff --git a/api/collections/fieldLists/formular/standardInputProperties.yml b/api/collections/fieldLists/formular/standardInputProperties.yml index 27299f9..5b22e01 100644 --- a/api/collections/fieldLists/formular/standardInputProperties.yml +++ b/api/collections/fieldLists/formular/standardInputProperties.yml @@ -1,7 +1,9 @@ - name: emailTitle type: string meta: - label: Email Titel + label: + de: Email Titel + en: Email title containerProps: layout: size: @@ -12,7 +14,9 @@ - name: placeholder type: string meta: - label: Platzhalter + label: + de: Platzhalter + en: Placeholder containerProps: layout: size: @@ -23,7 +27,9 @@ - name: notRequired type: boolean meta: - label: nicht Notwendig + label: + de: nicht Notwendig + en: not required containerProps: layout: size: @@ -34,7 +40,9 @@ - name: fieldOrder type: number meta: - label: Reihenfolge + label: + de: Reihenfolge + en: Order 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. @@ -44,8 +52,20 @@ default: "col-6" small: "col-12" large: "col-6" + - name: textTitle type: string meta: - label: Text Titel - helperText: Alternative zu textPlaceholder + label: + de: Text Titel + en: Text title + helperText: + de: Alternative zu textPlaceholder, steht dann über dem Inputfeld + en: Alternative to textPlaceholder, then stands above the input field + +- name: groupTitle + type: string + meta: + label: + de: Gruppe Titel + en: Group title diff --git a/api/collections/fieldLists/formular/standardSelect.yml b/api/collections/fieldLists/formular/standardSelect.yml new file mode 100644 index 0000000..adb3098 --- /dev/null +++ b/api/collections/fieldLists/formular/standardSelect.yml @@ -0,0 +1,58 @@ +name: standardSelect +type: object +meta: + label: Standardauswahl + dependsOn: + eval: $parent?.inputWidgets?.includes('standardSelect') +subFields: + - name: standardInputProperties + type: object + meta: + widget: containerLessObject + subFields: !include standardInputProperties.yml + + - name: selectEntries + type: object[] + meta: + label: + de: Auswahleingabe Möglichkeiten + en: Selection input options + widget: containerLessObjectArray + addElementLabel: Auswahleingabe hinzufügen + direction: horizontal + subFields: + - name: shownValue + type: string + meta: + label: + de: Angezeigter Wert + en: Displayed value + containerProps: + layout: + size: + default: "col-6" + small: "col-12" + large: "col-6" + + - name: value + type: string + meta: + label: + de: per Email gesendeter Wert + en: Value sent by email + containerProps: + layout: + size: + default: "col-6" + small: "col-12" + large: "col-6" + + - name: defaultValue + type: boolean + meta: + label: + de: Standardwert + en: Default value + helperText: + de: "Wird dieser Wert ausgewählt, wird er als Standardwert gesetzt" + en: "If this value is selected, it will be set as the default value" diff --git a/api/collections/fieldLists/formular/textInputs.yml b/api/collections/fieldLists/formular/textInputs.yml index c4782a5..0ff2dc0 100644 --- a/api/collections/fieldLists/formular/textInputs.yml +++ b/api/collections/fieldLists/formular/textInputs.yml @@ -7,6 +7,7 @@ meta: eval: $parent?.inputWidgets?.includes('text') subFields: - name: standardInputProperties + type: object meta: widget: containerLessObject subFields: !include standardInputProperties.yml @@ -14,7 +15,9 @@ subFields: - name: textArea type: boolean meta: - label: Großes Textfeld + label: + de: Großes Textfeld + en: Large text field containerProps: layout: size: @@ -25,7 +28,9 @@ subFields: - name: emailValidation type: boolean meta: - label: E-Mail-Validierung + label: + de: E-Mail-Validierung + en: E-mail validation containerProps: layout: size: @@ -36,7 +41,9 @@ subFields: - name: telValidation type: boolean meta: - label: Telefon-Validierung + label: + de: Telefon-Validierung + en: Phone validation containerProps: layout: size: diff --git a/api/collections/fieldLists/formular/timeSelect.yml b/api/collections/fieldLists/formular/timeSelect.yml new file mode 100644 index 0000000..06b2035 --- /dev/null +++ b/api/collections/fieldLists/formular/timeSelect.yml @@ -0,0 +1,45 @@ +name: timeSelect +type: object +meta: + label: Zeitenwahl + dependsOn: + eval: $parent?.inputWidgets?.includes('timeSelect') +subFields: + - name: standardInputProperties + type: object + meta: + widget: containerLessObject + subFields: !include standardInputProperties.yml + + - name: selectEntries + type: object[] + meta: + label: Auswahleingabe + widget: containerLessObjectArray + helperText: "Die Angaben werden in folgendes Übersetzt: Anfangspunkt - Endpunkt" + direction: horizontal + + subFields: + - name: leftSide + type: string + meta: + label: Anfangspunkt + helperText: Bspw. 14:30 + containerProps: + layout: + size: + default: "col-6" + small: "col-12" + large: "col-6" + + - name: rightSide + type: string + meta: + label: Endpunkt + helperText: Bspw. 15:30 + containerProps: + layout: + size: + default: "col-6" + small: "col-12" + large: "col-6" diff --git a/api/collections/fieldLists/formular/timesInput.yml b/api/collections/fieldLists/formular/timesInput.yml index 559e8e4..6d8aef8 100644 --- a/api/collections/fieldLists/formular/timesInput.yml +++ b/api/collections/fieldLists/formular/timesInput.yml @@ -14,8 +14,12 @@ subFields: - name: times type: object[] meta: - label: Zeitenangabe - helperText: "Die Angaben werden in folgendes Übersetzt: Anfangspunkt - Endpunkt" + label: + de: Zeitenauswahl Möglichkeiten + en: Time selection options + helperText: + de: "Die Angaben werden in folgendes Übersetzt: Anfangspunkt - Endpunkt" + en: "The information is translated into the following: starting point - end point" direction: horizontal widget: containerLessObjectArray @@ -23,8 +27,12 @@ subFields: - name: from type: string meta: - label: Anfangspunkt - helperText: Bspw. 14:30 + label: + de: Anfangspunkt + en: Starting point + helperText: + de: Bspw. 14:30 + en: E.g. 14:30 containerProps: layout: size: @@ -36,7 +44,9 @@ subFields: type: string meta: label: Endpunkt - helperText: Bspw. 15:30 + helperText: + de: Bspw. 15:30 + en: E.g. 15:30 containerProps: layout: size: @@ -44,6 +54,7 @@ subFields: small: "col-12" large: "col-6" - name: standardInputProperties + type: object meta: widget: containerLessObject subFields: !include standardInputProperties.yml diff --git a/api/collections/fieldLists/meta.yml b/api/collections/fieldLists/meta.yml index 0418fbb..dd78def 100644 --- a/api/collections/fieldLists/meta.yml +++ b/api/collections/fieldLists/meta.yml @@ -1,7 +1,9 @@ - name: title type: string meta: - label: Titel + label: + de: Titel + en: Title containerProps: layout: size: @@ -12,7 +14,11 @@ - name: description type: string meta: - label: Beschreibung + label: + de: Beschreibung + en: Description + inputProps: + multiline: true containerProps: layout: size: @@ -22,4 +28,8 @@ - name: keywords type: string meta: - label: Schlüsselwörter + inputProps: + multiline: true + label: + de: Schlüsselwörter + en: Keywords diff --git a/api/collections/fieldLists/row.yml b/api/collections/fieldLists/row.yml index de68aac..05a48cc 100644 --- a/api/collections/fieldLists/row.yml +++ b/api/collections/fieldLists/row.yml @@ -1,9 +1,30 @@ -# attribute auf row ebene +- name: title + type: string + meta: + label: + de: Titel + en: Title + +- name: backgroundImage + type: string + meta: + label: + de: Hintergrundbild + en: Background Image + widget: foreignKey + foreign: + collection: medialib + id: id + subNavigation: 0 + render: + defaultCollectionViews: true - name: columns type: object[] meta: - label: Spalten + label: + de: Spalten + en: Columns direction: row widget: grid - subFields: !include ../fieldLists/column.yml + subFields: !include ./column.yml diff --git a/api/collections/fields/active.yml b/api/collections/fields/active.yml new file mode 100644 index 0000000..2762305 --- /dev/null +++ b/api/collections/fields/active.yml @@ -0,0 +1,16 @@ +type: boolean +name: active +meta: + label: + de: Aktiv + en: Active + helperText: + de: Ist dies Aktiviert, so wird der Inhalt verfügbar. + en: If this is activated, the content will be available. + defaultValue: true + containerProps: + layout: + size: + default: "col-6" + small: "col-12" + large: "col-6" diff --git a/api/collections/fields/backup.yml b/api/collections/fields/backup.yml new file mode 100644 index 0000000..25ce855 --- /dev/null +++ b/api/collections/fields/backup.yml @@ -0,0 +1,3 @@ +backup: + active: true # sollen backups beim verändern erstellt werden + collectionName: backups # in welcher collection es gespeichert werden soll diff --git a/api/collections/fields/contentType.yml b/api/collections/fields/contentType.yml new file mode 100644 index 0000000..aabbc82 --- /dev/null +++ b/api/collections/fields/contentType.yml @@ -0,0 +1,19 @@ +type: string +name: type +meta: + label: + de: Inhaltstyp + en: Content Type + widget: select + defaultValue: page + containerProps: + layout: + size: + default: "col-6" + small: "col-12" + large: "col-6" + choices: + - name: # name der im admin angezeigt wird + de: Seite + en: Page + id: page # wert der in der datenbank gespeichert wird diff --git a/api/collections/fields/emailCC.yml b/api/collections/fields/emailCC.yml new file mode 100644 index 0000000..b32faf2 --- /dev/null +++ b/api/collections/fields/emailCC.yml @@ -0,0 +1,11 @@ +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" diff --git a/api/collections/fields/excludedDays.yml b/api/collections/fields/excludedDays.yml new file mode 100644 index 0000000..d331cdf --- /dev/null +++ b/api/collections/fields/excludedDays.yml @@ -0,0 +1,40 @@ +name: excludeDays +type: string[] +meta: + label: Auszuschließende Wochentage + widget: checkboxArray + choices: + - id: monday + name: + de: Montag + en: Monday + + - id: tuesday + name: + de: Dienstag + en: Tuesday + + - id: wednesday + name: + de: Mittwoch + en: Wednesday + + - id: thursday + name: + de: Donnerstag + en: Thursday + + - id: friday + name: + de: Freitag + en: Friday + + - id: saturday + name: + de: Samstag + en: Saturday + + - id: sunday + name: + de: Sonntag + en: Sunday diff --git a/api/collections/fields/file.yml b/api/collections/fields/file.yml new file mode 100644 index 0000000..1716eb0 --- /dev/null +++ b/api/collections/fields/file.yml @@ -0,0 +1,6 @@ +name: file +type: file +meta: + label: + de: Datei + en: File diff --git a/api/collections/fields/form.yml b/api/collections/fields/form.yml new file mode 100644 index 0000000..38eb1cf --- /dev/null +++ b/api/collections/fields/form.yml @@ -0,0 +1,7 @@ +type: object +name: formular +meta: + label: + de: Formular + en: Form + widget: jsonField diff --git a/api/collections/fields/from.yml b/api/collections/fields/from.yml new file mode 100644 index 0000000..cd2d2ae --- /dev/null +++ b/api/collections/fields/from.yml @@ -0,0 +1,13 @@ +name: from +type: date +meta: + label: + de: Von + en: From + widget: date + containerProps: + layout: + size: + default: "col-6" + small: "col-12" + large: "col-6" diff --git a/api/collections/fields/imageFilter.yml b/api/collections/fields/imageFilter.yml new file mode 100644 index 0000000..8bd989d --- /dev/null +++ b/api/collections/fields/imageFilter.yml @@ -0,0 +1,37 @@ +# 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. +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 diff --git a/types/modules.d.ts b/api/collections/fields/imageTitle.yml similarity index 100% rename from types/modules.d.ts rename to api/collections/fields/imageTitle.yml diff --git a/api/collections/fields/images.yml b/api/collections/fields/images.yml new file mode 100644 index 0000000..803c0c1 --- /dev/null +++ b/api/collections/fields/images.yml @@ -0,0 +1,25 @@ +name: images +type: string[] +meta: + label: + de: Bild + en: Image + dependsOn: + eval: $parent.contentType == 'images' + 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: 0 # Bestimmt, welche Navigation für die Auswahl der ausgewählten Daten angezeigt wird. + #projection: xyz + #sort: "title" + render: + defaultCollectionViews: true + # alternativ könnte auch folgendes verwendet werden: + #raw: true + #eval: | + # (function() { + # var out = ""; + # out += "
" + $foreignEntry.title + "
"; + # return out; + # })() diff --git a/api/collections/fields/manualSort.yml b/api/collections/fields/manualSort.yml new file mode 100644 index 0000000..383c01c --- /dev/null +++ b/api/collections/fields/manualSort.yml @@ -0,0 +1,11 @@ +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/fields/medialibCardList.yml b/api/collections/fields/medialibCardList.yml new file mode 100644 index 0000000..89f12e5 --- /dev/null +++ b/api/collections/fields/medialibCardList.yml @@ -0,0 +1,27 @@ +type: cardList +mediaQuery: "(min-width: 1200px)" +selectionPriority: 1 +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: false + +fields: + - source: file + name: Datei + - source: category + name: + de: Kategorie + en: Category + filter: true + - source: updateTime + type: datetime + filter: true + label: + de: letztes Update + en: last update diff --git a/api/collections/fields/medialibSimpleList.yml b/api/collections/fields/medialibSimpleList.yml new file mode 100644 index 0000000..d1893c9 --- /dev/null +++ b/api/collections/fields/medialibSimpleList.yml @@ -0,0 +1,25 @@ +type: simpleList +mediaQuery: "(min-width: 0px)" +defaultSelect: false +selectionPriority: 3 #gibt an, wenn mediaQuery passt, mit welcher priorität es default mäßig ausgewählt sein soll, je niedriger, desto wichtiger +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 # gibt an, in welches feld die datei hochgeladen werden soll + pageAsDropArea: false # wenn true, wird filedrop area garnicht erst angezeigt, da die ganze seite drag n drop funktionalität hat + +primaryText: + source: file + filter: true + +secondaryText: + source: alt + filter: true + +tertiaryText: + source: category + filter: true diff --git a/api/collections/fields/medialibTable.yml b/api/collections/fields/medialibTable.yml new file mode 100644 index 0000000..ac47253 --- /dev/null +++ b/api/collections/fields/medialibTable.yml @@ -0,0 +1,30 @@ +type: table +mediaQuery: "(min-width: 800px)" +defaultSelect: false +selectionPriority: 2 +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: false +columns: + - source: file + name: + de: Datei + en: File + filter: true + - source: category + name: + de: Kategorie + en: Category + filter: true + - source: updateTime + type: datetime + label: + de: letztes Update + en: last update + filter: true diff --git a/api/collections/fields/mutliupload.yml b/api/collections/fields/mutliupload.yml new file mode 100644 index 0000000..39018c8 --- /dev/null +++ b/api/collections/fields/mutliupload.yml @@ -0,0 +1,10 @@ +multiupload: +fields: + - source: category # gibt an, welche Felder in der Modalansicht bearbeitet werden können, wenn die Eigenschaft nicht festgelegt ist, werden automatisch alle Felder ausgewählt +prefilledFields: # gibt an, welche Felder in der Modalansicht vorbefüllt werden können, wenn die Eigenschaft nicht festgelegt ist, werden automatisch alle Felder ausgewählt + - source: title + defaultValue: # extrahiert den namen des files und fügt ihn in das feld "title" ein + eval: | + (function(){ + return "Title" + $file.name + })() diff --git a/api/collections/fields/pageTitle.yml b/api/collections/fields/pageTitle.yml new file mode 100644 index 0000000..33e0f7a --- /dev/null +++ b/api/collections/fields/pageTitle.yml @@ -0,0 +1,23 @@ +name: pageTitle +type: string +meta: + label: + de: Titel der Seite + en: Page Title + helperText: + de: "Dieser Titel wird in der Seite als h1 angezeigt." + en: "This title is displayed in the page as h1." + dependsOn: + eval: $.type == "page" + inputProps: + #multiline: true + #placeholder: Seitentitel + #... + #openapi: + # example: Demo Titel + containerProps: + layout: + size: + default: "col-6" + small: "col-12" + large: "col-6" diff --git a/api/collections/fields/quickEditMedialib.yml b/api/collections/fields/quickEditMedialib.yml new file mode 100644 index 0000000..3724277 --- /dev/null +++ b/api/collections/fields/quickEditMedialib.yml @@ -0,0 +1,6 @@ +quickEdit: # Erlaubt das Bearbeiten von Einträgen in der Listenansicht, ohne dass eine neue Seite geöffnet wird +enabled: true +fields: # felder, die in dieser Ansicht bearbeitet werden können + - title + - alt + - file diff --git a/api/collections/fields/rows.yml b/api/collections/fields/rows.yml new file mode 100644 index 0000000..b22c48c --- /dev/null +++ b/api/collections/fields/rows.yml @@ -0,0 +1,9 @@ +name: rows +type: object[] +meta: + label: + de: Zeilen + en: Rows + widget: grid + metaElements: [] +subFields: !include ../fieldLists/row.yml diff --git a/api/collections/fields/text.yml b/api/collections/fields/text.yml new file mode 100644 index 0000000..f2f4ca4 --- /dev/null +++ b/api/collections/fields/text.yml @@ -0,0 +1,9 @@ +name: text +type: string +meta: + widget: richtext + label: + de: Text + en: text + dependsOn: + eval: $parent.contentType == 'text' diff --git a/api/collections/fields/textIndex.yml b/api/collections/fields/textIndex.yml new file mode 100644 index 0000000..41938ba --- /dev/null +++ b/api/collections/fields/textIndex.yml @@ -0,0 +1,6 @@ +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 +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/forms.yml b/api/collections/forms.yml index 6bf25e4..ed66a1d 100644 --- a/api/collections/forms.yml +++ b/api/collections/forms.yml @@ -35,8 +35,4 @@ hooks: file: hooks/forms/post_return.js fields: - - type: object - name: formular - meta: - label: Formular - widget: jsonField + - !include fields/form.yml diff --git a/api/collections/lighthouse.yml b/api/collections/lighthouse.yml index 5c93ec4..914528b 100644 --- a/api/collections/lighthouse.yml +++ b/api/collections/lighthouse.yml @@ -46,11 +46,16 @@ hooks: type: javascript file: hooks/lighthouse/post_create.js +indexes: + - !include fields/textIndex.yml + fields: - name: analyzedPaths type: string[] meta: - label: Analyzed Paths + label: + de: Analysierten Pfade + en: Analyzed Paths - name: performance type: number meta: @@ -58,15 +63,21 @@ fields: - name: accessibility type: number meta: - label: Accessibility + label: + en: Accessibility + de: Zugänglichkeit - name: bestPractices type: number meta: - label: Best Practices + label: + en: Best Practices + de: Beste Praktiken - name: seo type: number meta: - label: SEO + label: + en: SEO + de: SEO - name: lighthouseMetrics type: object meta: @@ -75,45 +86,67 @@ fields: - name: FCPS type: number meta: - label: First Contentful Paint Score + label: + en: First Contentful Paint Score + de: Erster Inhaltlicher Anstrich Score - name: FCPV type: number meta: - label: First Contentful Paint Value + label: + en: First Contentful Paint Value + de: Erster Inhaltlicher Anstrich Wert - name: FMPV type: number meta: - label: First Meaningful Paint Value + label: + de: Erster Bedeutungsvoller Anstrich Wert + en: First Meaningful Paint Value - name: FMPS type: number meta: - label: First Meaningful Paint Score + label: + en: First Meaningful Paint Score + de: Erster Bedeutungsvoller Anstrich Score - name: SIS type: number meta: - label: Speed Index Score + label: + en: Speed Index Score + de: Geschwindigkeitsindex Score - name: SIV type: number meta: - label: Speed Index Value + label: + en: Speed Index Value + de: Geschwindigkeitsindex Wert + - name: TTIS type: number meta: - label: Time to Interactive Score + label: + en: Time to Interactive Score + de: Zeit bis zur Interaktion Score - name: TTIV type: number meta: - label: Time to Interactive Value + label: + en: Time to Interactive Value + de: Zeit bis zur Interaktion Wert + - name: FPIDS type: number meta: - label: First Potential Input Delay Score + label: + de: Erste potenzielle Eingabe Verzögerung Score + en: First Potential Input Delay Score - name: FPIDV type: number meta: - label: First Potential Input Delay Value + label: + en: First Potential Input Delay Value + de: Erste potenzielle Eingabe Verzögerung Wert diff --git a/api/collections/lighthouseSubpath.yml b/api/collections/lighthouseSubpath.yml index d378cc6..c9c64d0 100644 --- a/api/collections/lighthouseSubpath.yml +++ b/api/collections/lighthouseSubpath.yml @@ -26,4 +26,6 @@ fields: - type: string name: lighthouseSubpath meta: - label: PagespeedPaths + label: + de: Zu analysierenden Pfad + en: Path to analyze diff --git a/api/collections/medialib.yml b/api/collections/medialib.yml index 59689b4..441eda9 100644 --- a/api/collections/medialib.yml +++ b/api/collections/medialib.yml @@ -1,25 +1,29 @@ -# Der Name der Kollektion ist beliebig, aber wird in unserem -# Beispiel vom ContentBuilder als "medialib" referenziert. +# Der Name der Kollektion wird in der Rest-API-URL verwendet, z.B. +# /_/tibi_starter/medialib name: medialib + +# Enthält die Kollektion Felder vom Typ "file", so werden die +# hochgeladenen Dateien unter dem Ordner abgelegt, der mit +# "uploadPath" bestimmt wird. uploadPath: ../media/medialib meta: - allowExportAll: true - label: + allowExportAll: true # Erlaubt das Exportieren aller Einträge in dieser Sammlung - Nur für Admins + label: # label der Collection in der Sidebar de: Medienbibliothek en: Media Library - muiIcon: multimedia + muiIcon: multimedia # icon in navigation defaultSort: field: sort - order: MANUALLY + order: MANUALLY #alternativ auch ASC und DESC möglich backup: - active: true - collectionName: backups + active: true # sollen backups beim verändern erstellt werden + collectionName: backups # in welcher collection es gespeichert werden soll - quickEdit: + quickEdit: # Erlaubt das Bearbeiten von Einträgen in der Listenansicht, ohne dass eine neue Seite geöffnet wird enabled: true - fields: + fields: # felder, die in dieser Ansicht bearbeitet werden können - title - alt - file @@ -31,48 +35,20 @@ meta: defaultImageFilter: xs multiupload: - fields: [] + fields: + - source: category # gibt an, welche Felder in der Modalansicht bearbeitet werden können, wenn die Eigenschaft nicht festgelegt ist, werden automatisch alle Felder ausgewählt + prefilledFields: # gibt an, welche Felder in der Modalansicht vorbefüllt werden können, wenn die Eigenschaft nicht festgelegt ist, werden automatisch alle Felder ausgewählt + - source: title + defaultValue: # extrahiert den namen des files und fügt ihn in das feld "title" ein + eval: | + (function(){ + return "Title" + $file.name + })() views: - - type: table - mediaQuery: "(min-width: 0px)" - defaultSelect: false - selectionPriority: 2 - 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: false - columns: - - source: file - name: Datei - - source: updateTime - type: datetime - label: letztes Update - - - type: cardList - mediaQuery: "(min-width: 1200px)" - selectionPriority: 1 - 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: false - - fields: - - source: file - name: Datei - - source: updateTime - type: datetime - label: letztes Update + - !include fields/medialibSimpleList.yml + - !include fields/medialibTable.yml + - !include fields/medialibCardList.yml subNavigation: - name: modalForeign # Name des Eingabefelds oder der Ansicht. @@ -93,71 +69,168 @@ meta: } //!js +# 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: true put: true delete: true + # 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 + +# Projektionen der Daten werden via GET-Parameter "projection=..." +# referenziert. +# "projections" is ein Objekt, dass die Namen der Projektionen +# als Key führt. projections: + # dashboard = name der Projektion + dashboard: + # "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: + # keine auflistung von feldern, da alle felder ausgewählt werden + details: + # Alternativ kann "select" auch Auschlussregeln definieren. + # Eine Mischung von Inkludieren und Auschluss ist NICHT + # möglich. + select: + file: 0 + list: + select: + file: 1 + alt: 1 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/clear_cache.js 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/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 +imageFilter: !include fields/imageFilter.yml + +# "fields" stellen die Eigentliche Struktur der Kollektion dar. +# "fields" ist als Array angelegt um eine Standard-Sortierung +# im tibi-admin vorzugeben. fields: - - name: file - type: file - meta: - label: - de: Datei - en: File + # 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/file.yml - name: alt type: string @@ -179,14 +252,11 @@ fields: de: Der Titel wird angezeigt, wenn die Datei geladen wird. en: The title is displayed when the file is loaded. - - name: sort - type: number + - name: category + type: string 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. + de: Kategorie + en: Category + + - !include fields/manualSort.yml diff --git a/api/collections/module.yml b/api/collections/module.yml index 5937e4a..e448695 100644 --- a/api/collections/module.yml +++ b/api/collections/module.yml @@ -87,8 +87,12 @@ fields: - name: type type: string meta: - label: Modultyp - helperText: "Wählen Sie den Typ des Moduls aus." + label: + de: Modultyp + en: Module Type + helperText: + de: "Wählen Sie den Typ des Moduls aus." + en: "Choose the type of the module." widget: select choices: - name: { de: "Formular", en: "Form" } diff --git a/api/collections/navigation.yml b/api/collections/navigation.yml index 09a59e0..d483974 100644 --- a/api/collections/navigation.yml +++ b/api/collections/navigation.yml @@ -4,10 +4,6 @@ uploadPath: ../media/navigation meta: label: "Navigation" muiIcon: navigation - allowExportAll: true - backup: - active: true - collectionName: backups views: - type: simpleList mediaQuery: "(max-width:599px)" @@ -17,7 +13,6 @@ meta: mediaQuery: "(min-width:600px)" columns: - source: tree - name: Navigationsbaum permissions: public: @@ -32,15 +27,60 @@ permissions: 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 + +x-endpoint: &endpoint + name: endpoint + type: boolean + meta: + defaultValue: + eval: 1 == 1 + label: Endpunkt + +x-elemente: &elemente + name: elements + type: object[] + meta: + label: + de: Elemente + en: elements + folding: + previewUnfolded: name + previewFolded: name + +x-name: &name + name: name + type: string + meta: + label: + de: Name + en: name + helperText: + de: Dieser Name wird zur Anzeige in der Navigation verwendet. + en: This name is used for display in the navigation. + +x-page: &seite + name: page + type: string + meta: + label: + de: Seite + en: page + widget: select + dependsOn: + eval: | + (function(){ + if($parent.endpoint == undefined) return true; + return $parent.endpoint + })() + + choices: + endpoint: content + params: + sort: path + projection: navigation + mapping: + id: id + name: path fields: - name: tree @@ -48,7 +88,9 @@ fields: meta: label: Baum widget: select - helperText: Die Servicenavigation sollte Seiten wie bspw. die Datneschutzerklärung oder das Impressum umfassen. + helperText: + de: Die Servicenavigation sollte Seiten wie bspw. die Datneschutzerklärung oder das Impressum umfassen. + en: The service navigation should include pages such as the data protection declaration or the imprint. choices: - id: 0 name: @@ -59,38 +101,37 @@ fields: de: Servicenavigation en: service navigation - - name: pages - type: object[] - meta: - label: - de: Seiten - en: pages - folding: - previewUnfolded: name - previewFolded: name - - widget: containerLessObjectArray + - <<: *elemente subFields: - - name: name - type: string + - *endpoint + - *name + - *seite + - name: image + type: file meta: - label: - de: Name - en: name - helperText: Dieser Name wird zur Anzeige in der Navigation verwendet. + label: Bild + dependsOn: + eval: | + (function(){ + if($parent.endpoint == undefined) return false; + return !$parent.endpoint + })() - - name: page - type: string + - name: elements + type: object[] meta: label: - de: Seite - en: page - widget: select - choices: - endpoint: page - params: - sort: path - projection: navigation - mapping: - id: id - name: path + de: Elemente + en: elements + dependsOn: + eval: | + (function(){ + if($parent.endpoint == undefined) return false; + return !$parent.endpoint + })() + folding: + previewUnfolded: name + previewFolded: name + subFields: + - *name + - *seite diff --git a/api/config.yml b/api/config.yml index 75b45f1..e19470e 100644 --- a/api/config.yml +++ b/api/config.yml @@ -8,6 +8,12 @@ meta: dashboard: helper/dashboard.yml + # Liste möglicher Berechtigungen, die Benutzern zugeordnet werden können + permissions: + - name: pages + label: + de: Seiten + en: Pages collections: - !include collections/backups.yml - !include collections/content.yml @@ -20,6 +26,7 @@ collections: - !include collections/ssr.yml jobs: - - cron: "0 0 * * 1" - type: javascript - file: jobs/lighthouse.js + - !include jobs/lighthouse.yml + +assets: + - !include assets/dist.yml diff --git a/api/hooks/backups/post_create.js b/api/hooks/backups/post_create.js index 8d5e9cd..2b2c605 100644 --- a/api/hooks/backups/post_create.js +++ b/api/hooks/backups/post_create.js @@ -4,6 +4,13 @@ backup.updateLogs = updateLogs return { data: backup } + /** + * + * @param {Object} entry + * @param {string} collectionName + * @param {number} versionNr + * @returns + */ function compareAndUpdateEntry(entry, collectionName, versionNr) { let updateLogs if (versionNr == 0) { @@ -25,6 +32,11 @@ return updateLogs } + /** + * + * @param {any[]} array + * @returns {any[]} + */ function filterValidObjects(array) { return array.filter((object) => { for (let key in object) { @@ -35,6 +47,14 @@ return true }) } + + /** + * + * @param {Object} oldObj + * @param {Object} newObj + * @param {string} path + * @returns {any[]} + */ function getUpdateLogs(oldObj = {}, newObj = {}, path = "") { let updateLogs = [] const ignoredKeys = ["id", "insertTime", "updateTime"] diff --git a/api/jobs/lighthouse.js b/api/jobs/lighthouse.js index c13a13d..421bfc9 100644 --- a/api/jobs/lighthouse.js +++ b/api/jobs/lighthouse.js @@ -8,7 +8,6 @@ var { setUpQuery, calculateAverageDynamically, run } = require("../hooks/lib/uti } let dbObjs = [] urls.forEach((url) => { - console.log("URL:", url) dbObjs.push(run(url)) }) let dbObject = calculateAverageDynamically(dbObjs) diff --git a/api/jobs/lighthouse.yml b/api/jobs/lighthouse.yml new file mode 100644 index 0000000..e1ad567 --- /dev/null +++ b/api/jobs/lighthouse.yml @@ -0,0 +1,14 @@ +# Jedem Job muss ein "cron" Eintrag zugeordnet werden, der die +# Ausführungszeitpunkte definiert. +# Das cron-Schema ist dem üblichen Linux cron-Schema nachempfunden. +cron: "0 0 * * 1" + +# "type" des Jobs ist derzeit immer "javascript" mit der "file"-Referenz +# relativ zur "config.yml". +type: javascript +file: jobs/lighthouse.js +# Es können beliebige "meta"-Daten hinterlegt werden, die im Javascript +# des Jobs über "context.job.meta" abgerufen werden können. + +meta: + name: Lighthouse job diff --git a/api/templates/spa.html b/api/templates/spa.html index d32dbbf..293f895 100644 --- a/api/templates/spa.html +++ b/api/templates/spa.html @@ -16,6 +16,15 @@
+ diff --git a/docker-compose-local.yml b/docker-compose-local.yml index 2da408b..2f8ee07 100644 --- a/docker-compose-local.yml +++ b/docker-compose-local.yml @@ -5,11 +5,14 @@ services: docpress: profiles: - docpress - image: node:18 + - tibi-dev + image: node:20 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: @@ -23,12 +26,13 @@ services: profiles: - tibi - tibi-dev - image: node:18 + image: node:20 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${START_SCRIPT}" expose: @@ -112,7 +116,7 @@ services: tibiadmin-dev: profiles: - tibi-dev - image: node:18 + image: node:20 volumes: - ./../../cms/tibi-admin:/data working_dir: /data diff --git a/docs/README.md b/docs/README.md new file mode 100644 index 0000000..f999706 --- /dev/null +++ b/docs/README.md @@ -0,0 +1,21 @@ +# 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 new file mode 100644 index 0000000..ddf47c2 --- /dev/null +++ b/docs/docpress.json @@ -0,0 +1,9 @@ +{ + "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 new file mode 100644 index 0000000..266605c --- /dev/null +++ b/docs/markdown-it-code-include/index.js @@ -0,0 +1,106 @@ +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 new file mode 100644 index 0000000..80c4eaa --- /dev/null +++ b/docs/markdown-it-code-include/package.json @@ -0,0 +1,24 @@ +{ + "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/admin-javascript-kontext/allgemeines.md b/docs/md/admin-javascript-kontext/allgemeines.md new file mode 100644 index 0000000..5a10059 --- /dev/null +++ b/docs/md/admin-javascript-kontext/allgemeines.md @@ -0,0 +1,47 @@ +# 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 new file mode 100644 index 0000000..bed42ab --- /dev/null +++ b/docs/md/admin-javascript-kontext/collection.meta..eval.md @@ -0,0 +1,9 @@ +# 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 new file mode 100644 index 0000000..a9b449c --- /dev/null +++ b/docs/md/admin-javascript-kontext/field.meta..eval.md @@ -0,0 +1,104 @@ +# 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 new file mode 100644 index 0000000..bd7b449 --- /dev/null +++ b/docs/md/begriffe.md @@ -0,0 +1,53 @@ +# 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 new file mode 100644 index 0000000..30f1db9 --- /dev/null +++ b/docs/md/docpress.css @@ -0,0 +1,34 @@ +.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 new file mode 100644 index 0000000..7da106d --- /dev/null +++ b/docs/md/github-dark-dimmed.css @@ -0,0 +1,130 @@ +/*! + 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 new file mode 100644 index 0000000000000000000000000000000000000000..dc45560cac3c088c177bf4df01ab6bd68659fddb GIT binary patch literal 48466 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 z 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 literal 0 HcmV?d00001 diff --git a/docs/md/projektkonfig/assets.md b/docs/md/projektkonfig/assets.md new file mode 100644 index 0000000..87263ff --- /dev/null +++ b/docs/md/projektkonfig/assets.md @@ -0,0 +1,3 @@ +Folgende Angaben sind in der `assets`-Sektion der [config.yml](./config.yml.md) geführt als Liste möglich: + +!!!include(../api/assets/dist.yml)!!! diff --git a/docs/md/projektkonfig/collections.md b/docs/md/projektkonfig/collections.md new file mode 100644 index 0000000..4362091 --- /dev/null +++ b/docs/md/projektkonfig/collections.md @@ -0,0 +1,17 @@ +# 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/medialib.yml)!!! + +### siehe + +- [fields](./collections/fields.md) +- [indexes](./collections/indexes.md) +- [hooks](./collections/hooks.md) +- [imageFilter](./collections/imageFilter.md) +- [meta](./collections/meta.md) diff --git a/docs/md/projektkonfig/collections/dependsOn.webm b/docs/md/projektkonfig/collections/dependsOn.webm new file mode 100644 index 0000000000000000000000000000000000000000..144b7dac5e5f8ea5e61c8a436d6eeebf41df692a GIT binary patch literal 123672 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

Do@EN)^ho9y*V<}jV_6WF?Dp!ub| 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 g8trCBP*4x3&nVoasU7T literal 0 HcmV?d00001 diff --git a/docs/md/projektkonfig/collections/fields.md b/docs/md/projektkonfig/collections/fields.md new file mode 100644 index 0000000..a12ce16 --- /dev/null +++ b/docs/md/projektkonfig/collections/fields.md @@ -0,0 +1,295 @@ +# 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: + +```yaml +# 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" +``` + +## 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 new file mode 100644 index 0000000..0b41cae --- /dev/null +++ b/docs/md/projektkonfig/collections/fields/datentypen.md @@ -0,0 +1,43 @@ +# 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 new file mode 100644 index 0000000000000000000000000000000000000000..a4d9ac60dc1279f0bcbb3dab3b18fdfceeb1155d GIT binary patch literal 47517 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 literal 0 HcmV?d00001 diff --git a/docs/md/projektkonfig/collections/fields/foreign.png b/docs/md/projektkonfig/collections/fields/foreign.png new file mode 100644 index 0000000000000000000000000000000000000000..a8e359c0d4a1234661d7030e2771c1e8af6f52d9 GIT binary patch literal 32745 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 literal 0 HcmV?d00001 diff --git a/docs/md/projektkonfig/collections/fields/widgets.md b/docs/md/projektkonfig/collections/fields/widgets.md new file mode 100644 index 0000000..95b0a5e --- /dev/null +++ b/docs/md/projektkonfig/collections/fields/widgets.md @@ -0,0 +1,131 @@ +# 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/pageTitle.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/manualSort.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/active.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/contentType.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/images.yml)!!! + +```yml +meta: #... in medialib collection + subNavigation: + - 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. + - source: file + + defaultCallback: # Standard-Callback-Funktion, die ausgeführt wird, wenn keine andere spezifiziert ist. + eval: | # Der Code wird als JavaScript evaluiert. + //js + (entry) => { + parent.selectEntry(entry) + } + //!js +``` + +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/from.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/text.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/file.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/excludedDays.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. + +```yml +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. +``` + +## object / objectArray / object[] / containerLessObjectArray / containerLessObject + +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. containerLess bedeutet, dass das Objekt in der UI nicht dargestellt wird, und nur der Inhalt ausgegeben. Dadurch wird übermäßiges verschachteln unterbunden. +!!!include(../api/collections/fieldLists/formular/checkboxGroup.yml)!!! + +## grid + +Für Datentyp object[], dient als übersichtliche object[] alternative, speziell für pagebuilder entwickelt. +!!!include(../api/collections/fields/rows.yml)!!! + +## jsonField + +Wird für Daten genutzt, wo man die Struktur nicht absehen kann. +!!!include(../api/collections/fields/form.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. + +```yml +type: object +name: formular +meta: + label: + de: Formular + en: Form + widget: jsonField +``` + +# 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/fields/emailCC.yml)!!! diff --git a/docs/md/projektkonfig/collections/hooks.md b/docs/md/projektkonfig/collections/hooks.md new file mode 100644 index 0000000..bf94f25 --- /dev/null +++ b/docs/md/projektkonfig/collections/hooks.md @@ -0,0 +1,112 @@ +# 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 dem betrag zur Collection 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. (return hook) + +### 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. Er kann aber auch verwendet werden, um einen 200er zu werfen und zu verhindern, dass irgendetwas in die Datenbank geschrieben wird. Dies ist bei einer "actions" collection vom vorteil. + +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. + +Hier ist ein beispiel für einen Posthook, welcher ein dynamisches formular validiert (Post create): + +!!!include(../api/hooks/forms/post_create.js)!!! + +Hier ist ein beispiel für einen Posthook, welcher ein dynamisches formular abschickt (Post return): + +!!!include(../api/hooks/forms/post_return.js)!!! diff --git a/docs/md/projektkonfig/collections/imageFilter.md b/docs/md/projektkonfig/collections/imageFilter.md new file mode 100644 index 0000000..1f7334b --- /dev/null +++ b/docs/md/projektkonfig/collections/imageFilter.md @@ -0,0 +1,29 @@ +# 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/fields/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 new file mode 100644 index 0000000..cf823c4 --- /dev/null +++ b/docs/md/projektkonfig/collections/indexes.md @@ -0,0 +1,30 @@ +# 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/fields/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 new file mode 100644 index 0000000..4e715c4 --- /dev/null +++ b/docs/md/projektkonfig/collections/meta.md @@ -0,0 +1,76 @@ +# 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/fields/medialibSimpleList.yml)!!! + +### table + +!!!include(../api/collections/fields/medialibTable.yml)!!! + +### cardList + +!!!include(../api/collections/fields/medialibCardList.yml)!!! + +## quickEdit + +!!!include(../api/collections/fields/quickEditMedialib.yml)!!! + +### 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. + +## 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 sowie die aktvierung der backupfunktion in einer "normalen" collection (Im Meta objekt...). +!!!include(../api/collections/fields/backup.yml)!!! + +!!!include(../api/collections/backups.yml)!!! diff --git a/docs/md/projektkonfig/collections/validator.webm b/docs/md/projektkonfig/collections/validator.webm new file mode 100644 index 0000000000000000000000000000000000000000..6a34e05d945bc56f771e09a19404016d6a01f4c8 GIT binary patch literal 352494 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%0DC7n}_EY#qVeJjGMeC*MV zHIU|b;$z@rsCf1O^k1lavVRA`c#1l8n>vas`p$x4dU7Mm4NKDL8wEJE=dEE)AT4AL zg?due6HJD>R)8HxzCscj4!T#KVUWWC1~X_2O};!NKsJ+~H08S`+eFDdidL4?Pb)Iyts2+@@VWyRk=WyXohb9Yt=Lcz(J1mZ83!{r#)@yY_e5 zZ+29AG^?h`ns;B$xb-ND_?kmzx>0#xQ4%hJUyNfbt#O}xMd+JwJ7TY|d6f6n-Al6q ztq3DYy6Lw*sa)Q^L^?mv6-TE`O;}_fBPMQ45ja02B}Y|6YE#U1yH?~vZ^hLSg-6ib z)|2B;@768unXAg`ws$Z+&*I#iH~IvMiVB?C?=Y@~AOHtzemY6qL`3|U_)VtU{V~pOP&e!=yJ$|x z%<^lt@i*|6-%$73V3R3&GtKf)`9avMHKuv(H`S(7E*)O66WXk4O8AJxjeb8dmaKl^ zD={>^fzx#xuenKZi@0Fnh0*8I7%#I*u{Qz^}TzQyW%EQB9t?%w2et5b$!m5Z>A%FD|=7Kx5=VR!#O+rVk|NF z?a9=ly=p#>9SVeSuH7f{#& z2p_{-TOdIs(mj*5pg$&$p^hJEfNGd4bX=T*g5hZEk-rd4S_8RK@z8p${z>jp@MiSM zhdHq1@<$(%%gfQj)WafQgkbJ{z6k`8{V54F{nWGfEeXDW_Wyi^RW#ZApJ3gf=oA{6 zn9H#tTa|6?;`y(7~#)JJtJfPN?kDK1rL_Rlf95hpVrVM9CzEK+h< zb0*wAie$W;JSZ$m@2+;|02lX?s#$JRex9Dtrr@B#%tn~fgSJ!)4XeqvI~E0>wfMTQ zl(n#UNV!j5uVu!0yjWcSB(kYTiDDss_w{7i1;XU3$@HjTUs*Xkj=R67M8SgIU~m8{ zGGe(lSidgh<;*}T#f2tjuQhU_t(9Ou;myNz+*6C`$yx0qxq~jt82>yuWPL;E6q!JA zOzB9PM7j|1T0};o5A)4s^W4+p>U?S2Ee}SL@1{c6?|FPvs@})Hrh!uyX5SsAX6%VH zGd)fx+g8}N!@;!OK@Un6Z1ca9Ba_H^f_EuecU$1H{-?O_64##(1!Ws0F#@z1VSZPh zjg&d-J%N3WdKxp~wB>Bud#t9-I814GUzKQUfb479{-pASsi%$hiZ(26*IOe;zj)>l zdW!`;+Mc-B*K+4!Kz(GvIV}TIJ&G?4LXjVxy9f6i8tb$Gx$XWl^@05H|Cj26!aX#& z7=r9)7eMC>Rrf0HfyCS=mHEf>19UZI$Bmmn@C*v1XGD$Vzs$RTHtqcf)mdfwq=j8m zqOFhgLiyKxRd%ciU%c$UqmS@>ocs($AC=mU){0%cd6t0DLEvVq$N4tO*l6g@4AUAlO z-+WgWO5^#Wi&$5lt;jZ@An<4*Jb3*EKp7*C%3n+6NZ?fCa;#>)QzP0yuij5m7Z?uKf-+s7jqx!U z9se4qjC(lZp+ILGD&?^2bJ>d6wZ(+ls&t9l>I1muoKhXH--&|1o&G_McTC3u9~o<60j+uUIWpsJ%t%vFnZd>q*I4j9VL$5{4df|Z{cs1fY`d5NGP(Z!6(H!GYuUAAY5Hc+pzh!6$%?*eEGsML|IO z%0@|={o3HL%$-02p{BYT-pEC+K+#8Pod~7`eVd7DXwwu;-jtv zGWpCF|AWp;7ub+V{#L)J?$}#>MT&|V#m340ygxkx-;!>|I!<5YF3t{r-*s7WEnF!(DhHep>+K^uGq!`($NIM*=%sDa48p*f!n{)f zYD@soQ>FG#G1GsH&K?8MEa!^7)I2PT`o)*G0-ws7J`{X(`iR2kX+x>S&TX31yybUF zQkRuPH{#U>*4~ezxaRW?n5lR7mBwijtaIkW4p+`Qf2J5dU=CN8vTAx2jl20Q?Y7ZX z#-uz!LrI&YL1HYN3r1PBs<6fOr;k<2aRIR#?b9Df+?{cpE9J}&PUlKfCm%}OP-IHI zr^b^>dp=xBM{Gyu-uGiY;=2`@r;${wi@nLkg-?8%E#|Ikc>!|9Q4MNy#%VrL_k5&8 zOz6K*B3jh&WU$U$yz`NDXv#uh>nE?$%kKkMjGq-h{pXx&_PXKbDd4bnblrHP4uD9k z1wyy}e&q6Bq*}3jWL?6_TfrNGy}LA7XI>h8UA>JzDlBpWLcoaK%Ig(D?}O9(!H!!I zATERNV%hP?dwoVms+@4sE4ZhB5vh%Baqdg|5yzTtFvdd9@ z@>KQ9=P&LG`I{l5)Wx(1;()Nla3Dc&&+{dU6HNMRsOo1DmFn!$<;Zy*HzfhiL{lY^ z`k21Q9Sul6n*=0Sf_&sGnu_SB$HgyOCH;508*`*WgB=hEkPV;NO(3sU&Fw)8<=>e8B6_-D<5b5^yd&W5HE__f_>;kuT>6&5+d|6KT$A1&d`QVs%mixD8LFqGx*9R)WZLpzQG z`~TMRgt2r4PJPS?#4ih(;ZQahaS0xwR5$ajANHfSEPP*lwJx-( zV+!{1we3rxD{oa=1fj@hQcJ3JY7qfdO(5 zWbZN+Cp$RYX*?k9W3zw%L@Kb6rtg`6)!GYVc?w(0N@Ddz`J-jhZEaf)U*?OlL>L1V zp*AgFhLgoTvG3~-)B_s zF;7;Y(B_`3E~}HaAt=Q=gL@uXQ@ImDLTm2RnZ3v^@w{*4laTG5TlBv7>sh|DK{EnH zq;6cJNq5nfL8L}M7jtmR#x#!UJ1JyZ-bPW$Y=X5Vil%Z0M1J_N1*o4Xvq`fe(#61VG}r9 z>@C9&b6$9Pd$RyL#C&Zh?-mn4p{xcpuLVYg>96lM`oWCTPhBs-hsRSEneS-z~ z-(H%?;UFu%Q+F7wbS$(x_^tpp&T`YuPT}NQ2p2 zqu%t9+7*fTe2-iVJ-;J9JDJ+dh`U}lm43oo$cpq~m6h9bE#@`+59Sd9da5Equ+(hSyz@4k!jd(7z zDlI=vTI2i$wTA3(iwy8d$KJTag!Pi^^jFkBEgE!Q;^Ex0V2#uAiA^}`0~8$5RMkI6 z)#m~Fwqt-5(X!D3k}{|pA_4rE-+RR>V+#!fp@%K-W!Oyw7WLV}?*=)mfG%PGHsxX^Q~H2zlGLz5cam!mdHTPb%xd2*r+s=9S=&14s4M~>)~>c)%m*J}0@1@0MLTsef>Hq8vJ$lto*IDrI| z*Yt&2SSW0OW${dE5^-Bst7kn+cNiqOYK(qx=IBZeKI12yg!<9d3A7{OlB@wC$?DYt-t$V(XCcr6B6|3?FARr&P!~jBPAUdybn00 zF7aKxfmPcbja?Th;G?zo+9lrcvpeD1Gt9#C&1bjRGLhI8C;`P6JA084xd;iR*hH`u zL=1~|H^K!;h}kj~F4J{Ej~AW}FiBh$qID$oiDQtsHdJdWF;BGq%(}mqq6IpKIx|O6 zegA2W`k$By{-2o5QfNj~tNdz?VjyrFhw@|pCtu4UlpP83{ll~H zADEt0|7_Pvlhb+D)jr3Ym*iu{^&mxK))awtc^9GMrP=97JdX?|LXGizGJ;`m*QCmr zQ(3MJzq0@=IO~S^8b@yWX3<`;ci>swUi1vyYz+7E{GH7V%}ucw-*M zeb45Q?AJN1eQR_5rX%JkGmz{vg@kAIrKMv}Odq$ah}c&|DpUjU%vGdY#)2-I@Y{Z+ zzqw^fX0cU_KeM!5-Z|iS=ZEOKgr;`*RrJxd$VVN#0`S6PkC9kxU@s0@39xK_tnQ`AD3Uakk2d&_a>6E=)bTsUZF52JRgW8dE*maM(7@B5HK|maf`t7c{7=sjF$hq zuYF%F@5QhRsNdbOW;Cnf|7@UK`Bv_!j?E&}GT5{Z*`4UdQ~XH1b+V>+%O9-(7&I?h zd}{rRKkBjuO&$5GM#KKzP06cXbFmCtzoj*9YPv#PzXMGa#i>rLQ)AMS_=lAU{{P0Eou^Qvw zeFH%?oA1as9ZU2)B^lv3-isxdol7QMGaFYW5h9r%gA)g}RI(Z2GsH6ypQNMk1jpva z*TKT64RmWk?Cag;1L^=NOytYAde4krc{Q>Sy?xJj}{^zc_=p z-AneRq?i0((uiBrxGVF!wtG*3<$~&hS*cL4E zEd00>lIL1$Hcm!$zK7#Y_mYN--WWe6N9t8ibc29oxOEN-N#>SiJyo*X_@ zOcN`$h~W*ghZlNrwr$$>0qWjo3;54*T5Qg{FnP>>mQ+~t660Xrr4f=HxW4P1H!*Z% zNh<^}LUE>{D9Z-Gogh#}LrlqLZJH0eDP_Ty$)9(hifd}xN=2cqnX=A{bx6mKX(K8x%lB{ivr6yW3xrA z4(ha-S7pj);)}M}Euy};n(A`o*Z4t_vvz82$&uo-51@)kcHIP5k(pedZJWieh`+zP z?<9AP{z5{2gR=kv`%b&#ibMDV)`Hjaeo6LwWe-W*6lnr&jl4)js$f+ItV~1K@t@M9 zZStgAkvy5BV_aquAIO!JO_v=;q;wXF6%W=qIBq@)EPSyJ(0@Y$LvZY$VJeVkRC`uO zchJ;5zlsUQ)_p7*%bf0>lypED8vyOzAUFKn6xf*B2^>J%XFMs9sZmoi6ueWP#nk*=9N_>ALv}Xa~xafIo`Gd~UzQRY+ z_cES8V>W-9W&Z54q-riqtoN`mM2ZhPJWDCvboY0%7W5GQS(!#Pf3u3v z2K24^FYk@S@+W*im%h@~S55dsh4Ly~478b=S*VN8Y!mtuYg|O+Wcu&1QuGB_IRL?) z!{gyt6z(D)HgJRpd}94eoMM`U=vf@~>>frzeBZOuc5cC-MrOL24YFdWr+mC5$Jf$1 z9<+HuRmC(Zoi0tIh?wSE+~lkD!=GN=yMns3s&YbM;-q`zd71fpo$Qhgq(W0Pp0(q> z&NxF(cpurFrn1~C3s(>XqXZ`wZMKl^x{s0>Vg*+OyPwgSG7mf))KV9rRc_mJS=f9O zvD-J%iH+@hT4noS)+WgJMgD1&LG<(^oQpMPK?k4KCmAY&s+L7+6E0=adNPYfOt7=l zJ+WT*j97^)K(MH!9Hg4xMfRmrrm;%7$=`q0O}bD1Qol&|GS#^%14ioOhfmwfnw%D9 zc?>()-x3WUvydHJI)|2YcZVIdQKyW$+WFri-n^VKT(uR=SqNB{ zQYv#nxT^cf11qYyt0g$wk=ugM)QIr}29GcY5i{!ok(jc2ztIwXbIayS6QZxcO(sBw zJVMjJfvq#Yr9aj5v=Xk@@cmq8_rHV&)Zx}qqfRIYRY}X4G-yN9hyj&nD+|F@N>#zW zH!)muQ-f_+QO~PhVj`gP7=x6yq&^q)(S{D4smKoMzuXb|^^k~P4l5p>_N%mApbxtr z)gl~b=?;e@5J;u}Rhb@}PBY}%mwrEDHlzo{C+pK)oPfSytQH2=w#@)FpuqBrlwS@Y zcX@Z(ZqkG(5^6#|Mg-YYMKGAhB{>Jmq>Bysrg$hzhM$nA9$+mmeNWT%Vn03}C1 z7OO_%JHN>&09Z?IA#33^k&LzA0SHq(AXMiMIjT)Rp@3X2bbDi6RKE)EY!Dwco&uai z?M}!27Kw9L@sv3&S&w-Eac8}+cvNDH_Ue?=FDfx`$R@9k+(?1Gh*bkaaQQhZ6u0cs zJi{o0NXnRQ3qEJfK|x&}G6c{sGRmgtoF}<1avQgrLr^)~rsTE*UNDC{5)esO(P2lw zZUG4U$x8Zc0jxzvK#I+Y9sz`khKeO}V@0+AHRJ$ef_MxlBtd)=95js~AaaIp0=A;~ z;d22526L!;>MzS;;N-hNdIZ9hY{q0i90=qF9SbpiG+pCdHmw1HA!dVo`{j$6?V}pq zB`O9?V<74Tv#YdYeR|;anq_f&B5-sI|6WX;#f;5ks7`Wp&C66=@O|LCHGSxBv2mh> zxTaM`Y~1PHWe}LYNK0b`EzvB+_H*H;({R=n#4lJn6qBzy2~#haq<*)gGqy=X-C*a^ zvJptL5k3gM5gBI(d1xnzIoIjw*k)V6bnae=W#QUy46BoMrFk7(*^%!zp0Zv(}xK^Z$ZHSBiabSvMyZx4a$>;+C zU2Rp(>FXS~>0ZC}BUDQov(K0sw|c@qQYZ|Yg9uFX40fGZb-KFM07c#s;=He9R84K` z483l$RjY)X>!@}WC@B_2u*Ja9Ir;)^oHzzB(XmJqvvgWQwRl`VAfy#p#1T59-L8K{ z@DS=RUB3d|xF|UyZwimAu)0%z*k@{3^_iu`sxG2#{f-C#Dx2FL!YO}!0k^U{|*UhlrgiupvR4e;m4P_7kJ28sq zi@~Z5y&~Wy5*K^V=xOPjdYl<0MF+j{9$_>zjAr*mq73g{>AT?mEuuP1b>goXQM^dl zE{h33ZE|BGjysh$Mve5dt^I=laIja7564sKp*xrr4Hd!L5TWh}-w;001^{1j1j+q$ zv7L55zCrApQuMJb4V{DT0CY3~@G$?7ou#?Pqz`*8qf+@rAdbx03*3819VIR3(AP(o zjMj=#W7qE-ye-ZM0N*)~Of={17ZZV6G;-=+m1wN{3FxT6~2)t#%QaMT^61}1Wr zAI44qe6L6gS7}L?s52q>^uEm-GjO@_S%&N%D5#lIV*@`Pv5js~gA3i6-$Xz@iMSSY zwC4*$s5>Hl$rAv`M*dPVnZb&G%a9GKJ$HVxwM?0;XeOs)Ro7e(fTAj(RTnz-h%8x= zpd4&L)7%9<(13D~AE19fwJ(1ZhuKlW7-RBpnoWm!*B;z#OFg9T#OxEz-I#SD6Iv>l zPr@d4oG!eiRtDIDyRe+$gW*L$euMnQE*D(KPI7ssC0gp`O9Yb!UGyRxz%&j@kwAc7 z5yGHuB7emC+76f4#nb&3ZvPz;v{wA zol@?Y&3c^gRqA(m&7hYH&N)XhKbOFE^u2^CN9yQdDKmfNzcO_CDwGKC-bJeivlflS znXYARt?DIPC%5wX_#=o-DeQ_03MyNIT8QS{=!1>?75vm$w=H?mgY&tgJ^hm}O(DBP z7UVcLE+glr*`dRj7NRV!lpQjv1-Rs^x6vMp+z~hQzL11hCipZiDSd0&O9v=D=ul-X zIG*+}!rXJo@VFpXMZ#vldKsYxFynq#3J~UESn}w6(}6aE<9~YPmv>^}6))hB`H)h@ zpq_#qf_!3Ar*e)?f#~^nUZ>{4a90>$*S`cHNSIZRcKmnz0&QvRhq1l@p+EF?k%2i>Rm6l9UE|h`r;yr<%Juz5J({&LGUojOQ)<~+JRs47RS5iPX5+o#59d*lNf9!v-_ZCofE!&## z+PJ&B1%g9>0D<5Z90CM_I|O%!jT2lGAh-ny76=v`f(0i?a0wdRefNgsoO|xO_epoZ z?$P7_FN?uoRn?UG=B(Ol*Q%P+?g)6{i?Y|Id(PYf4Lt)F2KQZ+j%{@VXLw0YJeU;& zubNNfZrX$vQ{M-2z4a_^|4k^e?l~PTj2QGg z>cnd-47Lgd5ilV8^a&>w3@QKh%NBxu4*1O=aR9UVGy&Kzn-Eh1NR|0!wzm*a>TIw!{29J zDYb(PN=3^iV2*tSriq?X?VmfdHs&*2*w>Bo!mcsNGO0`YfIJtwZ{B8!Ae`9lz4k1j z^DS*q<^a-p0VL4^pmjGueKeeL+UZ1wn>*aF8VULdjdp9ZA;MrU+u*!|C!i{kCo7RB z0tj`ZaEdr&B{^?SKXlD|EtB|K1`PN_;~9ZhM42|ns+D)1;lwfGK;MX6kv;qZ>IzUF zdvB3F9shtv^#Kh4I^|OdhmC?Od9OGk{)rCCQC0$g-L}ugLnJ|dp_rZ%`s$8jVi;(_iH*KqQpJC3SU0Htv-Q5N6uKT(s#9mEN) zsJlEcQlnr*3>RIFg$AKRrc1VW`NW&?`7>KJ4^2SnNNL`4K4avDp;Nu;?*Qx#hW{9qdk$ZJrW1I5SXow-N4)ZJ27tZw zCs55jq|t2vEl)Up)KHWplw&7H&;h9d*Pv63;I{Xm>apmLe#F)(NXiq=ipZcE3s#W$ zp4iyg`j2shq(zE$+zKEoi;V+Tz<#aK^1V6BtKcSn8oLa*^!}fF53E#R3Z+{|Nm}>c z5#HE)(t*HOh}$I3M=!2qW99HLb3)D3Nt(^MP?FEFKE%lf6~fT0BJ28#0Rj2=hSS(G zfgm{)L>C7`+zsMZthDUz=9+LbMfGq1eT7O93`3P)88euaI53IS8pw?|=b`xu>1)h~ zOzq~2XO>}Pngu^YUZ&Kg>or(qd5{LWX!ektJBrnmg(|Z+USKDa)F)1%$Q^g4~E5qD{PM2;kjDcXBL7tZ!IM{F#rhZ7cpWObJ~KUnBk1a zb16PJB~iju5&?h=DVT$)7atr)P%&(BUvrKRtp;Fz%z{R}V@|+;A+2m1(TPQOiPY1V zoLj8`n?fr&Lk|S4zp*d&j{k>q{7mR+d=o(a9r%e-+%0j6M-r9zM-vm`p!;8c3-~Mo z@Js0Iv9^ej@WU^}O!pNDEd`V;m*P%0HJD)lercHw$2FcOcXee^Bhs_lcszDH8Gsc4 z2(N#7R9=+?3D66{8>bch?h2}hu#XzhE|nC(xiu2=ivSGh{FcvZW@(y*893$8-Dm-Gl5Ty=TT7&HM0^>@Yq+cON1YlJTHW0fYod&>fl7KeP6s zU(Us|{0Zv-PU8C+jbiSnz8U#Z%em3Tkd*JTE6;E{kwXHZc%fYc27+<%qe-D9_qC|GRSJOPoqvL3IN@9d}fxi(k2@w7h*13!U6qi&b1@2aX20$|P*i#@hKpaZw$Lu_WZf_0X!aXt1!rGUC5)Q4}rYx1AgJBFp<&R+~ zkTIcz*QH~EJZ%+#Jl19gSiFrIN+_JvU>;KU7(fmn=Nd+Gr-Kr%AJ)q6Pa?E}IK&G) zL6~r%|5i1cjr&$Ur4>}LBFM%q(~npSXTC{D6BsUM_S2X7D_Vda!wleX&m7+@OirqZ zi<9upS0YjSW^vaUpdmJll=7-Sjm&>yMaTn*ek&D7io;n9=E(v$7O9^|D$~9dzpZ-< zjX>K9^W6aPkhNg&Re<)+KFET$PC4t1=Z<$fd6v>w4D(ru#u^d^!|crI)9{B1ferxs zQ~&+1J*b1Q92Sd-&ibxQ7+IF@Q=Tq80}#b?uF8uz!Is&@MQQ-d z)yOji-{H1`43o29I)E&4s{7OXn%4Zrp7J|KaBC^m%wl7z~|?@k!VWotf48TYhV=C`8EQ0H6gP38kh5AV#wX-H=nH8wk41OVcO`5vsd) zx-fv>2KG6caGm-t7CaK9M-cMQPaa?bswvl^nVq0QzZuy7`er}Z+pOoVwp8qL>A~X7 zLs(IAZ~9ghzW(q*s&#Vf5k$Q0)hwxsb7T-p<(I=m=qGvp0GWSBKd(ws6e*>1hZecN z-#|$#W1=;}?ORK~5Q=Of8C%v9-5*7BNoW^iFsl1PdKq!ZPqCr~glsDXy`G^kOtWLs z2Wy6S1PxrB{v>_u&-@N)*$tf(a_cjD+|H@!5Q)slIJXUdxKD5K6%fy>YOrxiK7hxx zqOaaaz@?Njgf3jJJ)PgT2I=24)0KX?ayaavQ*a&uR~8XMSwS7*ot3! zXg(@tMAp=6+7(gc6!G%gJKj+{S%l(%-Ggq8)=Lzp%(s)OH);bv_&j}!xW}7b3z<0v zp6TRtwC3#SP2ib;v+c+EA8c5@3%H()8=Pk*xDK#Q7CSsfQKt-(AqD(1-`l5aif-sV zKt6yztV_nA7Q-~X7*{ywRR%EgU1=whwFKGPeBZ+-_k+h@Q`V25>F-M`tP6)l8nZ64 z=q;DoZ~J+L*TW`)>?$xJH+|@8wh-R_^V~kQCaDaU$jb*V1gIPF4+9NK8zHHWc-x@q zP+BG$hkUM?&ENGnB`}n8?*#!Es@g_;3_h9ueKvyg^&l{eH2`(D9e*OL|C{MVUHpmS zfrHogD>4*&`JZC;AAJmVaP&j^V@4gt3!aYg3@?T z(mn5Z9b!Z$o$m*_g}p{RsXE7SS8VeI-+~w8MJN}A!NOU*t-@KEnZm6;A~vusptauH zgmdBJ0r5mu#QDr4uK-)xwU$^vTF4#*a^(hr44r`5iE_znPGo~-=>J}o25qC4Jjs_yVKQ^QJ{z3maK zTQX^5>)aZ`9tW?7f7y`$qu?$ig+y2IWN_16xoPcnphu3uyhSpvQGJ{~mvfEHWPtEk5ct*?Eq#Dno~^!-Dm$>2S3Uw`s03}ml;`7ZgJ{ThE-x0}41 zCZAaF9=AN{04~CjL|dbHRqPH_d0{n7a8%`1DD(=lMjAAALfAOMVfRb5Y}L4NkkdgQr5dkYcPDg^{qYkDPGdnja`tEtoTIRf;gx=u zJ20}g@wWo#vHbv9r*91Fwf$ z_YKZV?yEyLt$xuL`KbMBK&O09pWTf)et*?0{E{rL4)s>(B`y0)ve2v0`vzzYl=lsI z4Q|TwFomCGb;Z1;cgIjv+}C-QxDH_`68@%OHb3odJG&6?dHXu%I%92| za)d{8XM$bKzQk%pc_iEb`Ay1{KoBA6i$NI+YIL}bRd%+9tMt|C>x9W;dA}cL zj|*>K7h}W>U)5X=i;*A?eR1yv~;J_qEh2is<;>ZY3=#YK@U7^E3JTqbAtSl|E1Xvr~# zFw}pNK2}h6_6?n@oe01hR`g|VMEVhir#vuD<|om8E14>pMxl{xhx0(}s?C93eyEl+ za)mUyO%n`H>-##=GPdP~4%77cH*TY37}Ek*j3xN4@uPSWC^%2}<-V3RuY1@C)1BOb z^K_tCIOkPh?y=BLb2U~-fYX8QqBNaIPKa&c$|b$9M@AeDGz%lE!3Lb}n8kE-P1s8xq^&^0e4Ha7Oy{bY0E_zFJ-|ltaPk z-L+Ab zYo$Vi3M8|TV@zVgK0b+3)69cTQ~;z{rU%xEI(+i}5poAkwCdr{^7?sgrQWA^;3zr0 zirGlb+PJ~|Y*z|Lot1X|!X3L8>tXi0V!k_niQtal6D;MJr;`mn3s{y<$+R^l?&2j6 zs02`?Zg7dlsC~=o)IS{*T72Pv`zpUp-i{hovQEbh1;^R(?OR=+!NY0aXFu=2@p`A` zCozsFz2P(CbLTJX%b#1LW&9=4=2W`x{6#BIt8LXXdr2oo^XppmR8$S$C z<=sf`Ng+ncdNC4DG33A59=m-K~f z#0d4jZv*l#DdoocQ6&;K5AG4krI4}RGC%AYy#9rKZ#h|K#89~UuI1RBl|Lp~m#q9$ z{)9faSeL-4;X6>h>&jcJHH-7hb6YCfdWgd50taX!?#2i=y^}Ua3}AM=y}Ckb(yJMK z!1$tjBKsBTXQ;QSezd@FZ6~Yb zy~B?qjh<-2n+Y=@6#^1h{!jgG7g`qcPZ21Odw0Nv5$FPB(`y3PAFAyr0x>U5PFvL^ zL(-#doXBrAUh>9>hTc5#GGLf>`@ZV(` zX^&%k%V*NN8wW7BV>O4~sfWuIOKLDO^+wse?D{dDxpnw@_B+UiP;PIIEgp63u=Loq0zgq^M@08pj z_WED-b-Y2A7=9bYA+yC|S^IT~c96Wn5Ipw_0?4R>>P(Q8U7SF0CFThZRb#ZtYAn3o z%H_wtLGoT@+r2)u#Og!~#LFqnZ%cI4j&z!?Vu}S6F=J<4;B5k_%eIC^|)!rD6_ zfzOlBa<4kd+CGMKpA_BlyR?exB{ULl8LvucvL?xv}94fgw|s?tZivI{?BCb0OB6!(2Oo$R{QE0V3AX9A*d&8*hab zEoTCAK!k%tD>ZB#9@oBUW3`A9FzjiZ-PXDxN9Q;E?`<){;Pm;7qo+QjuOFl1s04@XMyzL-B70n^5I=K@don24L5Nx^!Nl( z^{?X-GXHmifwlM(K>*IXBh=7)oj%ShWWkJEdIdMd}d4%=OuYjD6{8&^+YDOw|0LL!UT$BkIa(G_tMQIuU+0 zx2d_!_{9T5NV8D5eBv|4^Z2PIt5#myjK{)$60RxfD=heVLM-RiJsvxXmr=bMaaR(bO3x} zzXUM}fEeY6FB%6qI;=)yAB-K#}LKk?b3}XC= zr2&;Ps3DRB9Vv2#Y`%ZUkhz29 z`*`~d62Ff)+blUtxh&l47k1kWNryPx)?S8YVUFo}a zFl=`$T}7XPEbwEDTDy-piNQNHFf`LP!EoNEK_S%Rbn`L!`b^%G)7=UI0PhN`LeZaU z!t5cAX{PW9pCPeJ;%H~oT41R5S;d~v9DPUQl@l0{4@9CPAamIOK<#uUI9%IGy+iQ7 zDxKe9{MmjDkV<+d0y>L@L8T7I86E)e#vTBejd0LqjJFb9oQa>>69;_`qBb~!Ph9Op z2rgt}ISjjMBcIC$+dVYg?ky0jP2@N=xzn1+>yc$_=_=aO6z(34!;rsf*q9w!MW2E) zuiWuHK|XyzO7`wQvk2yhH!lcT%Gk7YbS7H2p=?^!EXsD}=@Xvi)ykfs2Qi1+o#5ib zr$s}HWb|&Eh4m@RV=QrNI zO*M6DN{vJJq`yj<51+GT{=x0wia_3+HUT+r)RGHkJEUl%QSn}hQQOq~9GsG z-oAg+;FLw^Z(Hh(JwWmiG8LdFcOy@$%&v9ob*`Sg4K7Zj73q$-;DCy7MLG9Ydf-jq|dZ!B`>@Q<*r;1zu za5TKPGdljg8$8P!K5(PQy)y`RoaTq$wK~lFWXX4S%60waKBJZ_hFU#8?tDc4Se+^9 zo^j#re|u%tYy;GqDh9<+8I*TsyQMO|_ap99*$r6;nPPhnZu}>YgIG?!8EXLL#TcDI zJW*~doO;-(1)iwpo{9Dwz8=E6G3^&k&-@~j7#26G)-rhk44{5TDJ58qeuTh4YCFaW z-2_DV5&tFYS27bc#m936#=ZbZ$%Lr|l}b@|e7#GgbH%0tVAPk73y?920kAb_pJl1Q z8#l$-YOYY}K-uHp@+Ft*dH+cau$wSd-^nIQv-vFFbqxS|J?a*yx~4=yxBoQ7 z7LVMK8#&bMaFOl^2IO2HjKzJpI0!$b)`F4b3H!;j2 zR9^W(=NG68{Yeah66efT-YYt7#=8i>oQjo5)*DCqzwVl;?zd|N;J1S{?#TZH;Q4oy z^8a(_{R03n89nO01R`lkB}4a0833xyDYS60Unl^Y4^jytIVjy;G)b7Ex2MA6JL&>@l+|K{b;Q()eAgavj zi;$wbfdF+Q5JFt$%fA8vgH9_{jY9Ro?c?1*Km`MEBvL+qH;#l#unPtuc?JFw_|d15 z^*R8eq%AR(nV1h2Ecd&XFMoA7fYLRqHoYX;rLJSxqUgK_rYyec$*BmBrDB$9%J1OW8Qzo)$Az@P#UF^MNxF^Zsjn>|aps*c$7 zhXKToB(@wM{FyyG6#c1c1__Ck7LGjx zpIHz@JmM5G;6`JZ|C*{idrnj8fUi)oPA4Ux{)*49DX4oP$)t7S+CHrnpu-TcLP{Jf z#;eRanz#`!r%nIh*2MzNZ=#du7l>1O(V^Q(8$ZM)(aO!$q?(^)O{oH9km7iw<$*|2u^A>q~<65zl- z?tnyUV~exLR+v^wf!=#{OrFK~UZ2fl$&L>cFMMK`RD!?~+qPM55@I*ULc)0awS@ z0`<1fMTV)2$4fARGYU00Uos;2Ux+WC7TOYtY1i|;BIHdy= ziQG|sb#no5k#V|Nsd+|@n`wHC8j;~EN}j4%P7nhX!Ww-|VSEYJ{)=uu!cz`?>`x3b zkw~9=*~Kk-7ma&~1<``UoMKl4-hbQaiON1FC;-LF%CtU?;2oYWV7xro8(W`WV$L84 zq29!Fu?wcM-(w`wQyxP}rqK^C>wQaqF-uPDk0okqx+;Nqd<m_?9qz}NZ>dniioSN zQyc==TiO)f(Q5L}ZdQmw_t}~~etcN$)V^4S5G3a_GTJomX3pm%MhriWA;)mE`$}I< zZ%BzmW*l+#DKOa%8d}#WZ6yT33Os58?hmzW=q-o$1gellMadhDhtmsaUuKyj5~BTJ7M4#3bsA9)H` z6TV?o>Dwslgwq#`b$jKiaS8NgHXG?sI!<$@BCjpfZjas&__i|p`q4OQ+OY$Q2^_^n z=aZq|)UH9^nEZrj<;s$DJjo%N;M6XrlMZ2g%7y@Z9`aTYml%zxY1*U@bO$bO_|xIT zLdSU-Hg|vk*#=+CE77K*fsM|uGVW7Pn$jD z^%N6k&_hHM+YOXlE9?&%jo;srjZ<)Y4q|=Ak8F5kcZP+;m^>CAS6$GGojz%yP5UYl!WtvG<#*u-sg#l{mT?w`@vMu&g%2 zAK&;(;0>}ZLO(l_&jED|(%EOxiU=xZaC`%Pp(Wz2Nj+7+3jmgnmvv8@u(ARK+i**Klu#SV%1J zp^|LKTzOBei}H&f+6{%whphFbz8ciF4w_LZb`9=)z+h#iJqCan@lE%ZFp|$6Rt;gV z$(5!FJ&^#uVZb zarIvKBR}sK7v^Pn6;pNb@$pk^#s+N@4;_)gF!Fw2q4-cyp1BKtpw3P8QB~YCO@4Te zA3EMnvN+5omL07WL2)1RMK+l_(oZ($bU-i~%|U93#^=q)+!-?u1VgoQ422i-pQZ~) z4?LC6lC712H(5EA4(nO{0n;*?$c`A6)h+}IUu^keXLV6K!Slg%SCZ^tpea4J6oYl3 z0bp>q^7Pee(2*L3vq;q)FyeUH^danrQMKf)+^6|;>MWQW*2))OzkJ0xzVK_xsbk;n ziE1D1e6Z7Cv*jtdNTf4=rO?LE6}>ZBhMz0Vcs_#RBCn_^m%P_*c@AZP z93?Qm(()m_$(2M+YcbVETR@T%Xer!qFTB|kJ3a7os>T=YX9&swNTK9WCp08JOBevx za&vA=30hLCVL39O41W)+B+&W8J(@Q3O?he)Du!Qp=ob?aczLIClRW9yr|>+FuD|sc z#(uZwH`jZw<`LA5nK>2yEc+qL*pRX$UxfT%O^pks*Zjfg8mCtsVd$5Gn6J%9&JTRg z&4q*Vh!F`-nc}`3}jOR4%1g zy`(UjIx+3tTZpr$Xg{OM^is-OV$vzV;7+(0**&$qg{Nd{bI*VZTeW%#wUX3vbeKA zD0>)Kc+ac3oDlKN3?w^hO06@ELfCDPo(9j%&Xp^eRgx8(`?7F5S$;XUd^NS^&^6o} z>%zwms}hOojNj>@E>0*patnXzoMHqi89bK7VeEp8zfY%%VwwLdqV0n9et2UarhPRJ z{R^*7%%+ELio{KK1!7R8ja6)tnH{grbDMa_8iTGkH7?M>Eb&s!k$R_e37X+G8t<^j z(|4_l^7qzsnUfxjCGHVXBRV*NP!c1xs&=xlDbCX~e&Qi(2IMZ1?gcF4+X&OoD7rbr z?{yWP)14!(x<{W*OD4JASl?bCb_8mUD?B;MJ#sbYc06D6eID>Mm({&Z z+Zot=87mBeen`$AJXJ*bjAaI_^r6d$`tU*mXif`W2gRxoG%LFbZ18roI2H%5=5?{e z5YFp~t7(gp##I%Q4T>f=sIk?lmm!iJRC%d2%COapP2XTvd`YuyqKnikihm&LykjIb zlR;pEd+S9Upr z@W7y@Cz3}FiQ1HsH{L-~5puP+@8XqyY7+O8bxuOC77I8$?D>WobzjNIdxfirDz(Hh z)h!<=j%d7fIKXp;SM|UXmDR-j&>M<3YH_qk%=o%baQBkBv;p1I#L!l(wt1P>j8kk_t09MO57QZ{?KM>>tsiG0?t>OCI@D~%?`%6AJ>?WvufX%%S`1Btoe$b zN+1$R72i8bqA>}Ksdi8FH~aL0ZI3yfNQDu&9-9&yJoe>TCF1Ze;d)(p5XCLB6N$$C zW=rl+>gF3o1V|G-Gs-w2li1jNu}h8Kz#%c7BiPB+Uo8KE)^`h268r&SsH?JfD6$eN zkO`NAukRU=Sp8>_Y}M&#^-7x~I8Gz5+q zFoUWNJ~%q9uvlLc^#%1~Jc^gXDzhDasMbPfHz&GLfe-$EKEcm_@aC~EnyHu>BJnd? zq!+vvcue~7yt`S)nkcQ-*H&a{=U<_{d6dls8<`gu#Qd%r1)sf_^i0{41(BOzk;@^4 z_p8GYCKe{Wr|B8tko7`Q9e6+;rrE`4tif}2-D)%S4VGQEz%pej#7&@zcgb({K=^HA%r1 zi;LMU_w>*XQbW$l25@*3Maj24S*usKxbbBy6t1<1;XFD;a3{@Plf0*jK7C3M_XK5$ z4!>dXCRFY-rKJU3)XJw(4DYgOrXJd+IH-NQ(rXFsU~kNYb5&a_X?#XT0Kc4AL*57Lh!6~8eLu#-d2@`LPa zN8ILEdD!wIM(~eXb&W{$1Y`iX&lAHuADC{@n13gXL2{9XJ}1424#=H2rY#mG zUf}E85o;Vhm=*yZ%-8sr8a}tVyS)?VE?x|M+hS7fj89RUO|Ei2c+ti13V-cw^e6yg zJE=yuLV0(8`~6gMrJY=55rBP=n^kzygtQgY4`l~8M&8cAph+;OuFOOjH!r z+}~!J=m}DfLsvH*y?lZaqdgp5cx~>zg8K>ONUqxw0N#2|BYX;0xWBc&qB&T?D1^TA ziys+Q^PCTIkzNs4CrZCZ^IzcpKMt;yDmC#}=D&BQlQ1Ep9uN`LlX*b+mn;5q)l#TO zz6bM4mpHR!iRSofc-V@f6oic`hF~J>oJfn^6c^=DVoefBqT79 z{8#*aSA~QzW)w3wE%?Te_k121(Fr(+HTAOU`({e_&wRcL&O~mpTStn4zQ6oyw}j-p zPH!|?h)1Y!SXve2SIRzPjo4jfN1uX{D#G1!HHNB*`%|TU8UnB+J#gD zHKpsF6W_l+>J-AOy&3NI0{W&T1yxGSr_t8rOOpW%>c38cK`RmaVK; zQ;aB4v~M?z>jIsI+q}pe#6%{)se_{d_yKHvLHIv>YiUOaE7p4El|1-MUWLQArj`CY z$sLo{Asw>;t%A3B+)qPre*3iDK0aviDT5f^rXiZwqI>}Sw=d30QzFo)CSTDi zzCzdVFrI}uVnOpwm}x>=K(}Um7IZ8FfCpSGk2+YO3&6S={4W3iC*=*X;Tr&eA^r-f z00S5*Z-|Xcpj5D@h?JKZFCK~jGxjivw0=&shG;4?ozkx!FE2ITbgR|A^LkK2#nZm~ z`UBTQmV5%USDU+Q@Mj{CV^@kC5%ZHZ=gw#P7VfhkWU6v(lzOavuOW{2)sgQar9S&z zULy1z1s{DnGf=;IOSa#ruUf%m!?^tz2ZaVFKK3wR+nHh*_A`h_^rE3tV@F4{n*OpC zW`8zhWqvm<t*ivSWtk;*Q8m^7NoAJrV zk8A&EOMcLsvUich04y9LRg=3@;xqRtGJ^6_T}4WzqCgnYYnG>z+B=q~S(+m)qPN8FGR zNWQUOca6z`=|x$#Xg`!rTI*cxoU~0ta@*#RQ7wh)d#~lR3>2-tZKRM;co=0|rz{7F z7_616=fKB=T(kApZ+&~xsGm)C9T@`m6E;ua{CwQ+++It-@1cjhwQts!6?(D@rQ>hc zh_52u*CEnarNpj@1slh6ROYA^`;=HO;DlF&h&`OcuO%t?~^*&!(B$6#IGbtsI6Ypm_9-D!(Q9Jm#i1;D+ZdQ zw7tel!CmK+@(E4cuY87um-I2`eY!4OltKDKr?B|Gm&iv_46an-?PyhSV-y4H90 ziTuLF?SWjFb*>jr?d0L5UvcjqPzzIq`>)%LjMgV#%N$d$OPYM#saS7VUv87G#Pxfx z`%=U|YuPO6ZIAx9zU)rbi~ezq8fE{BzHoDQ#2t0BpShnM%CxmbCE>Mt-zIvOJAcw` z#$G=p7keO=V69wQh;_7TG=V_MTTE5@mw@Q|DFk?R}J4#}l{ zaWXB88;`9}ZCxKu7D;)?E3DIjY#9CH+ygJsx9%;>a(MQhT=43QL0*Wl>9|;IY%$bs0|b zizD+|S;i0CYt;KnC|>9W5Ekr`l|C0&%?GZe_~tv>-*HYc1}$lr*KkWePZgZD3mS1P z%Zgj>Y=w>;J%tr}Al~2!!rK^wC2*3K=Wa-SJXlXotQ;qxAc8#18CmG#4(tv2kDCXZ z)TW`wZ>8!{AIZL5ZNpl9`)Op(ndDoaFN2z z^p~qX2_t|=<@(QVBN1qH2ssmg<%Ie2Iys{*6bQ9BWEo_WgFmqkt)^EiGNz=aBcF+{e|$Go<{O6@F25zkjl zb9SL;(0wA1@}+-GG#)Ksb|;g#?=gD$J2ed#qn6}0wnaM)%6Uf-0LJtCl2%Uxal89L znoFFahi#sh=u>%I6Y2;$D*vSs_Fa5t=%f#;?5OZ{51zr~RTIVhN38(l`daS!Ik zmre66HsU;j1e$uCkm&5WWutVpE9etHk~0ilwF%oNs>*sTMsoDnr@Do^q4Pf{P@mDm zcHG*sHTd98jqRJo=v0`hAgBWJq);KiCk_2*1x`A`5G%1fsq^(fLh(s@Y-^**!z&MhYCz!ikWHKRl7#RP}Qp&)y z)uLt(%7N-Nev1Ggou_XcK#KWo^Rwtg8K_sK3! zvcK7HN!3qb+>TO&vvkb4NiaLz1jT5~b=#j~u}qxopC-L{Toan5c~Lv?m-fRpMwghwEorg|GL#Ty5QcuzU*c*c!D0iW{DcfJ~JW0RZDBJ|Y7n`7XHv zz-^!i7r|kf{Q?HkhmTc(II}et0B$!l=U+_!KZYqjp+oDvcL2!Wbi02U8Wxwi1Nc?g z*|*>N%TG8THFErN4mA04wExM5aM&huBKJ;&(v$Qyw`43T^F!#RB_-X__w_TpVopB$ zePq;ePlu|LScn4cj|?xt+vOxF1`G-iwP(5FW8aUIn|a;|L*|*Ys)e0P9j$ci>YH6d z6XG}AG4USTM_1wML}`5PaKT$meBUp7{0ia@m7Zq!ImqVXhOAN1zr||qiE2?(GR+AY zjqn`r>&pq3^p*Ygu;Nw?>?lJPk4Wdw`94Vv_B7wtSxrWQX&(q>{TQ>&^q%7t3CmVK z!J{1Xo|I9~eqNB^7r(6Jac9mo1oddfmhRw+DJy7--w-f;>GG#QzMS6ptNVvg8liNWFms*eR>0x`99H$=S8@h~ z=Lfjtgk#b9Z_!_AD}HN{{nDYB7v0pNEWu$wc6M-JUw2-9FncLshar|f@6?*Jndr(y zmaJC76N*skrBQ~OwT3Nf#$$~33^l_B2qS}mzA9jxXrnHq_y4IRf>ier^cbRrc|0og zY`tn|mr>2gerXYhu=sez{3rEos&ud5smIM1rbtCHK^UH{b=aD`!%(X|^C8l?{A*!MQMlw_M)tYz&5SYbA0QdgMd%*4qAF7A9hsQl9EgG%O}b31GN*-g_LbTiI&3qHcgDNJ%Ud zCs)JwFH!#j@c%ux@H#i1%U8l*jIvahg164k*tDZz@|Wb;k2)v@;6%p*H>K=<4>$=e zIzg60d6`y>f>hI}Qr6-EL~IrvcG3E3$lw+!57I%b{7Gb{d-Ve#zH?YdZ`>`kjBo^ zAxlSdgU`15i!BSZ3{bxi<=_+Xgn`;!J>5OEB0ze4Utt3^!Ju13US9;G))&!_S{Em% z0KbH&1^?s<{FTTGKAtdu^2dtXq8SUk`w9yNx)FdxkQG)1y1gUS3s?d`biQ9&Jw(ez z9XU|O1gHS!@xJ}VdQCoXKv+ z1_5w!SA?KdgeLf&R%ZEaFi`%2xg%iJU>Sx>Am2S1ApAZTW&H4-Ghg2Y0Bbk+cY6E3 zLW;X_t92@!AG%)Tv_8JWG zNuQc{bkBJuvOE@eeEl!T{sr0pwwIxzM!(r0NNyBvNSDONO5&X2rdBaCT~&j9+cD3L5?j{QaAV|vo2!&p z-vk5nA|Wnm#%*X5cLmUpe60#weC~^+8+6cuSOAmb37Kx6Jc!r&IliX>fE-JmZcel> z&f^a)Kmy?RaXq6c_z*6Up#>%YY(GXQp<@D|FoX9+FByO_K{D6s62uxXfEKg^AaA(& z+|X!HbAW<@0yKE#5p4FC*}PU<*Dste3IHGlhIqmu298S;TEGDY^g+CZODkZztORI* z2q4({FQxy5^#8xy!xuuCl7Q_+)vcWcQhH^|0GwCi^FEiQE&8s%YDhS-%sb zh*bLzR^Jh*ew48_%1dqsVpeUw5c=sCbDh6OU*7YDXouAKso9C8xwH*rE8wjn@W<0q zdmW?lw1xS`#K}+NN&c4va&FN&H7`xuWJAWpg{5lCwJGZRhCgaII<9^kV?$AUoJxGj z)8sjIGN=(8KezIh^-YSsYIgPT&`9aeiS9DTYL+*9WcAk7UjvfR3qpLO?DT4$IwfVB z)bIl^(1$J{>MIpMHr)>(uvY>g6&ZU#Y6m~);;V5iz{H3FAkBURKm#9I0i!D{03Rf!9{*gBR{Uszz}!sw*9gv`6g5IphWAIVS%H zd+z}j)$;8NRyR54oO6znlT8N60+J=?Ac!cL28oh$mLQT5P$Y*YsGuYTC5YsVk^}@K zynW8O|9kJ;xp(HiH}C&_GxMG9-mz-!TD7`%?X`ZpYOVW5^kRBmbD5%eN1Cuf8jBy% z3Lz4&3$_)WFD8ZC+@~4kuaOEJ@scn7X-1p$GP$=PB=Wr`^X7xnDq824dWDG|m3<+6 z&cbel%_e0BgKvK@cTZ^&{LIzRTE+QBh1AT-lQn5UL`=QyL|^{>vVhpX#c2Q;NV-=T zAAx5T_5nGUNqW@oAEBakn||b`Y0f&qXh2R%zGdiljif0Tah#t-RCh~@3B!)2*tDOl zsq0&+1u~A4_bhL<*5-Zpjor`X-Yf_iJ?Wdz0@dVlx_)TdiV3%yWJ?6hg}x~o6Y36m z-kMqj=>HV!`M-sE#1Mg$E|Utnn`XE=hl2mL?ypY5a`}{Z9mNPa@U9L8>{4uk`kOUC z!I4fP3nM?I2?tC4M>um;K4$BID#n;_flh1Xj$4@M#7nDFduYOd`MNuG#$rfdqVFl*2>*6_``-%# zYa_4~uQ0Wu@}CMo{WtjzLa32Z@kAq6Q~u}~;CA1ojU)F11*y^a#Z0=ohc}!o9b(HYm>0tH?&sI6xF*$C$ep;p~cC)Zdwf)hZ)3+t3wB52_XZ^b0<5)@u z3{qfB)*M=#QG5BesLLK;Y|R=Q-u(UCSu*2v&jBY>`{G6 z8C`Cn`wb2!>rJen*~GQs$OVIwhaK3dHwYvnD~Z1gB)nR+EU2Z%<8JvS>2ztel^exS zJhlDYQqti(zlm1e*Jy{kkF-uID^==7k4~TD+sY@!2HJAWFUD%w zCZhjguYFNZmwQz)0|S{lF)i+VZ?Ph7tujaj2r)+Ex^So;ThC9TA;7{EmuE06f%$`R zHevl3|NX?5ll+5bp|Ei_ZVA`?25p+L$?Hdt&}TUrLg@!g%eA-XKHfBW%6>@B* zQyzbu*o9^#c@FF}Tz3|4dFw($NhA8bxDzG+y+$c<=#G7~^rsa`Uqjo;LKycGcmG7O zCVj=Geyh`)aR|LZs??J+@?o>XXIn%uPwG()~48FneJ>W*EO3VfZJbO zIu(*kHnH3QM>B*Eih-&P*&p@EDP@6&>@l*8mdSi2210)luVcFRoENaX#j@~dB5nW- zF;Eqq3dN`fe}8z*>H3m>TR9ex+vV=usR@y|XkSf5+y18E*ZhGS5I`kE#KRM%GFg$F zHjMc!qZt6Z7XAnE1i1>cUf0Ti^kj^M9l-dD7&Y?f+AvZIwd0u;K?%?r{vuW{Oa_NkxAL{K!C14iF0UPTyy@)riLUxu7m;)>Hj1izl-$1Hgf-u5^3Y= z^hRI)k0ME@|4+)l-*BgYrd#BhAUHz(TlF&|ni)q95^21#Aie(|(l4l`XgIl-@E=;l znoV8It6+OIOBiIT(6&t68^)i?t>DA(kk4PC6W|p~ zGE^|@j=ugx6JK|I-)lkSbow@-6>S0laY#-%H1#)h@8C`cNxl_xL^0<4o3Q?7_HW5T z_sl=58KCLZw{3a7)CQQ6hkv!rK|m?W=l7r`^-sJ`aqA3bFEOQJxJQCrb2H?{_*7_e zrd<#7B*0p7O36xLipogQ9~e!#FXqQH~YXUpRvF&EoMy%Z?%zuU!MYaSy9jbWyA(AKI>xQ`ybl z?4|QwKDyYMDDMy;ZcZch#t<@WTIRBmXn05dB4+x)JE|n-Yin?e9h~A}l;Ga!t8-1k>iz(%HP!Lz8n%JcZ z=pnib*$s7fZ(=guRnqARq(RuJ+`(TJ9%eWx+%&Rd7k~>TUpCw(tWeao<*YaF48@o0 zjLZ)`5=9Qg*3t~x=E(k#9j_eFFh{p$`fXFjpc_%pr*rqU{{?kG0FK1vrXwtl#Pmi= zzwo2kMX~iMH8m+EaQ)!s0>_ z9QGq3#ZLy;7e_qs^UA*M+A90kUnLos?5Z}S%J{ttuJci9tV-jor`KOGn71F0uamkR z*SuTo|1hZ8vZu_Aukoa}Ae!cJ_e2+Nf=X1e>cMq0uHxh-&oKMv9h2nVnCz7Fd-Kuy z)TtDYrSU~qD715JH5uwB;H?!qPOA@*0HY+$pfZp|s-zyMDR3|9U%*8@iVAV@ zT(l%tPgWW`wJ(~q77OQ!6`b{xKkYued{tc|tLo!!uof=g^Ru=8;>lXpDz95YQp8X* zSM>@}vu_k;$Nd?rTP9V#jkDz|KW&-brlzWU9~O#LwOP#$CV4i$3ap)F^BgCfdJHqG zd|F0ny1^-LvUkCBG%Y4ZhB`@jNQMy-@X77g{m%Jjmx$BmQeU>92bcOBTCoWHhQ``- z{O8lrO`s}0(foenA#Y;_MzxsPKsTB>@4-8A3@_c%?O#U2-1o40tM_m7cdyg(N^)h0 z%j>ZePD!#i?3+w+WE}Zh@=vjASy8m;T-oOf}2&ABn!$ZWcTzil|t{OMY(X9DW&-9o`h=p^Z3%^)| zl@IeiwG-iQ-6LKRQp#|ucURLqScb(F!s-7XYmzY7@TG*oRlnZ0*crRgQ(q*&3K^WY z8Ii#WsV?asfK*cU4fk`?xyP^Av|rD2-TS1E-hgJX(i+)bczz3H0XMlv#My>Dng~)9 zfqK$1>Gq>7Zn!C|@?cKMO81fjXaR9X*;uWrg|cEC8_Z|#d~p0^k1}BVVA6k=MX(|? z4atF|O=cM2nB4pO(*IipQdWSNsO$-Jcv8VDka|qMf$MkcFt|~L4bxLh_;|DGhOuX+ zGSRhs5`TA*w|AFU{YK-Pk{HP4S>Wg4@Ct*_qag}iBMY`|o>B7c%+)iyST+1v7u%hW zx1FlL@t3>7i>PymPfmsTQ8XLl--O6s zo`>}I9k=&9eMbrL7zlNkqL_uMzbDv@r42liD=VZ7t4-3^p0H5ga4m_cSJlj`@u;Q_ zJNxeAc=Y>m)Q(@6e3Afkq2rn_CB!s0pZ2HQl@E%D9b2o9c+eKwcPAoYMnhTTsk4{D zd{07~z0_R*FsI?5jZ3|o^nz1-mUbWAemMz)2*t+!c(EfU_A;&c%8h(FC-sgn39A2+?>RYt^buNLs^US|V-?x&4EgcTbHeRp{lvEXLyJD&o{*JM ze^&|=e}-FHeNsQERbUI1R;qKrJ$^MW*r{wu8{A_+<%p6S)o&{qW~(6O=MoFJA2_YZ z-u}TN;T@Mrvg1~-7X}jT#Mcc8qdZx=G!rG(c3-C*5q)LSDU9_N435%kk-5l`HIBaiXQvLX3D;@a{=Qorc;bTCnxxFN_Za) zUyNoQ0SZxjLJBV=Z=r~!i6W9$v+ItOWcH$Q`>%;tr9Z8{pVc?q`^otv!*x)_FzW~I zue8>jrogR$WxkYq$M!~BZ+DxL8d4GHFC(9}ZHj+e|3*t2CmK+-J_xg5A~XtoKq8h* zN>!q`4`!XEemCx8m?kKf1lJl+haaHjA2x(nPdr;{3HhWq$1Exlh0{nqpiQ!t zH?!U9ig8U3Y*IGSe-!BzFek~CD;xpXWB~tS_;(ob`bW0Paae zy@FaUql-+6p}+%afr)U+0dx((D|_usG^(VxTujIqy_foQ>`&!OdiE+yk_|QzhNgJs zzU@HA%0fCi=Gz!y%O;_E;iIgRHSA z%5K4oQWGUMh{v$d0}oI!7$h$x7itp08_Y8Hl`->pH`oYz_Uq=R1i%wrr(wz4a8c zBmZXPBfAz)yuzL9DEdZo-h|bsWv)MLxSse0Ey}sy)~O#2VDyWAvG(>)u3Kd8V<4PO zuGk*GsI}y9jsmp%XkI6T?Qaa6h~2B($2Nx^q*^YEW>u8jZ0oo?q)uxI*H~K){iwLZ+#mr5p)Ku`pn_Hplj@Siet_ z^t*x3H4}<#YYibY_~hRnzSOGrYfl3(*7I@Y!kafz5*~d+`f67Kv|FbTN@G*L^E%DS zux=8X-AnZ)f`03)Akx13J6fJ20??ZLf!JV3TGgg)7kZT;fd&*&VMA|tm5t$-4gCZJ zWPa*~&>L!=_8$(}Mmv7&0Iqsm93vCz%tF1_0oHT%0cPd_1UvQWOu4hSS6Ea*^LK^n z(4{ASN@KqZnZ^=(j|5`%5CnyZ>(yb#@mc1ZCIG2W*f!N1g2D8VRk06PYL$`eAEF#kd>80+3#LX&6Xb_fucJE9@91m z&Rq?>cqGR#4=@S_eX9tgBONrle%HU&*#aQq%U1z(aT}|)%Q(wjf7woeCk?^n3loI~idv&kF*2qsp(gYmU!I&*a6amV`-;y<$EW?>A@b$O3} zAoACw;3~K-mn+^Mea#H?D$gkiWedq~z6^ZpB)9y6lkV!s0GogXFl?Zv&>DEQ&K}~#F+Gs6rT!<6hn#jKJT?ie+^Vu#Z+jr{BX0 zKinJWClmQh;s+BmWO}N%Gi)TIT+-l~UL%xtKX~UZYBw0`+Y9S`*fGN81$uR<3bAO+ z8(qhH?8AV)c4zIbCKEo9H63|Xi3IkaxkC)L(Nw)Tj7gcpGZc7z`2sj?U>wfYyoVa6 zHi4(p&vkGblsC*zuza_Z^=bLSc`H-V@kd;|mNX|o zddKguo;^7lt3L6G(Re<(f?vJOBZbOiSZOP1bsRC`Jrjj=W@oxENPAVE8NePaEFbJ~ zyF7B5@F0(?}x%Q~$JTxNbEUiJn;)Tr#oNftt@MJ~N zzkT6sLriF<*b*yd=IsFU6Dl1g%jL1D2Sok+@cIPYr{g*SbNJy#%J9hd1NhMq#DHM3e-FVGPI9<3X@)+YT-4%oAy1p*4THLOSpepm77$>!Uu)v`}CUU2zQ3~F+jOf$El0sy&sxin)PtybB!XA)Rds0UkV50napo z!)fjV5-unrfe~O>RJb@-FcISpTepq47=90nR|O3){_x-J?S%qckDYXw9RN^ zgLPABIZ9M$ChQ;-IX88cF|7yibN5K&zhtJ-UnAa)=+YP5^m>P}E0f7bq z8_19LnZ7LuvYKMD;dSCgiX$FxxFx0N zp+Nd@Wt1B~%_ow){ z8lY_Xr_4YWupoH%{F;!2O@J7BzYOpo*AT!I0f3s^A9(mJhE_0#)kSDS%#U(_ zHUJ9+O)|y@SYyJ!im+id*Z}WU8Gl01B7l!AVnbF9P<0E>e%F$$=0lJhoUE2YPkO{??CBIfHFDeTpl!gH+!HvjxDIEBYcl(@R3v>#gF^NTh z6v38%(8E`kzRT)r8u7{2t9M*^a&W|Vf!ZNu;@*piD0K5UZW7qzd|tUw)5b>t^B+*G!re5&Et zJQO@lA(mexskJD_xx?9%w<1^N#si~a2qh#6Q$(oOKF(FBxgrzh)2w<8fNo4G6*Hk~ ztF;!{@0g_q;C$Kp>5$s59)WIhFGsJBAm))8-AG9>HdW?U}J`#NfvC7w%fP@dzg%$@2#kS|tm|h~o#V08h~% zh{PGxLEH~LZep>q`WXr#=GuxJ0j%|Be zp2?4WA(Pj9S`zsK^MoU0G1n*T3gP2aZA83|hS50acY9p+X4p`?e#}ku%PDykK1&$COVj?%m@8SW+aQqOcYjM9smT($^rW@ zcv5_bH=7L`+51}Dd%^0AvDiPfm)VU!#0DGJ@!btzcZmJ zX1!A)$sUrYQSID)!U*Rxw1Ht(mRJyvpv}&YGywFL20dmRI$Dago4FnbsyunYKrcFl z4mLy4Wv@7eIljzZzA1=nR)ALD`yG+qJMZ-JWr6h_yrZwuw1TnNXh8=#j4Xv37`(5q z8s?};U$_d(M@ropxS^=JNDDO^jhkfc4WvkP35&R5xov|P4yQ4GC#I3dD1j&mysk$) zQ~YnVM6&o1c00anMH!d-Z-hFIZfrYXYK00JAaBl0ic0)8LhQ9}_)KaC2%EULji(6{ zT}V%3y@^n=EgAbObDCG3iQOg+{tM3?rV)jp6b$<{ugwIge)_or_9aV?dR zA2%sfY+>vj$Kc_CM;tRVLfGynK~Tidp88!eUwz9|2DW40*N+8Bn~ z`N&j#BZ1ue`f_EOyW;wB?%9qs|8~R4#jvUpQAz17jKHaShk>w9*Ffs_&C8L}mExB<% z&Q-2SLY4wgkL0lYWCLI`WoLi{F?Y2zDB$07+^a0Y{ID2`h@{mNPLmFNc>h#C7{?#{ z`1Npg>iXJ2=%oAE#KMUBW!T=r5BaKB(Y4p;VZC9^KaDQ8KJ*e7W%l82`Rt+nR*br~ zT1it+FruGNJq>H`q@CR(2>aE4&G_T`m@em0Q1?ivY4~XLH8Y$U>Lvd8VCXVOQa>iP z!&i(I(LcF~A(X2)tOLVXh;Id$dkxG3f2HLwEV%QW++4n{xZ1lI`|s@xXIv(q_H12u zT;KRFcE06xo$B5VE$F%-VYc2R}UO){}aR&qq~9~^Qc|5%eFN->DJ z!&Ptvq~X+#v^#+$0XGdXnoJo`!tWz<3I-wfR^WHouke-T(($490xtWS(7P^Jmo2|0hC8Qk_FlYx2V+gYTF1p zYL;EhUcC|H2k`mq^`CL+aY~y*$Js0`e!)6;68`1Tut_FSaw*}Zx{Watiq1! zKGzq0OPC@Ndrko~2g$9LjC=bMQ-2PJu(?|Tt92c6Y=vT7C7oJKM1DzI3HrX`|AMpi zTXakGIGh>FHKN;f`NLyMM6{Yw92`B&3yrO#Y(*4x_ha!Kz3JF$r-SW0r&g*=q&!b>WeqMU#ziUk{wGfD+M^P=$LKyomtrJH)IFB%Y~ctc|js z<#A$_8K0(-P?W^7;qmCjkyxhqoOW9hr+`0O!~u$3MGWGq5NGSV@M9N!v?V#Ni3%#r zK3p`PinGUp{!m2s@+Sx6SSK3B|N4;onKHl|^% z3)2EzdOO5oQzj8tD z(#5_vgp?fENldT(nG1@U<5L?_(J08Sx%yWwNWaK?XsR%N+DPYd|Ib{I*ZI~j3KP@W zr0j=(%gR3~kBhVniWyPzo!m3B#vSB0l6k7B;PmfkGqkqx(5| z8s8Qdg$XL$SEJ?!FysV^`4SbIEOt_)5EDvq$FYw)G6p`W?P0-?p0d{Lf+x&8OP(-G zH-gdy%kVzTJaWBS6^6NT&NNAXDSR~dw-lKSLUwBo9PQP$j-@f&(@$L0W`qW+@Va7g zlP_L1JZleEu5$gO*dnJvDT0Q$QFGZ%ydyfbx!v8nFW|ZsV(%BxP-;+Um6wWq`0hPB zresCy5>5R2A8>gFzO$GHciV%I_;td58#^nC)y%~hlB`0U)sPaYcRxJ(q5q@x@X zl>5vL6m5^4ZrgG-cODHdR!b~d>LzH#eT;>=8|lPZS5Io|QextfWfAk#XK&Ii(e<#U zKG4eka$f0l$ni4Cd9HBE!SsW^AD2y+%AsrslducG_!EqR(jw=0TtW>P0PdQoEM?MI zzvi`lla$wnH+pQKMd-~M5z^huX=n<>EjvtF#RtSJ=qr&*sRXH=p*DQChX@PU-9@L| ze&c>#OyL!J-uCR4lZ)*mhsj-xV`Cn6JhEE??42gGZA!_!N4YnmgzNj6ay$?%Gc~{b zQ`EKB7E8hjn0713w!eGR3hv>L^9r#~_9sh$d*OB%xN0n~rf*t1ZZng# zC2*7{Oo+%Z;F;0mv(Cisj@CKx+jrh$di!4BjaZhtW_;0Xe2vedz!W;xx8(FU{Zvee z8^K4c&g1DJedxNKYa}_OxO+WUfdYf;ci(ks&D@aQr<_PG@V7H^ooM&ab5AHr;$`=3 z3tD7jlF-HRv|ZMu*%K^b3pf{+d?Y*H8%695d0O|tW-B!RAgTB9mJY7j{s;kDZBUHu zu$2=^5>HIzG{^gwUSaKGfO!FCP!!R;+$8!bou=vO>zfZ;1gI=u4mA*U#`n)tQ=jFK z?#2akPT*pXw05#S8ePVzA6aJX(% zH&req&OLhU%+8iS{%$z#b^AxivvVimb%oVU+6B$sM_;ez*Wx7Vg_ZmCUH4R)n#h8M z=Rckx7zKG~!!pBvesZ@Ga63I1p--mXYwbmJ1#lAsw8!kIX!r}plhQ_KijHq-1$9Yk zOCB2&1%^`i&09B8ZDm>0B7%Hh={{0p82inEN88v>^GPIXe_Z773X{oQbK!&x8*Zx}LbvP_euor;^$Ks%K_O}Ds-+!z zDQz~#?uzVnspsJ^!%S^w+^TcE9)ZWH+mDI|Kbzg6<1u-NJ%5^ZIb$@EFSSl7t1A(G zm?-c;+)g=&X`zC6CDQh}9x8g~GfC}`$!&d~@;P`!B@PNpZ#z@AUR|%vKAcczxU-Eh zlk3N6k#Hg5Z+0bo#e)jR5)zj$t!f?F58l@$JDL7ahp_OOs+FQr$WFW`J0rB$hh zZwQE6ew8T+wbrYxU4$FZ{yfl#emSZ**&^|%{?j7ngDL(LG#<$rQ9(vbx^hqL=MR$G zq^$F@mc$au?!W(H^;AdGIylVRr5Rq*-D(L5J~P^t?5g1{z7Feccv>E zbD42krM=lBk=*A)p$nPhLE{eIjRtsvxDsL1>CS7953#XKsoH}4Q;^;+~r@Kd5 z`J4?k_M~+Z8Ky;(o9*~VJ2_KxN0vlJ_WptrVP(_k>vES?z>6uyhK?8Q71mU08Xmdp{a+Z_7t7RozGe8635F<43rC{BmJHWQ>qj=7~ab%WPbIz7ssL!1ygc* zE13R*H;i3*<6>8AE_b%pv`As zz&v(oC;d#JtKEQh%xKk{t(3@{L7#UAL}s!!DN%&p$65e+hqI zf3dM6Su1oER&+(!`b(PjtSNvZnC$9aUhp&Smk3{^WRMpV;r3Kt}m^TOmmBKr9pgFm%o0UyuS#NK|xIa@p*I+t3({hf~`ax zEyagPZJqS&3I4bQrXJSMuf5O+C|M}s&(wD~!#~n|aekt&ldaQVMA26IsjBWnFi7TNtCqwRM2+wN@G-(UDO^}((9 zFP0&2=O^WN@Q`>BCh8#{{N2mq>io>ph?H~vhg~^jV29d$LlXAU15TZo`ohEyVGGs* z)e$Ol-)fEep~zgr77eiJ|87R2>V8QaFQY9h7UHD&E%4oNzM=d%^Bu_Trklp`L zug%h_jMEjKe*r)iFA{5xRREBst`8lZ6_N@Q+sI*%Ac;!ysrFEmG?Q?mE_fG{ZX~}w zHt`Cbv9#4{-;)O|lYTS_6c5nZm3=IY@G&>El1WjeAJVxOzfYq#16a;v0l}$ZQ+9sB=0oY1%tfnfg2>?tkf($s?Zg`X@&XI{ex)1dKSr9a`5JoJM z;Nxom5*a9qsxqWocRS*}A-EbN3ul68)*vj}RuGZ&$ZWhCy-}_!HduXK02Y9uqBf{wpSKFqG7^tVgl~c zDf=ToWfTP62hte z=o$cIUnGZZ8 z@h?b-KoTqitULEA{^dr5=s*Y{}V#6ZIbO9`|xLXX^s!j_xynj z%JUQ9D@j)gb6yyizQj1p@L(@%UdN7yJBK!8O7Yd0hnhaj>URUlaCrSe2c!@D@osOd zTRpYdgK-eqx-oQl-zoM$@LRMSzTn7gb`29p>LFodOHH+}n%`lbyhB4>dlvQ+op?9z z6^7U~n(Ga3qwDoamWY^MXUzkrWfM9~bKaYcUq#I$DG-ZXW3p#w4%yq`7h?7v3$F@H ze1^4oobPMq(&48$wQ!P2vEdk8tYJ77^GzO(Q z73@E^izJ=dS(@o$V(lX*Eu+5eRU=jzjUBnw=p6jzWS%AkeZR<}{qXqv>m>pOBDKU7 zdtBY*KEJPvc{dfN>V`6D2z8<|^y#FaD1p}cP(1X|dzt$-oDwsq4$5?5E%xq&!WS-* zD{=I4dWESkN4GP_jmcV3U{$Bbtl2Y4)+L*V~K}{E!fv@S#eDce~+- zq=3EYQpZ9_vWq?z<|*KAV&-Q#+;YV`GC;u3S-$%A(MgyPvk?<|C{Q;(NbYD`RQzgDrPZLdEc6LR`KXSLU&ZA!Ec=xMJ z+w04HgT1r3{n@71*}=+R^hbJ|D1Y(ZwNYa(%qd8@lIYawb&0On;%_vpU$6-j(apjz z-;#00TY2Wvy3GYI;(FVYFv15;XHaO=UB&iNrI)f-$Ds`*+B+29!c z6kN46H{wpT*ScPQeyiw-edPQD_k#GwJA~moAGjW$rO&c}C%t|5dzNIfcQWeJ*Lh}{ z%LtcmmvUm2(bJHr>t(ZtG(3x7VGZnQs|i<_|JaygHlpl!5}o77Khuxk>kY99N&KSZ z-ALB9aR=`y>^U~N$}v_TQgNiZ=dC>ap`b_rodMPdS%ln$=Dt>~HG2Wem0|VmXQkXq zq_jtik)lME>DH}D4=&4`m#yskDjCmV{d&I|{LyGCLmgQ3dZ!PLc;1Xz2J7?E+8;?= zwKdnBrH@|Z$x#1XI6N*Gkcv7j!$iRjqSqs!14o^fIR z#OLmjDmj3=jFj_sK_|Y_Q-Xbp)YeL8frN@KB*2)*l4l?Z5K!*=Szv;z z^{b&0GA3=rG2i5CLM0Cf+2M~x@FteuhwF7j%SZeCnflev)pt|F&-}C}0YI%gW z!d>Qem12+}aI5p(nd9~u`H-1S4#_1c%euFUtgb6$1;oI2s?kb+q)tqjPbNe^ zG}FS`XqRt!U4$S7bT;$TdPtt*n7hiKj5$E+mox6uoh6dSO#q`Vt{uqB&ee>|ND(`{ z%OW@Ana4A+2pO~7bkQq92qp5V;GG)3^Q#|8081gfwQS*uB89!16J`pAxmZo{cTov9 zotP@Qk4%)}F?ZGNnS~q@7!mlr5gD10f-+@5*msng65U)yqCAlselX)h|3jo5z3mQ-dgiyxDhC!z&C;)rSkoPMO8i?f zSHoiE2ydWLZ#}RX(WfFN9GI4Tcfy~e$;%^+G9Bd1m@4hUr@gZxCDIoa9WTabPtOSceloF+N_r;_05f+Le!nCQ)N}0$rYL;KNr;`+P|T(VGkmCuRN=mRY>4WtgAt z{UoUCnQt1v6k0uQ3s3nHsCb=5X{8j2i9k#Q!WhTL8l$;uU2%qm`47;D zB)^4Y_O5VP;g288eP!>V){Je6n_euYuT|y42vW5o5i(+#X3g#Kza|%jph6Yqyj~W8LEouLnmm^%^Mdl_cb zg`F|iLll77XCd9!$kn>se8(9=fn*ll?d5eBTzNxwp?0+QYpl0 z1MmAm27#>HcMbNyFaYeJ`E`yZ`m>jIoV7rYDwD&v<{?`l!}teP)D+o#sOGnQYU4X$ z-@aMxUVlL+Yx(rfZ>p=wA=u*&4Uhm-23bpm8 zRIJ{q)<~tk<;;A|cgd6Riblj;&*vmGHrk5W{tP>Np#&8#SR98dm5yIS{L%;j;Y#q7 z(RG!MD=4-yJ@u5=61kcaxG#2OQlv^q^t`R<=(M+v>f{ap}h}(QK~%73Zr^I z!=WEGe9j_->)i5c1_LnMd&+o-$f1fkEY)aHrFvz5Ip8?Ho#mQ zD+X!0**RTwXO6%jgDwD|OGhP1il1< zJlB!2r8h;(cO~;#o_MeZRWCyf0rQu^{=)t{CB^C`E0Zwn>)R_!)Bathj~uD@7#0i} zj}5xa7k;qhe_(bHwPhH@Pp)Ap7oR!HVXVq224;8AQ2Yc&?+o6*ZY&xEp&HCO@2@Z& zU5Xx#kC*!RuWi!FFI!dZMup$*PJ5m{R#QNBqbo#JvXbxyJ!WQLA9&gI+)55Z>GdiABsK|;01k(y_pIwn zl|1WQOrV@&D&ppQnZrHxdB}pVSd%y)lYawQl2>wtB};%Wxh2-GF&pFU>KGkX8bw!560$H{^)eC#!mg~PW(Y=pn<(%i?I zDds}s{YT73CkH3>*O!YB7gBH=4C@n5D!Tq}7^PUgv7P%J_I1Z|%nKL0u}>-gK{M`pJG=G4qn``Q*KfnfS6*FBq$Y>< z^j@#8T>l)pe0R0CsQ$6%*ncPN==k2j^^1F#*K+S@ zJBF=JwJvI|uQv(4^(@}un-UXh?CHBkgoRxdh4@_ee|~o%Ash88CwYwt6&4kGef|5G z<;A`0>*Air*Vk8QXAfEkPl~>TeF_b`wtI(p_4xYNWzpevlIOxrUBSGYCp{NEE?3HO zhiK)3-y;)8ulFwZdM@F_x6oP8IUCC(S&3s+Scqe5Jkg^0XJk}KFs=H6?6?Z&T$EUd zBb8WiB-VZBT{C{v`RaWQDMv}tjTGfaa1OLEJ^aWyD9L&<>GVO8W2DL=zI>#Go1rE@ zaeZv0m(0#0xx?nC&P~sgd@y%UBGd~zpL8zdt4coeT>MvqeEzv?iRWH|F4&PuB-oLx zB-ko{aKSu*94UFja)%y>L0Im8{)PUGfBnD%PGNW*!Xq{?&&KRJD~5t z#)^iNw}8T#xn28B9;+ppCv}Ju2m%3Z=6ec_^J8_O8A{OSv&!$LiVIDlpQpz zGGlAyZ8DAT-V8Xy4*Mpi-RgLl8|1v)*%(tbyO}Rrq{R%yNMP~Cu}xlDa8a(6 z?;^91V0LWhP zr${Q|Vt}p!01D7RF99*7=hl?WI55;&M%*XfZPttwI8vL$^%%vnS#G=|{N?m$qvS>W z1M!WQc$o{s-uk1x=(MRrE;8vrI#5BgJ|bNvDI!rd+mq!cfo&) z`hUG~@qLb;SbS!6VAfLoiQrSdN(_dP7UiUNq?jil`fT%riW$1R@{~F)gsPt4E03ZM@fzWaUJ!du{6>1y+tYYXcL;%2u1VA22 z`kzZCCD!ngZFYc$n$mlOOHsiuD>i0;>#PE@K6?>{B!mUy=kYUtz#8;$NKobNw`+wtCenyebfu?D5}2aES<%1ZyHUq?(fvRG zkHrSen;^V2C_bu>T=`d9+Ww7L+)sgwqBTF9X=0uf-T}&IGxr9nd`e&y??O2@v}`D` zKQ45ay*5J9r7{&xJ4nyRnBMvPS|#75zmHe9v>?VmVI(=90RySRVrC!(-ajC90_fIw z*B^)~sNv<$lrsW9ueKN-ejH7rG$*9=GNWDk3>%o0zmaD~{lj7;8JR9;!zb)%n|5wt zr*+=}C0+z8BpkPnnx^v8=O!dZU^oZEaMt&%x?I6yHD@c^xmSNF51C-w(4qh} z3opT2h(TDO?VZxRb-53Lw6OZwK_T$wjqrpYO4c2ZZ(mv!ntVgvL2TVe-ZL;HaS;zN ziScG`rpnkb{_ga$%`aaDhjkM#kb$(~f(>v_d2wb*c9KC@!Tn#Goc_O_%^$lGH}G^8 zGkHkwn2U_BL%Pkd7>v{~X2Z7Lj`tma-wv7(!wfP~z#T220>+*@x-b3*dv5_1N3bo5 z_RQe!8eniIxC9&A0|W^kTmyk1!4d{{w;(}-1PKy6$RG&>2^u80OM-ild6RSQz2|;; z>%G6$`+vRl*R83puI}=xo~qhXd&@mVeWtf+U9}k2$rP8355xK3z9rrR3^V7H+&y9# zw8&GsAB&B3-%+GDjVFVS@EC?7mx^EY&|s*;u1EzS7E(9@1I&QN@)Lq`$RC;Car-!% zKk8olyXA)Cf{w(Y<=OHSahQzqZB%5XVryIOFT}e0&`T*SjvkVaBHe|LL3(P;dFSb`W16$SlK;l`KA}SWt$+ZG>w*=o zXXf;IE$z|r_O!L5;nKJ1ZnMlG6rQA9*2z=h)rp(SwH-sQmfb>A?bxhm4VyC9N3>|# z14`z4I;XwF}J@%ar^IXo0@>2SlAFscs-@t#oJ8rL?$&KzW ztq$d#hyXuRJd4k$Y6=u=wY9 z5%*%Y6WpY^*@lR%KCPUnx67YaqR$;q3UK2nyMItQS;u``q}=vW?E{frj$B|S(VxPzFxL&W z?>?>aQH(K0@$96V9Gof7CI$>RbbT`fYm;QyT|vr(e#5-VMX!ZN^Hb2V8A=9<(cB0_ z%tiIz!s)-_AMUoYUiHdO?96QiS)RZ6K%bDs`tEv%kRIJPOm|Lt43nA`|Gkn@oEUC! z-BTwo*Px)h2Q-5_M;AYxU5bRddk$tl7g{P8H{Wnh_Lm?;%5X`>6#9>A@V@>^KcFU= zKRzEGM9Qs{Hy=GTeiT+595w>~z`P_Ss5n?Q%wkaet`{8ba+~~6mi}{S)xF*Tdu*6ga zbn&-djs(1Fk#z&*R-ae4e}y>MMAeFOVZ^wPJnT!^`p#Rdq=Z%vuzN~ayDMC6@b*(N zB&=R&jnny9#LMhfipT89Cxt4Y?QLkU!smim+lf;w%14?NqO*WnkkzqhL$CD2{?j$x zX|i{UM;>L5$C5w(4(KXJ#2TBG!k`)v=f$A7@jAw@Z9pRR8L!w;s-O9TyPG2dfruc#UIZ~=RWTv=VuZ@ z{mz3{Y{DnZOAPbzY%T-l$@DrvCR^>XK{@tX3v!;q-xGvh);BJs_mX-WpLI8H zvis}dS&f@TaO!b?um5H@03hA@Nsj<(2?+@%uYMR?vvA%|&BHS%4z(!ylx!YsF1GWb z=nN4m)K=n8F-R5wrKYB)uxomOT|Ct+H79gTXk@;5>#1EWx|xYfD*}*UczzcGF!G)C zjgs$06}VV)YoD^n8@#$rH>rmzGq&x#9KeKtWP{*9?Q!{I@_wzFTPND&Q?Wn7X{?{T zHN6^bZ{3>tumB7U@EarmvRb!VW5mTvLoP@@yBhJ>b6?1ntXmY3eGn-AxyA$zpsN43 znS`{2#8^hQWmkV=v9_5)dcRASmaTiY==8S(e~W7Y0F8EZhp#DArsdr%Wmk0f@vPX- z=OFR2wADiq<(2>m2??r|3_0_daQngF2h}<^ZSO39zCu-t<;#Rc3C5o{;#V*9|IaOy zMXAvK>cl%SOZUZGe?ngqc&BR_(Xsy$0fD>KfZ(4E)+rwP+Z0RDk9#3O2{ZRXYHk^bV}8{>klH3ZcQ)zZ zDMmmHI8~A8LffhP9tElWvop&duiKONYwnZg3P11=RSybY-kH$J82KSEMPF+71XZy# z0CI;wXd?jIjg5`yNje~VVZw-1IE^AAvEEP^Rdw}VfZg-~ia~7w5A7Dfc>MUW>N|lk z?CKHLU?DX*N5>o1A6l$hQ*R&Sk0CApyZt~<@3APto1kHnGP}_v4gf(dRM=MlUT)64 zIQBma4R8|b8h>BNn^R#^F0DB<*;n;&4FJPXA0n!3v6i`Tk4YCKjq*m|$iENKKe8*b zL@NLo4p5y0K-k&YSsuULL7U!6L1euzXb|?D^H*sWsN5X-%vZu&W<}!;nb%ZRV995y zX4ppnEhtt|!vp~sYOyYU{41FH3h?0j2ab>CThJ-;%7I|?!UFujlVKd0xYc#OepLFp zW;1_FChcB#NAjlZdU;_d?|Gh-x9pWH5EOK1*QF^e`)mJN_8Mw|L`Mo))a)b8qdFq< zZ}Q?~k%zj)KQ9=U;s|Ff_{Yu}f{-Y)Qb8n-C5N5Uv5KY0_}8kO&(W|5hu}yB5Jy2e; zu<94jd0awA+|0OXg94A>)idGlM+Vh7;oPPHI3+7KCfnG1%f80_Sn!4=k~$QhtP|q@ z(eLYvHY9QlzhKloeK(1;qQ~}IDw}4O#-gRcK4Y=I2M4OYeEl^R9scLPW~JRjA45>T zD+1PkXD|(8F|h5ylEY%8_}g|YMoDpTI12ryyK!Lz47-Q|#8jph;PfaXjC@~!XjB}| zX%r53x`c!9pAd0hse4@crL(7`w_0bvd#gOgw9bM)e2EF-vR(!1&}PDxbk2i8320)i1V5Ados_Nio{Mk*oA~B z<+FX+>+RMnPrS>h__=6WNgsB4-OA{sj&Jz*p@GUp=aWGr%>CW(QUtPJE7b+KodcZU z*2FraFVj!aKVM>w3|Y)~>;=)PwK7c7oVLhLM5v^~mdUfLa-RgruLM$ikD?Y843#8Y zhI;dbdl6&t_xIt5E5ToRsL2ipCgnO-v@uAH(cUp54CQNGN4@hn?c6i-{I7TayY#_} z#zz!C_C*LMrqD2cXIrVCuiBT}C^Xr`A#hJWcnc_E7`~V)o<$!ro$5`r9t8K*ft@jBRSH*aQ=WmjRsM%pW50pYvFv3-2s`!z0CGUfx)4h>Qw( zT9N(BgPih_dy7mL-YV$uc7aNad2v9sg);GRt+^vpVY(S#Pyf*JdtcI z(uz8E4!M#$J5-v|FVMGHuvLN6_3kF11_z zYPJ_?M1Ea~(Sw`9mxE2<}4#+YnYVkp&{&reQCN)B z*ArD^?r0L&BpJA6_l#PV(2P?lsHlG%PDP;p5%XuwaTc39ew{v+2FGB|H|C|+iSLC{ z=T5L-aZ3--^_aabxnKW`&vS{b_mdjq z4H46WzIB01c9Sy!vcdu;-6#7Y&Wba6BFbiy$uL}z%?F>pp<7&ezCeGDCD&M5n9{-k z;B5=llMra`N$mXUiV5Lj?9iXALs#y($NIIhs;~Xg5yEyEQ%KQmN$vu3KHVS(lv0Im zrU+8jk9*F~Zq9YWag9VVi*yHoIEpWySu@ z@|KF$N$uOEiIn}gp_8RhFCq7IGILr+hH@>p)J7l!Y8NTvZlWdq= ztd`VH^W)C$i;(ck-=$1?S_>o9*ZDgq%}P@&$F^mdl+>!<#S==iIo7*RLzh@o21aD9 zYBaGWf-$kg$W&>ZZWQnpI~G^$!&AG=`i(fP zB=ZY>85ywLF^n!R{MnHYk`ac>s;7Nk;TnCol8I4{1#fZv06O{ZAPf<7w@dpGati?N ziB=m+#7sF{2~*aS8F}BsBg-5Cv`8YRi$N5IG8A7hLO6*1LFDlFPcV>rP(GagBO{6d zV?PGETWhm+ti8TkUz-A;)qRcwPK>*Y13}M}p+sl=XGuK!iL~;(I_XXFjL#-(V%@?0 z>Z_Vi+0W(MX4|6>Zl0e>pAE>Wl{kD)%uUU{I1TleGDOx!m-+lv6Tl#8h>Z~0cgTfzz^@vkme ze>Rv2wql~9E3FH&)U&JEKNY;pIyjlXGwbX0Y^TASpxalAwT8>uW%aKysn90vT`e7knx{i zTbX8n&2l9>_QVh%+4BfI>|^e{#$DGOo%DH*feHvit#=iu3pK(5Y%tUfOMnMGnV{29 z70P8|dbfP*`&t)&y27?NN2};`%C2w`~YQ}&J`Nvd% z=0p-v@Cn=)S9 z8hfkB9}S*RxypLmKgw*>^bNZSKq&}o1J@}qc6$d~miTyfbFRBzMYRCZr>n@F=dafJX>FYbOz|k20I-pbmFtLBK5ZKX?EDeHaYY{#=DG_?#_6KRuH- z>5S@8y(AGpWf?^ii26cN;s6p*8(4BfrY|4Q-ta3I4^aVxGg_$k#g-@>^DIiFz&+}$ zn;8m$Op21H^&tu1I3Gz6UlaO~m;j>f(V3bBwx|IkQ-hyq5NDrAz&M&m-93f4Kq7}Z z3Jw?n+B5YZEs!Z+P#NOfK$8FxQIzi;O7GVg3;=UQM*Q^@t7Zq&&;TCXf1zD6UkZ|P zmY3f(lW>kKqgd%ej&7e}{<>dAUg3u#>key> zD|{?@FRo?pwU?3iOP4XytF(72Ck$OkUpk#T+{?%dzOSYD=&W;I~x!cVbf{Go*xX_p?!CUa1LF9l0m4K{2^mvk|@MBW;=`nL#X`>v%u}uC8&bX z7p{Zn;I~5v>v9D_slT6>gJ1~EaM>1ooq#?t+(vQ~=8v%*;5WKPf z3F&A5l8q+tj0zBSL_90MBHSV>Ar^N3*(lb613+8tL>RR5yG~LyaGfc7 znP8s(>@zur0qpn};Of;-x3^ykpB6C}jmdtTW}1lsK;kcI$zR~ndVS@^=^&<~2)^^F zqiELwuzO#_D}62JO9dPacA|C~2!Az3HLk&d$F#rEO?xpG1!CoE6jhW8g3POwYRCYv z`?4k15|!v~oC&!<(<5HUpM7gy6tG1aaRV|u>TcGw9;+ND9(QDz`LD|Vzuoh{xnAwI zGg^24*5%rf%3kI-sRDm=^UcF{`R51|U}7>BYmqVG3!f;<_i^XRwWI-h_X}C*i^Op4 zO|9Wx*!`D^hLXp$jZW&hV$Ksu1XT^tZqFytHQUE)kkh04AbO~*EIJYDgGI4w{=j(Aybx|kS{u+;exZ?1?xBtZnKn)?WE0oT?^$+9c9siauMsAaP z5gG?7z2D4nX{4mGXMQuCw43l9M9u<`d4|UN2uDEJKeoD+3VkrWXdEI^0z2Q_dG6-; zttUh#Wpuhrt6Mq;L+Ohj5;uWd+W`PAj?yEq;sm8wVL}TaIz+VrO`o!F9Oe!Bh4OQP zYJK6iV*v4c)G`om3CP2r6y2gE87iQniTmO3uaOGO*hln3%V6O3TIw)!t{ykME6&Ec zC}7y0`aSN1-E+bNZIp&@CPOdaqKc$U3UtK2E0^B7$OoWBgxg-gO*3Ze9zE)gaU;%_ zl5j|H>y^_{RC)I3Boh>YAE&XlvC$3lv;-VMKrru9JO4l5+CoEuziX&Mn`Yv5z$_k< zcvSR99<}Gq+5Auh@HD?Kk>(WghdH2Zsm_+Oxs=xgq(qZ~%P;wQ3nLgcxBN z+I$!u@%$-gDZhmPjGe#-)~i!be`#!;8zlhjacUJ+94JBbIMW{5c?WkKki$o?{t%1Y z0^XGr{iGz3o)cxE--2i?-u-wXSGHL5{~&H)*H0^kzZ0lY!kC&t;Oya*tU z^x?}SP?lQ5L_GTEjl^pjKNKT6Cp-eXEukYOZH5bQ>cew@Q3`Of0rYLpBr^$XJ}&Co z!q5AEHM8@+i>@Mxsb2;ep%3qa7!r(hT>AQn7^85AfGL0(_c&C{3M{I#IxtA$b)6}J zQt07NbMeTZeAp?{9tI>>DjUgLa;sXX_Pt$TxU@zPz8DaC=m!Q2qdwe+Sdf4OboNwu z7PEW4?6}jaK!tHqVCX!!V~#@~`rWW>TUaZN1qA%+7j~F!`Clp3Pe#|BEF}Td{i_|M z-2{7JPD^dL+7hS3YxZk$#1eM*U`JDXgNbG zbT?+6EXk*jR{((m6K+>ioR=U3p+0I%|6$n9pd1Jkv&cXGzW@PoYx7?;1(=7dd2H&b z0pI{yBk;$Ek}J}oFr4eamT!a5_9MoyeG#gIAf^8!+(<$tLg;PNCF=Jl*~#i@kQni_s?Ud>m>c= z8_I1Yr=HO=aKE~le8hQ!9D4QB|9&)amau?f{DqSQXBXsrtt0$h@^!*VYj*RNkFV?< zyro=nGQ&ZuvU@f6kM|dBboVG>Lq5 z@9=-|*af4w*m{28>htO}%Kr~;+-t&R$opXDSi%$`@!)?Gi?-ug`Xw2VrQq4fc&Q=v zL=82KImPX~}<*s4FPSO+#1R2;qQf=n6nlZc^w*B8E*XA0Ksh$w3fD zdVm0v0e~GGH4PO5067c*<-q|A)T4VZhO3?rA+_i{e2a`#~(xJ$0FH{q?>` zu@2!q;N}mMc4^O{B(UlnDx6>lBd73KdPC%2`|#muPrvTr6!0I}qXCfjM=vT@{v$aS zAkFnq;SzW%LL%E=BBh6bLneyOWZnNO!vDA*@)%#+4uma6ycS%nm3q;U)E}l=e##ah zJS$3{nxji1?My0IIH{r@rsw`J3Mb3qCBk%>_+Ax-?GXNoG&3aSwRM#y0vKtQ16>b< zh@qvbsswn;FYA}>q%8jk!Fv_DS1Y+adjJwPxFcz(tkEp$s5`Pgi_xnnpKlBe58nF@ z{U~dm&LJT=gT&?ghdiwQnEk9#8UumOcGP}GF`c$4CYOpP=6N@m&L`CDd;GZ2uXkQ> zAy}+B#YI6<3O60@#oT(`Aiyk57r)~NQ}VML$h~wJ>VWbXQf@|^6!{diE*0SUhZguu z%^jYI5Z^~1?|{APV6^q{1*L?~0Q_N%O8gRllF5aVmhg@g&t=1EV*a~kf&NT+0oY3} z#aiYMIk;LOfi|=-+ZzMC0-!y%5}g$?k5gKaHLiYAUQ8~KP|6Qz<@_>tKdYWaV8+HJ z-eRD`ffBtff!%thz9Rpp9IWHc6X>bnPSQ&V?tY-WWlIQ|sm)U_f-4Ka&SK!JtKm%^zE6TWaFS@c@Yk%X-T8#5?c;|0jBCO zU=zgFA-s#iTd4)Oj*{mpf6H^~D>Gp(iL-7sUw_O|Ku-G^Tf@+L3%5CJqF=wQaG88J z)i2wo)k?%`6F%Z%31C_&mM=o6O^!&pabd3-QnUeJr^)w^Zcjn(jqLb$xtijuWZUX( zKF7y0g*q%{i0J4CujzSM<}p?+q(>$<8V`|@6FoPW{WdF$CyALV45{GX0+8s3sUPjg zH`WwXu8c#dUA680(6D4dDYlPdQ(({Tyb4s``y}JN1nasa{2+@O-AYM_YuQ z@`;)Gqe-m+G9$Q=H=jYx>;#V)-cJv=68coH4D>SbF!73I%e-Akg(Pypz zD5&DbN?D?lkG{llccWdWxu#~uDB6^Q^YICtSWe$ESGB7|GM+e_bLwD6AAF*HGp6lc z36UY9yn;oYUFFcl$mG=2I4W0KA)>c2V;*!w_8^GHJ);Mpob4f-yJL4wh6b;qkaos7 zSy>_jvTx07oq4i{H9Is$0M9rgAt2hs)eAGa42!*$dnp}fbk~vN8PV=q8E5SLWtx-F zkR59&kMsSVqvux*>SvtE^^b2Uk~A2tB0*Z7L>v2EBz_5$zf;oMpMXuRrWFs?n*jYh zzTombG3q>xuGDE0Og6|5)|xNmm}TE>89XCiMIDTf{QfRPbtp5rhU=**z|2$R?qyjJ zNg1+ydkY+l8NeNlEm@ITYe|d1r1-~{*`6?(I6;cT#q_ZA@(7*Q;8!^NxRSC0hq=b+ zYOYL6f^J)TSJ(Xf=%J^p>qYc4e+FNS4r!mT^gn)+ahiFH{YSq2;YfN?hx~i}=sO9PawE-zWEn=vxJkD6Ao`Pa+0PegqNcm70 z1z)(W2I%i@@CDGFBrm;Xq*fgm1TK>@3}4#=XE3V>DwK^3O-llHz;j~&7RKLal=Vjcf->EO-$H{$iS++8xt4H~VBk_e z5mhz@z}j$KH~>xq(BQxm042YinszXPV=>67yP86ortl6!{`ChVowrr-o?f4IJtxN0 z0!UFSEooVM9VEBm{6p7;GSKg#%IF$QGp&SRk zH{e+7=GT2dwY@Tg04r%Feo#<$DWtl64v$B7;rIfb;)~l&6v$*a4&woeRi8G^HmC#L z)UTe(sJM0gHx6&i;w90)YRoZ!^#5m#RXqD=$xO*VA3)Jv1o^4lQHKEBbd>$X&Mv ztgI8Z6Kgq|xL+;6aHef7`B$O|uojA$?{>K6N0NHJ(2X)!>OMC-Y=Qq*bN{y*-OeE6 z;qvY6Z|(*L-eu$^sgdzq-gKh8Bylm|BbLp>J>lQ6PhNBXB=Kp{C|M9>Tq771A4{PV za#G(g!e-b1o!OV(^en<{DxdRXA&a|TT2sCvQ`sGYqhsE*)xv_>r8M^j&W7n6Qd^_Q1R&kL*pok|sM#3NVz_Jtr8Bm2 zFc+|`&tT@&DqN}4YU#Sp!;hu~zt+Pcb>!aZX%nNb#n~f})u8QsT{L(`ZTgx*H!?2Y z!SjRHxbCp?ifz=BAR0mdCje;?<_uGITwY zsiK|!g?k5h$Pw^>Dc%wu9c`@{BsHOi)-I`HUk#reAfOK9l0;+Ev|kWns2*d;!~VO-EV`oD=H!>v{74!aF^B>Ta@P?!e!vE>XoNlHop21rXl`t+=am+ zOJAp+XSoeSUt$?hz-aTX65Ge2FYANhlMWulFkGy}nA!2k1@_PBxX}h}EY;UZmFrtt z&?!f4vnu76+vT8AN>^Ja`D5yu9rGmfv%?L-HpN-3eu5FhF==Kc^9#;<*r3*PK(*ktMS159tmacVqg2!$|Ipo||m z_2w_$dxoT6Wh5Kq=uTuTEAMn!1uYp_Caf%VQfXS)OIznlJKc=7E!S8Z9go&DN?J9C z`))(&TIL$V2yhGVgXcPT4d7KV29=pKvJd{;m@+L|0<6YFfWrfVR%PNKO#Uf`k&3sl zX1$aF*7>iRhKnLp{rCE(u*DQOx@=PDised`a}2nqk-SAiY*>Am@H%c2u+c!!tRuO9 z_o3@gRl_zwO>jIpGO1efiV)G~y|z=d^7{7}vbzKX9?ZVlj+JxWu{zlu6utHw^OraF z4d_aTft%|RAH&gfX>J7DT_V&nUeI!oOjb(0D!4anlILla{d#To#SF2e17N}B+9_E^ zOP0$A0`WB-(y9W95k$FG-}218Qa6uWEZe3mj^w%~PZJ!zcawV01P5bH+}?*yrrvs& zEbZ+?=p#~m&n;j52yvSp5a)4vdtbloD?fn_Z#R%{(f55;-=arfto%{jIT@pACeNX+ zsmO9x|;E4O9s>GdXi zf=*w42E!V+LY_cY8D$P#`Y^WL#5~Z2#k*vD;^aj>le!(Baw)zRI}=Y`13ULUDz=L< z8dlc*j2t1?xya+%r=jArlQiu3(d1{Q(eT4u2%?m)>dd#7I%P z-pv!d{ch8NjpgrIcNvu+l8C(~RP-Y>vKQ@#t+}dK*HpL}0InlQyGN({DEWvr*Fz+U zFFyrC9+VR)D;{_)khPu{+W>F-!};?^XYEi>@H3rYescNUtyoF+dq&NDpK3hFkZIS- z^uh(^eaqOnXhG?_@{Bh&`;QX?jYE=R$_3mG>hU0&ko_XXEn%2j{h!>SOTAe%xzMfm zU5pbw6u5w##dgKpVyxohF@WbzQ)ItBN}ygx&XVO!S@${&KSX`vBy{L4 z>}reF_FWqgi3uDmNeFBwL`gsN;|JYLpZ^^|U~@mEO;G8Pzv zj(rr<5oaV5NlKs~H~`QxNyAfIb%&FZE^K&H+AY7>e5ScEIH86C9~Mp~zqeJG%U~DZ zgektGz7ex;`r3j3@K$m8b^yv+fC&K%qG)EdSnTek88FnwUDG_6CJ4}F{pZGglx3&; zsQF$G8HuK8wV<$tdCmUp&PSB;_V9g{+xYD#or@AzbJo^UgWH#{}<0TwL0Qjd7Ereyt%TY&Miv6-^!?nr?_u78pR`v9;&&A%C z{|T>i#YeUI`AYK1cO7kY<`VzeI|mPA#QM+n4DFxny#I1zgso^+BqhS+EDFa|K`%Fl zGWpC}6XZEy@;GN?-T(suE2aR4L|p5tMFGG)#-Uq`rH0)-tWIF9<4IDFirZpEmjvkc zzyZ8{MP5ci7t1p zYrGIJ(O^#6C$twXP09z)>MLMbX5_@;RrW^{_iG|qcpq9d_?0g{+q!MuaJ|P)@75)a z`T7F?;Q_O8(tjko@y30SexidGu~HuW#YQY5^OCq~z)ow>I7F;*p80iKc!K&h2Ux*f zUvaH2r&r@9YT8z?bd#r>_UC?b=c0T+YhW6Pv4xAt!)Ro+25&8=yZ&52FjW%jh;4EV3 zijTRe+l9MY;_Vf<+@1^*cYK_q-Jjxl`Scr%gf^szojh)d=GlVsC&qL!PJ67Sndk8r zdlVAf8wJ?-|JC5XAIAT8BRmxDn+E;wj-deem~_|rW;4m6LWs7XJBRwGj2;YdREgY& zyRY%0a}4l^qFBrm25(w54PK3G(#MqUc4lpHU_7NJHYMBclFczgDNHqY%SzAHD7x1l z`pyNB>f=82mS+W7j_lM6Rm)pPk zyhH1wxV3neq^Q6}NX$3t5|^MO%O66cK+L1h1x;G7X0gR0-blYA0xht(XWDbvSPw{^ z$K7xrxJccyDS-|N^fgVHMNVu8`t+iq_}Rk??h>T$jYUuj**^L15=GgF=B{6v47&uo zJfO+110$)jv;}X2H;04Nj7WxpRa0+NQt#)6#t|a8Lf*chc=lIyepWE|9(9?tr==zH zvhTc}S(3p%$u^8V5g%=h2~+NVL*%4eLmntl@@J$=ws_n2T~}JNM&AHe5=3FXbKG{3 z5%b03Gjr#MY^S_r?|*7+iT$Baw-rweh&j0Xvz_(=VCcJ3ZO@y30!h$yH7?WVTJH0%X0^V|3>xN0$}KrDse`#X zu?962OEhYTrKx-1a*6c{s^~wVCERC@MDxpEqU4qvD($1+s~2>2R)SL0Oxfn}OSu-I zVJyV>hXP0BQgebVjiJSB0nr7~(O0K|IGU6%v;`1&(2ppFO^qrmI!N!R3F{d2NTciO zltfL){D?_D=Vhh^(?C=%U83^u`%Hx@cw>-K*LQq{Cq187lp}0%K5oUz>Q~L9(d_%T zl)gUT<3s7Zq`}7MAy-wT#<-dLx%r$qk8`cL3colmxIR#Huc%+<$Xm;?p)h7Vqr#6hKRiMAQBXWBfU_a!cyH zhlYL_+5YB<-pdloCtKmXaWHQ(;1SQEStu`Wb_D#4P+lZ#=?yJb`k$QUXV0Jv+bedQ z{l2zP>^%8dv0&xp5k}$P;~r=IuIXd(w8bq(hP86FVC!=H{dNw9u21h>y>h~QDKUJc znu70#=q<0I#5sWL{!6k(NVwZKHcE^9-rJB`pxf9%vUe(H>+SHj)gLOo61^Jv5A~DX zV0hv4>>0o)(VN8(zZ<5<4HLVth5TonCa!3^Z#H1Lsb&}kXho`gg&E(Cc|d0go2kZG zz_9U9)D0}@YkcNF1FXy{sh?*BKzB{sJ?Vw#Fi@`8%@!D&X@0o0Ki27alhA?`T?}Iq=0I-)@V|lFIn; zja*|Wn&9#+k5rFWL86o|ah^tQfK8%Q=P8ML8O|9VFk^}n zj&2-mUH03c=Tp5UXV@aklck@DYhmRSwndM&Q_=){K~rrVv{#AJ?5LAdXDq_ebQa}yD>Jo+bQP>&?7LE-OJP4)NW331sB2h|; zg}sI-$24-bvtDMVOYZtl90Yd+v=du$N4z$fA6-`%BIfVTYBfo&bq9QNjmocOjj{++ zrK6Y%bE4mvTAg$U@B`6G^ju)-cl@y{S0>k~L$c_qFg?DA5dzttL z;rv$A5{SFGe*Oavv3-51nn_S#OtAYasl4iEm-D*Y$cB^oa6I0xt z019Ubxp%BOxb}-h#26~{yqlkn9p>072lxXVMe%G)GWqu6t`bI7+^t9}%{PMCo@JEa zN&En#bnU#1R#NS!B!on~8&}H9GEhtMM}VW?78Ok62dRxb)ZH%nVw=Y`RvbLQ z-~j$?JS3XYOV9IKt-sTOsL8@Ar7Jtik=Jzqkh$WcB|^GQk+DSCbT2K?_+V2mse|$_ zimJ0{*oJ?;5@$yLNE!{2j440!O06$}1$?SK49-s0tjd{muOo;ynIccqkwd$Vfx-_e zTx|Gv=t`a|*H%<>>j64RhwYwL;zoEzcn}k=A;T1}ksIR~%8{Q>M_^mrIz%mYn2%i_ z>y8Pm(LrgINz96qnwyZKct#;_tTbLdBLne*CVqZdvLICcHHd%Ou{#$9(q)G-nI>xY zpg(1KDbK$?h`{wG+3yj~Y4*!|8fh7Gy<8URUj-?%c^k7S%4UrQhV$)slbAm8O`eu9 zTd1lXQW(*m&#!G&gJ7x5!3ZvYibbLR-=@@eH@tzO@n`R?}BkqG`I5LBq8z9qFV zONh-DP=RsznmF;BaQgPY4W21qdb$Rueft4VVrRVgT*Yg8Q`278o*ZNzf}jrO$FOAl zsr&s+1!y4%mKmKK(OXAEHI3mm7CF;7k3hi}wphWm{s6Hk3cer$=!$X77w(XE_9s4v z&1YSM&sKs?u3Bw$lU|@ALK7y zBr+*c`YuUUOO~d~yEaloTyGjWNCc|OSVCNugFF?w)ZciQ822|wmrC6GnOefj{2TfTizM00yI|S2p!K`cOQ&o5>zxak zQxK76mpK2wz@9u5WTN=jlG&yus}xM4F^;RFpcMd+6ZYpm3i$zeaI#@X!4i+nY?+|) z#H8nE#^wyIRK~G2%^Y@KZ#Jy#`8pTTc;{Q#pWT36min$9#Ip9#CoFDVPyS>}b9GsoP+}Nf5Fap2~?S7f(Ro>0aH$*dk@(mzG6n$N47|LXLmMI6F-<2ih7yoO`F~`?wDUK7 zcI)$l85C#6RA57M=ED@+Jg)gcP9s!dSgq+3!j`cGf5UCEe|wsvXkEG|6H8{Ds(ikc zFE~nUlElxLww|hvhwz2|4NpK7>4iGTrZS}A_wpLrx>o)F<0|naMk`jmq}@>e@J4%7 zCwI?b$tVR3{>toG%;)sMsOw%Ml!>)?41xf?dzoLMO7E0-rC$tRAgPb%rdEZae~w@! znWhE{%|L@4Ww(V((~WR;n76}zVk7oOY*i;eg-FMt2~*KcYPr;Rw8y$xoFMd_^6JW$ zva{wam7==Q=>+R8B2HnrK7<*);K#Zo2r_2J`t9$L73d_NtHr}GQ{afFMG`+8=3SRK zwX~?rK1M8{Z4zNq6Sr@n4eQYRb>u7))plf+m@M(dyI7k>TeVuQ+lXY&W1I-43&2|5 zDtt*f7Q_x#ag~W0K6Al>kZ;-6RwT~h@N`Qx8<#(fga>4V*t?FwBn76shtYuyHX{xua9YwV$SBDn>4n7Veae$NtV?yE+qb z6jvRnxTP$_5RPBuT=an%LUD7GmX@0!^Pk@rz;%EC;U|}qtfp(v0!(Kyf(x=!lj@RM z2W7R4dhj2*dxtSW^s9o-nIMNRpIS^kW07rlUFoAJB|-6SlMwWFhvIAP;r^mP05a8) zU%tnz^=B{t2gvAt+rF*=LpiWj~RQ7k&%?YyW7tQx7RA@=y%cN8Yx8Q(oH@c(>e%C zay*w+d}o1s`W+s?2lm%v#9k7=#t>4xwZ`+$Pn8b!(7^yiIM*KbNpl8gHKYmlTT89( zK98H<7oqnizQ6TBdZUD?S=lF_{sBhY))z?gUx|E*9~LrNfuQLrfQ61XzfKER1$73% z1O1a*09&~(f=vBUlk(t$WY+g0(PvJ@{u^uL2tqnV#ehg&Pcwgb=c!(jlzG;>m9MKb z!XigP@+_4ct?6ht($il;EN_ErBJk1+$;U7?AAwIZlWw2c{-iD5Wjvh%dW~+7UT!N)}c}@!7=$tUr)EM08)v!(<>|p(VtDIN=b0<=-5RZ~G zzB~FPf5b)V$05%=xt=lGRXw_mPzp#lD2!`ZQ9#DMnMy1Frypd46(V7d#bBQ!=TiGh z+$$2js|u&uNrA{hVU<+=Q6^hr-`t08(Nir_K7)_>hiDzIdpW}R&FI-ikuib}Wn_8^ z?Am~NELZ*tO}Mw`%Noyjlnp9DPHab+ZTT8c8{!I%RGyt$CJVk=KVGgQ9{q4h5s_AG zL#F+{{7UoZ-vKFsE9EqK+`t9oClQcUIRnozJ5!e1((@H)R&T_aZ1(YFibv zPrtm|$N5J4)O-i4Khc`o#~4DeUnr6Lt4r0I`^u#2RZ;8>Fs)c7x;V;ZgplVTiPL4w=BsWTZl!HgobEZd5fQV z^qScqrO&dY*2R0vJ(ClX{XjBFJV!%!#Cx2$PMj+;{P%ka?8imDy$_zbYVdu#2b~XK zyqJmEXjFU4pSF)3`0?KK0k+!B`+-yIB&BZy131=rvwirk3{lTLI4iv~w=Lg{f-W7| zhHwi-tchNI++D%-(K|wK&kXJaE0><9qC}ks*=by}N$}h=c;Ta;${>E1@Sbft~=tA1GM(Habk2t0F z>@dfd$XihAV5XgGkXrDgY}x>k&4xV^sizT<(tM9Vk{Ozq*)zH6cH)9O7lKkPflL`; zDM|$Z@?>Jgq=HiU_s4Gc39%b);DCtxt*9Tr*+2s3J^hf=X?RUIuq705!=&r2xA^4{ zw~p|;YT$ub=^FOA#BG+EUFZ`K=I5c)XWDKn=&~!lGM;)NJ>3f91PoTB=&y3tebGu= z&wEA*bvh=VyD5e?$5RGR99omTtq>I?_4;utdoM^!yKKsUg&{w`E2}nvsbGv4ezO33 zMe)*k#rJab-wg@15FF$^U+XO!0? z65OOk7RI(DQb}GsSxxsB>lesTOdh(U?R)hmaSIgiWaOb?tl2@(B}SD*Gs&p_M)x&z zm9AP~yY%NZ3C!VNt_2l&{$;%Bn+)T~AiK)oaE>73Oa{BqkM%ydKmF4G8*gs`7G>8w z4xe3??(R|~lr9N@r356TyQI58QIRDiq#NlF1nCZmMWm6CMmnTKLO_uE*5`SC@w~tH z{e9p2zy8;E-S@R|_UyUOnKNf*&di*dx7X@x0lW7aTwi#5)Th^F-f0^Xx4xM6rSz7A zrd(gYA-F0)rV4IHZgYH@k(&6lh=KV~a&#LrJRQ?G@#s=tYU1JX+f_;l|6-}@OD(=h z5ey842+yk|{a1e8i4@w#In%W+%Oho5+q-lZr{C9o{Pyw;`SGzCd)*|%zDvze@?2y1 z?Yj{Ca_MgHJK;&e>_|KjXpeWTc=4in^eptE^u`XfsWBET^c{@Hv6!T;AKt81H>fbI z&g;w{Gh2~SaBf8}`+;#Drl?!F9aW^VfNR}*vrFaq^!o5Qg`3YgtHwtRb(B2@usk@( z$a=Z3vgfHXjScI^Aqo#EHK3?ViF1Wal23d?D&yrQ@*@Bt9TF|AbX%^Jy_x7%D2c$y zC$Ii;v)Zl!h15M@5Dkyq^eLe-U5p;~U;55rt2C}-=%n(d&;GTreHXwbH@bQt_VnyG3*rFag%(wSBt|tzuYYdc6F~ID*9ZQ z`gO=aI;DYDI_&+N=R-P0E7_s-5I}^m3?#!zOFTr@LK3W_zhdXeZGMg?pp731)SCWb zb0eu+$CGT-{WjsCWXriP3p?cb3Av0pfc!$%7Z4(M2F~V1uyF5&LOEYse~2F2*eb|+VA45 z!E8>k8xk~Bs4e~Klk6w*BHz5%U4-GSkDsE=eEH!Re$nFnx+$F>Uo+RQ_cEJyA#0|2PR_WFZ$_`YW}y%WWVZB>4tc?38VSSpw1~Lm6s6Y zbJuC3Nk!~+>E8eOlH)RNbT<3G=p^3I_O``4+Q@3pJq~7wHYy!oIYSO#WY&Rqt!q+!< z1ksMFrriT`a1=8s9)EoH2()%X=5y8F=ZzCN^AT~*4r@)NJ()TdE}APzg|SjqpEjAj zF?W)-zfI6aYMZn@u`c%+!X1)-GybGFwzJxkQSJEzRxP6lMIi?-^T*S3^hNlKy^nT; zrRFwPfUL;|@ZRK-E93}Q8(uLR8Xr$crc(*~OwO0mMny=)O_MF!vl4XERxwhvQjPqk z42%uxaP4O;(vd(F?-A^Q-< zPT~Xh$#)3$nV$#^YsHiOKo2@PHr}TEl7iFa?dccJ3BCh|Sa{zkTW>T4SKY*|;bjG{ zv@|O}VxMj%{j5+)n{+{!MX0ie=+-=CrdrkBqGSSCPwiNl0xhsunSwTs9=YE&&}CE) zDgw)*4JKIWz)1Tg`U79qm}x57)ht6NC{ENPK-ruTSg_9Hjg|1m5x_f;SY}jYtHd9s zC0+ZjEl#_K6Y`?g2L&(RISvERhojtYy6u5;XM@N%FwF%LOtr}b_*f83Xs!0*n}k*0 zjGj?@lGh_AP*@DU7uRU<#b;-k7_gqWjt! zJwcW8!hoY$7V!axq*|}F%8v@5|J?Uz!Mua?Xu;wrsa{gIOtSp$ISVL%aiLDNa$qIP zciHo2PYv=I%JMP4?h}SV^Bg=8s=tO;fxlDt3{y5f;L18T+01kFr*uznuWWE7 zbEg;!33XJu!Y(`<8-)q#y-$|Zh!GIz%_1IZ=f-gTo0M)OT*u+!ZMNP~4{nEwjRY zN}@fBz^R^V!DBpI08 zY$Mppa1lY+`QFz2zNcRQoJ;@W=EF#8T}Zu$5>6vwK+ZF)zJT|V?=|t;kGbUiEIW$) z?fh68l%rX8)iZSCZiwWq`YkYH_nG)P*NOGw-%cDN%Sw->@A$!WMylfIy5k`RjiZ9V z25)&tS+ZA2aD-uNbUVp?xZJJkn15NBDT9HiC zWw8QL@4f{MB=(J|#*R)5j_mj*270kb!SyNA1y2Ki23qraf<30{Jg#c5>vjLVIfC_+ zD=6icVGVW;kk#kEHCk+dT|0~=qR!29okKt9veVpPHelp`(7AM*P#%G?&%2`bit!7) zQVBX=Ej{u~`WmUx5fI3vCG1d?8Va>EfMW#n z{A-NM_SoA(cV1la{qzJR?Z?^tt{u;PYk$hO*B&zf1MQA;WK}4%sF|Q-I@FI%^;ghwFCj~5T)(;cAf~yJBisV zJPc>?q3!@~b-Umv8ErED-)?2^_=kf^@aGi0b@>mK=A7FE4twptOMWopIaq$avq{=<*P!zwrgTEqVB{xz zG5Up?saNvr=L6??k?C#15_-+D2htu?LAPVF;-5^H<)7HQ-p`o!X;SOrm3(geA?Ul` zvqaS7XhfBMr^uxrfv6i(i1CUUYTZgmX@fDX|FZq!ScB_XCd;H$L0&i@@by!lsjGkv+Z%HPQ)*QrN^8>LU!-;)YYDb zoaUT3+;>hV9DTZI`IbPHuFeA3F#5{k5$|BNgWGiUDp{F3CCfb3FnAKcwrD{D(?e&A zLkw;zjGoT#jS!YnlLxgGY8njRWKCLDLOKk-SP&VSUxO2wj8iYrs-U^-q4O$iiJvm*LU>- z4~*+xDYAw%uTC&;i_Ba^FkRlG))1|X*7!jG013LaLw1PW7dE$=9vYFhqNkt9`qfUV zIXsBp!v2}}Ud5p0Z4PI3qO93bcCu-_}mn(M+&dQiYkqr8SA7lHeW!VAH zUSb;QlfI$yP+9iV*YXOqI1$Sbo=-!Wog5q(Uk_n=kZ7@AzC<3>dDDr>NegZUO)7ho z$Syd5_%6gF#U6mEb2S``Y-N|gotSP4>&Ra>zva+Gu&~z|F{B-{n~TJ^NZwwy1
} z_xK$M{A69ZkHna^Mz9o6C%st^ICNt7^cYZQ2FNWZb?*^yy&K+LZYzX)t{wXsYv}3( zoh?T(27YK9L(6hPAJV7ds*?B;8g{5(VZt|9r^+wW)%?9bU{7sU!`BX)#(M`UAI(8l zCF{s?VHh4(3EY40{R%WHtTmeHkATrE%v^?g&7$VepatmP=6%{SlcElut0~K1q5Un@&j9ZOZxRm#rN) zOviMq>-Oo+PlUYV{4FFp4aa>t)W=On+Dy>hzTLer(*g-ctRGeJ9Rwb_?2k(26^-6o zV{)NTMcRIU`BCGuT2*0ur(xa$=6ompZ;t*S9%|rN#v7OMef|{d!4SA-2u&gGqC?59V`7}_cg9FP9>DPa@xnDF-H8pZdk!=c5sNna~rVt=wFs-@}Yv7vB{h)sVY1Vv~ zxAFZ6#ZY01$I}jIz-Upk{g0c|=kXMu_6e|Ki6Tytj<;mz3taQ*MB>{dV!btVI)`V1 zOeI?07wSo1X4-{mM)>&3!f6coOu0{pP&uws6>guyaOcF&I=c$ecHN#ZOBD1o^$5i{ z-yS3RK-^E`$oeF()Z*ivbVY8ZwV{TJds6iARa`DV@?80%v+i@P-%{eaNx;8yXNUsZ zav$So4od5Pna$J7oGY#6~(DKjCzm{+x*2>k+M@3#K zKYN3LcgEQdchY=I@bTN8w|pZz<@&8`B9;8rf){-EyGTwLPd|Q&<$j08vC(gjObrkh zwcYZxC6zVe3=w$;ogWj}ptZiP#e7MsYXCnxrk zSUI)o%ZPFZC~{6RJ^#pxKnvhLF{CCw@kUz?xi93 zs>^M|&+lgUF4+aO3r80dTDENz2?xkqmk#4bR0N;T=yMnZi*u_G(3%;BXHmP@Wp&eH zEAy%fzded$z?~U_X>$+1fKSz*erGf&95+yrs*HXdXud?aDlF8vJ%H$QIbuJTZtHZu zz(?FtwJg%CTK}ehkiTg+t8o7^+L=4S9y%S2}lZ=$=ND z{=(ZJp>`^rFCx8x&pI)~%7EwXa~uB2>XvO@~1GqCD1eu^`| zp5yQ9k0jbs9-kBaN9W>1mT0F5;q$^(&g0uqkV9jTGA9 zXUz`MD0jBrL|_R98Vrqm8zq9~DmgA@b)eVEek4VvzjVCU_XTZr$uUwg07Jjo`=C6* zil?k_elJaxhvuG_IthFAxmTNu_5 zC6*WE_--02xf$y<+80be|>$+8I z>y73>fj~)6zxWr%#p40tX6@Lu2!nNTzP=YO!Zi1t$6e{Dl`G-K?wgb z8C&8?>#^=@@9Kw++w0uoZuiB$b**0$KX_}aO67z>=W;r^wwCtMBvZQO+qsfEqP6iA zLPKOH$ieR;jafPQLKZJZVkS}MvK>pi_t%dP2{nlJRxiw%`tEq9d)&4fuGwv*nasGM zqh6Z7y~hN~53!0G3yCR{sSqyCbL{aOACwh!rc)|8*LqkQHf|w-16qEuuJ*1o0u|r1 zh_IWJ&w`a(L2R>T)Q28{dt^5oW3F6c@1|c0(38ZCEX0zm)c{~nMI0r8~lZw29Uyj8XC|4iOPII3`1i&f9_o3C6gBSl*lB zL0el#Mc7*>q*J!o@<0I0cqc-ZY2!$kakL8Qru^Op9Po^0q(V)U43v=w5M5xPRabwr z7!I&g_5FJ4HzMLb^&*8mY0EhU0f|~%$Q_t1E49tnj(8-%bo@|MS5HWX3SFiw!k|?7 zXHRv}Xp*~;e~dkBTOELj1BqCRXlJ(h3cPPW4Am@MDiPU?Sx)4?WgP~(dLj!p`irNy&fP!{+90)dqT zbw^rf2OMHGKo(?6x3qnI(rk*|Tc_oHD%#VO>F6XdM!gkzgajx6qyENyAIh!3PsbSJ zivh4G8!?)1s4~iKj!lK8(mYT>5`V;u=5h{s`e-!_K-A8=u6Uqp<~PHU_6C-S83}0(5Q`Kea#wk@~N0VJs5gD#-Zb5mFCCo^&#(er6J9z$18|_=tyn zU+ojef@?PT`vmWDm*O>BQjLR zmfwi^dxijDRk!@6^Lrk@-YblI(hr9^1)6I9)N#}5LuCf4|LA?YKeMb70AE(*UpU;8 z_&Me_6~Jbn=?H$+$gx)7WDHoawslbW{z!=lfJ4=QwRGG#L=4qX@W!~WDidjI2RW8= z0G3x4*`AWG^1Rv1N0bSm>6;oFy(t$2x?T8X#ztzwdrBHttlyZ2iLOZTH4^3Ofi3@< z7!_~c>c{en`lkzVt=_Z3Z|X{NtzrP5bpJp)0Yig<)N%6{WZq6vM`;WdzEE z(m4SL0G>9&;$~$CMBuy~78KX=J_(E`8NB>qQkSk;Ys6PIds#Xgl~4UCcG}rx!kK-< zsj%CzzQ(>j;`iU`(lu%=MXPD?%Vx_8Xz&xKKlw~L3y(T=_c)%^I0#d9l2GO~MN&Jx zs+)cf0ef6QqQecuaz@GVzp^Q%f|16_VA+Z*ti++hc}qs`l!&}lA9_$5KB{lOU0xJu}2?U@Ww6Md~&cvO`P|$ z0ri>#%$`*ET}OJhUCuijP18sZ&M}1Oeh4~E`;}|se0CjrP=4m$`BX-37k4SIxcGez zpc2BqN6FU@xpAxoXd5VlOM3$f2WCG}GO@U%j7dra4W+JdQLijqXP*_*()7oDFGbFx z)nLeQ>4l>492lFyd`^Pui@YIULAMp{)ZH}}1>c`VIoCfcq$}&i?M@&MG=6fHc_iT0 z?PF_A$aF!PMx2C6yPXZ>d!C0SlE?luLiT4FUmx=3P;IRY8Ys*69N?IQo2nl$qY)@5 z6233PS~8UH7R#69y$cLw{kVX z6lB-0uaS(B68i`|l+gpV$;yG0Bj5p07#0!J?>F0#=%0l5>E3!uR{mG1@YSL^kxYxw z3c)pL_RL7^W5~@`^SH$WOh(jw7<%^z^Wkx*?a6hR$nQH*v^_`6zf@eR;X=CS_nrIc z5;AuAXy&qgg+K~*uM@a#5@he-A-ih>uhCdj_2R2L|t$Y8PZG2 zZ4szFJPtn3sjRmlg$XwT$T!y`(8wXR-#kVz?PCAsdwqY9$8!K1Y9E^H1a4CVG|QdF z00QelUR(AP#_y3>)MvH$e?vQmc#_&~pQ~_F=Zo-FnUu`cwP}(og$A_`*jwC_7mAl01$x+)y@t9%`E- ze7~>{La!4Zg739+N=1rJFR!Az252!gz996!_FcrV7<|42;|Ev}fOZ`iP{_m-i1pW9Ucw)!r)do|-6pmy-S zW_P1B6L0nFcQ@al{*1b{3hKvKb3TvDhPa(Q#Zy``S0CH{(dwJ3eZUqdRq-}6KbD#C zkTrKkyOitG;{nC}Gbzg&!VY{*w%kVpK7RYzqciWSghS3|dWZmeEd;9su)}HZQL}3) z;iBiZQRjhKS`>C0Pe2jSU>GM+rA)_vE2le2`adZ5+*+Z)(q}e*891_tHwv8bQI^Y> zRrd49=lWH?c<& z@BsLaZl+C&VhA^9hp=LY%F^gsXg;)K`dH?9Br4$u69KQor?`j*imxy$b}N_Ab$6IZ zs|kW&(s}cf)n;06ht=N<$)O`Y%f1OsrDnf%UYZQ}F%W#bSc(|m4LpbyU&>#HU?rUU zcL!jZD<1VPVRA;O^NVT6@;CE>$K?=a>ZB*5&gI_P#fjRt9}s;MS28IDlLa}hE+f(d z)({ILea^hbK<4fD?g(fYbWCk}hdl2s0`P{ML}kUr(JhKBjqo4Gy&yN+Aa5R?NNBw( zT1oS6>RWjo`&A6v@L}&$L@-IRVe77RJ2Xi*=@wa6Iyoxw0vaF~83*WO@t^sHzTNNI zoNlG1M4*y2z!^FHTe;jkMys9*^ZYJvLD3x=@Qa~!%P}Z9D&nv5B~+}B5zLX}J!NCM zS|`)L%2CTX1R)t(@zii>J>TN!&vF!vg$Y8AB%V!VY?b=|^{9MPBr3S)on&C&WX^nG zt{$6j`q6PZ>KSo`IjTC4)sQ>p(-kIh!TVig@w+FeCq7oG;b9A(`4WU(Xq|6yK;DkG zP4v5Q*r9zToPm z)6U+-uB(3IL9WQVNfXUifeKOL%y^CTsePr)F&-Rg?ch+67-Wop~lC%vQLD_TaGkhX_jw_o#~g+(r`2JIEwQUty+ zO4GmP8_1;+MAYiqPZ%1#R08WJ5<#NikT35LKnDQ_RDVheJr&~D*FUe`V8&BFm-Lfz zK3oogbfFS5Yh8IyT-@j4UC+s2FnH$9L<|E681O&E`z<-hwAW%0NyGlU$tP^oA8a$B z<&ZB?3n1Wng$UH#S15%;p?_5%lGYQs*Rif&-*I~iM>)1`!eUI+X zH+n>{_1jCvfYaWD01b-fscperD`84Z#d)2sIRU9RQK-23` z=>x+KE3_sFv|RW&9XY8{8eD{!5rlPh|8sq3s6h0~DWuw6l-3$})k9T#mJ6Ii32f%yvA)p%)qcnqv%mIix#8NXTvg#k7&*`AqNqa?k-7t$}l_NqxHt*$Y~7jb5{LK6?=;v#md!pl6CY` z52BRIxAwm3uBg#T+`NSfFF0`md+SI-D{1L{p(0vRw6-Tz@*+w&8qjaD{8{K9@@3^N44EIee})fM3rST}^%lQyK8bJKZsr)YXuN=wbL4!yH( zclp`;jDPtcvtF~nFhRUZ=b=de*b2Xq107G~!gH7(TY+F1hzIl0DG?S11TNg*wi1A%__{E%i%wI=t>nz{1T z;R{c8Ai%_Q_yOPr7NJ5@UmysQSV%t)CYfYmOt|J-g%bgctn{cQ@r@wb!jfT(yDH`Y zq7d+6)LMe;R{aWYM+8I>?+^v;yMYo;n)06ga!8TpJNEc6*0;*O1&h1ScCH{)OGiXr z$dV`BvFt<0N2jK2+;mI6_ws?nuk;xpKC|7_Uw+*EVJkUp{f_^y>b1x3E$K^j#VpMtjPC8p6y9sFahDye}ksE75ipot6Srvf{2&2BP3tq z-%a2{`EQx@(+XJoh3ccg{+rn12GHFA8sxu;Et%7}LHkP5o66=(f5bJ!6{{2QN7eou z!MgX@X9Z532!J|(z|o9z{%d=NMVu`?M?}8ihv^2_t6qn>U@08@=iUvAxB;~XJN=(~ zFae`AYZ@5wS9RI&|FH`r7~Z`ma{qm^d-}t@uJwKVT~C8zQ1_W^`Y*J%hlqZIl6#Ln zajG}wHiXlhQ#?A!cQqqeh-S5ko<@gm4R)_GFk_QaheXqpQ^efIgbBdn^O5-5w3~pUQjIitSyapo`K=kHT)U-!z(2Y>0=UdG*swo%cr6Fa zcp(7EgBU=&>6!x!J48^`*S0#*s<%+yJV^}T?#Ln>)CIbss`rhBU|N3$KqI0U%!c30Rc%1JFtA52)&FYE<+oiU7h=v=3l(-@1+Q>)-44LJqKgb!VOyDwD3y@{_vbSIvNGOD_Po;R1%! zBj8lv*Q4syoiAFUlr&FJr=7@h`;qs_AtFfqFo^TZ$n2F@t^O8F8&>TRKh;=ZX4T|$ zAyri`HW1^m#w)Z=I@~z&#mU!u=Fs?!vHaFDg>QAW-f`sg5&^9)b&_$3&z98h-CXU7ti*%XnJlF z+b^l;a4Hv|=U^fb#gjh3K(E9HMPkz4VP#JX=)ix=xvHFn$#AGBT3Hr5!ygxlrqMv{ ztp%$AaWB2o0sPPFx139=%ux^vqTxHXuQ30(P|Gs}k!GOEiGX=v8r@U>^Fq;ALD=Vh zdn>@=<)8SwQEU_?MafgT2-pF)BAh4SS>FmG{4z*Ln^>w6K&aZFq&X1tMOA>l&)rBY z=G>5a09PtT0?@w%{XpEj$qS+fxd_P!$?%i*XUtIjtJPS-G{LA0HitaNE&u()?+Zn} z@gb&|f3+f2Y4a|S?F4T^{ddpFm%K)R9lws#5=Wpn#$fdvAp(Fh8aNP$PF4qm0Sm#y z7m%=rA35fz;%uHvFuu7hI+T53IEeO|1DDl$#8Wc1?m_M2su))mQ(w+;xddAT_hXS= zSkmH~>uXtmX*MauvssQ?L$>8j+*eK8IUfMIE4>(kRcn6b$xFQ`!kud=9c^6KRX1a# zi|7e`xBl~atoZDRV}{DLfJXU#X5=aw!*E6H*coA7Ua`Q;QGAic_rf}S9r!Jbhcsv| z>MjQB9J7`vH3!I-)d--I`->U^2F}slr>SiIuT4gu|F|0yzxdO$eeoy0y`0pw#^r{( zsJq)Lk{W^H@(6$fooD(7qBxxM9jh~uxbfycD6S3||Cy3%B>6D}Vw(4QQ1)M{r~WBn z3`BdaVbDpGn>&))bS{A zguvcZ1aQB!O+?p;3%`vtdwH{{vrZ7v&c}P_?d?)RKYf6%M8v*8n1h}Ju!2(z5!m~) z&_epzZE{xtK`m-j@b?8rhrj@@1W0ZrV1&nj=0mQw9UOCfivuel@dAmSH2EENTiqFw zZ<30|p^J^6j`YN#NkdTVq4I=i6PSNOmRivu2nvB{7=S$s4turvQ&;Ib0;RnU>xmm6F{~GeHm9&~35XlK}xw-)yjbIE}gMHtk=~8R^fhccQBWB-H@7LmrIEyHK{2(McN^Hu9_Xf~egDQeQ zwsUl(9sW6F<3-0vEVngvq!2Lue{ySksFF#4Tr-a87X+tpiI z)}0&F(cTw82ug;8ISDs7)F;{rYgr0?F{u3_Uqee@G5e`#mM>!lKV z9mT3I0F)6?2ZwFp50P@*+yt1n$a7J@LBA#g#?W8DQwNpDh|L4w1yB>aL%MP>wUe*i)AO5+G$)5#ZV|v3=pmG`umBTyYM_TeJHBeF#7Y2AZ(isWOvQl; zkB%1xC>TGo0-$&K0Aw>!Vj-cCz|a;hjTGC5Ea71R3q)`U99Y2tlN<_SC4o4c)%%b6 zc=x5@GI`whwL)x0P{pn1=qEggh&>1h#m7Z|3g-$0?K&Ssqe~eOtoJXOPz;2ayHd=j z_zDit8{n8aL&NA~G7T9oqaJ6a*{B%AimM_aSFg+UTO^8qnG`|&5Z{r&1i{RU<3*1`h+U}9>4qG3dg5K&*a(4dRtVYg^YUGr&&6qRA zpp#F#qj0`mx2Kgbtx=uP13_Ajs7|~Z%0)M27__y2L@1mpZf#dR{it!*!Dgf| zy=uM=hw8~4c#-7ELbU;LK|&PqTv#WgqKFKced_q760YK@e9IFYj)@>~;;isDl>lRX z>Jct@iW!DJ96siu^g`=^0&g? z5$}%O&55!h^OG4MCBlHohuwY>A(WumM6|u7NHq{8arxO$I%D1GyPc`#$|p5R)u)|e z)`cXQD35-n>)=OH5jpGEx7585&L@!`dU?uxvH^0U&n}*9WD`i|bM4VW5*4>?kLKPy zea<8~_w1Hg>i(QdOzIag45u|IOdm-CUWKa;1s$X(z@>WC^pJV)R2wpC_>4P`xe&n! ztgBSK)@gc?1~^Az0;#mo%4-194!zzoX$(*-S!&GltQN3QpBt;mgQJ)Vuj zDgPWafvIz04Z%_1qLc7Om!5Z{chwZ(Y>$Jgh3)Ny>LMI&rg-72! zw`=@|iccA6nuOwWvJ3iRj1*UUh?(kGJNJ)%k5zA`rOeyJ5JnE+UNIYYWf;@BNCj$x zo1FWQCSkT;iO92{(+@4b9@g+K5>b90Fb5KwD1Mm_KM$Z+2BW`uiU^>|WQp7X!|;cC z-eg#Z?Xf>(!M5(-}D;C6l)QPY8NE4Z; zMB=5kDx!7yDJk+>95Yo>OUz?G=62#H+3H{I8Bj1&iApu3!M+S~eJ^UMzHs%BnXwn& zqKh=yG%h%C51*Cf_vob^0_dH9`|r_n0vb1M$-GMTuu$AqaD(Yjp33_F${uk5jWCsT zAUD-bqur8#0xy{0|0hei72;je2*ej;hcJgw5D6Hg=g2-&9FwEU;p)M;KA!h~ic1(M zc0_2ZKt3(nC-c}SJzMfaLz<=J#x73nneJU-(nmoi1Ia9^@-IKujx0;(ip+mMd>-M= z=`cU0v#*sE#CHBN`}+Eu;}0cELpS9H%pbc2>jw04TFpw%xx6gCKEP*=$OVKrGxM7j z!eY3QIYYT*?`n&TogpMwYfmg&mi<)~KC)xR^~V~%PcftIkvdCP+;N*h%x+`fS!`sv z%f`@hW~R5(!~esJ=2{D@ye%p`>SolEPJ%4s$()p;K#$Ffc}Y6kKE!if&9;T6i0WLVix*jQ7o+046lHv;C98DyzGyhYkaZmBI*FT0W3YFu4xPcu8c-8&F;1No zb$z!tcW;WJ->!Ey`ha}ts}JjxyZ)>`H!)=j!69klnbQ)=J;<70o@r|*mQdV7kc{9D z4lVs4fW8Xw{dV&}0nukkiyG127jsuc4u!8Mxden@R{XlI6!&iwzee8k@3};qy7Zr> zZ=a*TUSg11y$aa5YX3&C_?_T-pOEq3niY>(wh>Vcg+ZLJP*Vg1aN59i%&-5gjm9JQ zzM{gt$`3;o5d^-h`*amhKRup1cV23WerAv4m~0Qd7en3Ea4mlBA%JoAQ)wS7iz?1< zvdT9N%H$25dqe->kyUR^*L9Zj$r(Q}faBOL076Yq4doF(YnF3Ij#1lbLLVccXkP|_ zS5AMt%F|W_UrSlMRI?(=Z&t<8ZJr2i80GeuSSk?oyX)gPL_CwFcQav_T>pn+s4GwM ziDf-KFB4zhUW!{wg@^+W#V4e@#wBO2RS)6@hS!$VcBS0A+j}`t>Zs+f7C=7+;t0Tf z6fmh&0)VDQ?i7LWG!k-vAq(YJg=IYO&82BUAvV+PpRB{$mrALSV6C( z`BH7KkNKR$@~0*5cz{`*KvTt=NGV6b=Z>FMD3UBs#czEH|Mpk}^OzM4ivhBPdp#hVqn<_GD#jn+fAq}EC73xoV#&#gj|&TO=w*r3SR+b{eNdN` zA@{k%T;Av)R^{!7J8+q*qq_Gx zwfWN3>D1-3p9*KWQm1!c41?pFk<=zcC2~DGXL1-XrpDZ3FTmcHY4n-qvVdR2U7OL1 z;_qL?lOA}=ei;nJUJA37SFo;p-*cVHBfdDSJ+q9rAro|feW5qBf4(~2=Qi4O`N4RBz4TISICCNnL1uH z-XBc{YB`HjrXvjByEUOz+H&j3qe*09;akt6zNZ;G?{@W``H?*_dZuQ7F*Yf{T)F%( zd*i|Ju|+I!X8U^HgcAPqrOg8vD1I;S`zSTCqY7i>M|~N60%Gjq8gX8j$ZxzvapZpx zhW{Xn(NnuNzb(Na|7vGt5wt~sl6ROYyZBeVNG7&jIkG$!~onB5-t{B<=}J4otJnsupJ zbP^~Z^?)@N5HK2lNE6_tp1ms%9h-q@-et9v4J*EVXhJ8iq!+)ra{EC`%KhzQwW|e< zhDVXj$o30vi3p>DRI&Xc?_~G+30g{wG}ABZl#@?S`murV9==pGHwOInyxX$O&rP?r zF{U|;jQJ^{$$803@t-G#F48Q^ZO(Q#sAtXD3*RA)q^@h-CpnYw=E(9@VdXdbJnvfz zF@bwt3N6f)iORW98OV$YX_Zx zxDc>ov18#A&NKb%tqc#S^+0OhReKia)bSOX$22ec9Y9FYl_n6pI#>rGiU81FDcczF z&opt*Hmo6luu1fm(}1ln-nhJz5#DjxNYS@>`K_3O%uz9UliG`&Hus0&mUn`TIdm#< zok^nP-VrmqhsZV?C6#5KvDHSe*%9#kF#Y({^WB6^f)~#0nK;b@anBJAr3@qG!_Aa; zq~krO)#PMn!1!C{yW|n7@5zJpuD;fp6W7;Y@+Uu_61ZzrQMfCloWH@wuX&HjDoPD6 zw)1vo4RJ1c^kk}$m0sZB%R6HaYr=Xjx=Q=4n8xc>!^Tq~uD9)R_jGgHQm&Lv7w&gUo_}O|_}nO3LIDig4UZIDNXo)1Oj%dYxT9{$`oB z^40YTUbwZBqjo>ZO<5#FVlfRpL^%z4`8@6XGxmlNw|tYD+HdD)-FuBx z^{u|gDpM;UosYJFBOfc;>Mq+&WVi6KH@?J@ivhyU8oNpU+3F9lS_LpX{||0QlY<9! za2gtf5d3xsMe#ejf2Q^M8_W8KZFw7<;v;kp-;GF}=vLnBAtK~OT=%~c!e*BK2Ge(l zs9)$oogmJv_~2(KXP$!MR%6|ozZ}%$G3NF8y5umq)pSFPMvy<(G@NENwBD~ErM}k5 zvFWQQwuCV;8F<|NbjG!+YKbD*#WWX{>Te(gV+3zE0OjOdu-&rB@s+g9OT{K|cJ|BS zkB4`2*%X+2@IJ>(P1w0#372Pf2q3no$VFeDT!8ZK&V{FE=qC3f=vp^=&c5Xs=jjx$ z{V05`_NIn$=ℑ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 z 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

_ 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 JwsH~X@gJxltResa literal 0 HcmV?d00001 diff --git a/docs/md/projektkonfig/config.yml.md b/docs/md/projektkonfig/config.yml.md new file mode 100644 index 0000000..cd53f40 --- /dev/null +++ b/docs/md/projektkonfig/config.yml.md @@ -0,0 +1,34 @@ +# 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)!!! +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. + +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. + +Das imageUrl objekt definiert den Pfad zu einer Bilddatei die als Projektbild im tibi-admin verwendet wird + +"collections" ist eine Auflistung von Kollektions-Konfigurationen. +Hier bietet sich eine Auslagerung und Einbindung via YAML-Tag "!include" an. + +Unter "jobs" können Jobs definiert werden, die regelmäßig ausgeführt werden sollen. +Werden Dateien innerhalb vom tibi-admin benötigt, bietet es sich an diese über +"assets"-Pfade erreichbar zu machen + +### 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 new file mode 100644 index 0000000000000000000000000000000000000000..64a2b6b7a3a7eb975c9af00ca4ea76caae0711a8 GIT binary patch literal 111548 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%0DH($>b0gM+8T|~^yAnAnv7RE*>Ih?%AYGU}bO@n* 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 Kz10IWA@L8!YYrO# literal 0 HcmV?d00001 diff --git a/docs/md/projektkonfig/jobs.md b/docs/md/projektkonfig/jobs.md new file mode 100644 index 0000000..8e1549d --- /dev/null +++ b/docs/md/projektkonfig/jobs.md @@ -0,0 +1,13 @@ +# 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/lighthouse.yml)!!! + +Die Möglichkeiten innerhalb der Javascript-Datei werden im Kapitel [Javascript Kontext](./../server-javascript-kontext/allgemeines.md) beschrieben. Ein Beispiel für eine solche Datei wäre die folgende: + +!!!include(../api/jobs/lighthouse.js)!!! diff --git a/docs/md/projektkonfig/ordnerstruktur.md b/docs/md/projektkonfig/ordnerstruktur.md new file mode 100644 index 0000000..849002c --- /dev/null +++ b/docs/md/projektkonfig/ordnerstruktur.md @@ -0,0 +1,65 @@ +# 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 new file mode 100644 index 0000000..8907ee9 --- /dev/null +++ b/docs/md/restapi/assets.md @@ -0,0 +1,27 @@ +# /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 new file mode 100644 index 0000000..542a71e --- /dev/null +++ b/docs/md/restapi/collection.md @@ -0,0 +1,239 @@ +# `/_/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 new file mode 100644 index 0000000..e3e4b8b --- /dev/null +++ b/docs/md/restapi/login.md @@ -0,0 +1,63 @@ +# `/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 new file mode 100644 index 0000000..468c418 --- /dev/null +++ b/docs/md/restapi/project.md @@ -0,0 +1,99 @@ +# `/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 new file mode 100644 index 0000000..9ee3276 --- /dev/null +++ b/docs/md/restapi/user.md @@ -0,0 +1,81 @@ +# `/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 new file mode 100644 index 0000000..1fffe22 --- /dev/null +++ b/docs/md/server-javascript-kontext/allgemeines.md @@ -0,0 +1,71 @@ +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 new file mode 100644 index 0000000..0c4e24f --- /dev/null +++ b/docs/md/server-javascript-kontext/packages/bcrypt.md @@ -0,0 +1,34 @@ +## 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 new file mode 100644 index 0000000..dd6bd82 --- /dev/null +++ b/docs/md/server-javascript-kontext/packages/charset.md @@ -0,0 +1,17 @@ +## 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 new file mode 100644 index 0000000..12fa52c --- /dev/null +++ b/docs/md/server-javascript-kontext/packages/cookie.md @@ -0,0 +1,39 @@ +## 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 new file mode 100644 index 0000000..0858a76 --- /dev/null +++ b/docs/md/server-javascript-kontext/packages/db.md @@ -0,0 +1,87 @@ +## 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 new file mode 100644 index 0000000..dbf705b --- /dev/null +++ b/docs/md/server-javascript-kontext/packages/debug.md @@ -0,0 +1,25 @@ +## 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 new file mode 100644 index 0000000..e62349f --- /dev/null +++ b/docs/md/server-javascript-kontext/packages/fs.md @@ -0,0 +1,93 @@ +## 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 new file mode 100644 index 0000000..8f56cb5 --- /dev/null +++ b/docs/md/server-javascript-kontext/packages/http.md @@ -0,0 +1,37 @@ +## 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 new file mode 100644 index 0000000..3b695e2 --- /dev/null +++ b/docs/md/server-javascript-kontext/packages/image.md @@ -0,0 +1,39 @@ +## 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 new file mode 100644 index 0000000..f5e4b2c --- /dev/null +++ b/docs/md/server-javascript-kontext/packages/jwt.md @@ -0,0 +1,59 @@ +## 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 new file mode 100644 index 0000000..5f8bfc7 --- /dev/null +++ b/docs/md/server-javascript-kontext/packages/pdf.md @@ -0,0 +1,113 @@ +## 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 new file mode 100644 index 0000000..3592b6e --- /dev/null +++ b/docs/md/server-javascript-kontext/packages/response.md @@ -0,0 +1,18 @@ +## 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 new file mode 100644 index 0000000..00e8e2f --- /dev/null +++ b/docs/md/server-javascript-kontext/packages/smtp.md @@ -0,0 +1,32 @@ +## 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 new file mode 100644 index 0000000..c224a9e --- /dev/null +++ b/docs/md/server-javascript-kontext/packages/tpl.md @@ -0,0 +1,23 @@ +## 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 new file mode 100644 index 0000000..5fed688 --- /dev/null +++ b/docs/md/server-javascript-kontext/packages/user.md @@ -0,0 +1,20 @@ +## 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 new file mode 100644 index 0000000..0c825e8 --- /dev/null +++ b/docs/md/server-javascript-kontext/packages/xml.md @@ -0,0 +1,29 @@ +## 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 new file mode 100644 index 0000000..579ed83 --- /dev/null +++ b/docs/md/servergrundlagen/entitaeten.md @@ -0,0 +1,26 @@ +# 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 new file mode 100644 index 0000000..0f0790b --- /dev/null +++ b/docs/md/servergrundlagen/konfiguration.md @@ -0,0 +1,3 @@ +# Serverkonfiguration + +TODO \ No newline at end of file diff --git a/docs/md/servergrundlagen/ssr&htaccess.md b/docs/md/servergrundlagen/ssr&htaccess.md new file mode 100644 index 0000000..ed2b3c6 --- /dev/null +++ b/docs/md/servergrundlagen/ssr&htaccess.md @@ -0,0 +1,143 @@ +# 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 new file mode 100644 index 0000000..c6a0ce8 --- /dev/null +++ b/docs/md/tibi-aufbau.svg @@ -0,0 +1,5 @@ + + + + + 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 new file mode 100644 index 0000000..86e720b --- /dev/null +++ b/docs/package.json @@ -0,0 +1,19 @@ +{ + "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 new file mode 100644 index 0000000..32e820e --- /dev/null +++ b/docs/yarn.lock @@ -0,0 +1,7181 @@ +# 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/frontend/spa.html b/frontend/spa.html index 848bd4f..293f895 100644 --- a/frontend/spa.html +++ b/frontend/spa.html @@ -1,4 +1,4 @@ - + @@ -16,6 +16,15 @@

+ diff --git a/frontend/src/App.svelte b/frontend/src/App.svelte index 0e77521..1b5f229 100644 --- a/frontend/src/App.svelte +++ b/frontend/src/App.svelte @@ -1,5 +1,17 @@ -

Hello World

+
+
+ + + + {#key $rerender} + + {/key} + + +
+
+ + + + + diff --git a/frontend/src/config.ts b/frontend/src/config.ts index 1b420cf..5078d4d 100644 --- a/frontend/src/config.ts +++ b/frontend/src/config.ts @@ -2,6 +2,7 @@ import * as sentry from "./sentry" import configClient from "../../api/hooks/config-client" export const apiBaseURL = "/api/" +export const baseURL = "https://tibi_starter.code.testversion.online.de" export const release = configClient.release export const sentryDSN = "https://5063f9b5564d0fdece4e47a8e2e63672@sentry.basehosts.de/3" diff --git a/frontend/src/lib/assets/css/components/pagebuilder/form/form.less b/frontend/src/lib/assets/css/components/pagebuilder/form/form.less new file mode 100644 index 0000000..cb363c4 --- /dev/null +++ b/frontend/src/lib/assets/css/components/pagebuilder/form/form.less @@ -0,0 +1,252 @@ +@import "../../../variables.less"; +.my-form { + input, + select, + textarea, + .data-protection { + margin: 5px 0px; + box-shadow: 0 0 25px 10px rgba(24, 24, 24, 0.05); + } + + .success-message { + h1 { + color: @main-color; + font-size: 36px; + margin-top: 50px; + } + + p { + font-size: 20px; + margin-top: 20px; + } + } + .invalidBlocks { + border: 2px solid rgb(255, 0, 0) !important; + position: relative; + &::after { + font-size: 0.9rem !important; + color: red !important; + position: absolute; + bottom: 2px; + content: "Bitte wähle entweder eine Kartenanzahl oder einen Wunschbetrag aus."; + } + } + + .border-red { + border-color: red !important; + } + + .no-margin { + margin-top: 15px !important; + } + + .invalid { + border: 2px solid red !important; + } + .error-message { + font-size: 0.9rem !important; + color: red !important; + position: absolute; + } + + input[type="number"]::-webkit-inner-spin-button, + input[type="number"]::-webkit-outer-spin-button { + -webkit-appearance: none; + margin: 0; + height: 100%; + } + + input[type="number"] { + -moz-appearance: textfield; + appearance: textfield; + } + + .checkit { + display: none; + } + + .checkit-span { + height: 20px; + width: 20px; + border: 1px solid grey; + display: flex; + align-items: center; + justify-content: center; + position: relative; + } + + [type="checkbox"]:checked + span:before { + content: "\2714"; + position: absolute; + transform-origin: bottom; + } + + .form-rows { + display: flex; + flex-direction: column; + + width: 100%; + h3 { + font-weight: bold !important; + margin-bottom: 0px !important; + } + @media @tablet { + gap: 1.5rem; + } + .form-row { + display: flex; + flex-direction: column; + width: 100%; + gap: 1.5rem; + + .date { + max-width: 100%; + box-sizing: border-box; + } + label { + width: 100% !important; + font-size: inherit; + input, + select, + textarea { + width: 100%; + font-size: inherit; + } + } + .form-cols { + display: flex; + gap: 1.5rem; + width: 100%; + } + } + + .form-column { + display: flex; + flex: 1; + flex-direction: column; + justify-content: flex-start; + + width: 100%; + gap: 1rem; + border-radius: 4px; + } + + h3 { + font-size: 1.2rem; + font-weight: bold; + } + + p { + margin-bottom: 0.5rem; + color: var(--hover-color); + } + + input, + select, + textarea, + .data-protection { + padding: 10px 20px; + border: 0px solid white; + border-bottom: 3px solid @main-color; + outline: 0px solid white; + color: black; + background-color: @background-color; + resize: none; + } + + .data-protection { + display: flex; + + flex-wrap: nowrap; + gap: 5px !important; + justify-content: start; + flex-direction: row !important; + } + + input[type="date"] { + font-family: inherit; + width: 100% !important; + position: relative; + } + + select { + padding: 10px 20px; + border: 0; + border-bottom: 3px solid @main-color; + outline: none; + } + + select:focus { + border-bottom-color: @main-color; + } + + #time-select { + appearance: none; + background-repeat: no-repeat; + background-position: right 20px center; + background-size: 18px; + + option { + padding: 10px 20px; + background-color: @background-color; + } + } + @media @mobile { + .date { + width: 100vw !important; + } + } + @media @tablet { + .date { + width: 100% !important; + } + .form-cols { + flex-direction: row; + } + } + } + i .max-width { + max-width: @body-maxwidth !important; + } + + .datasec { + display: flex; + align-items: center !important; + .link { + height: 100%; + display: flex; + align-items: flex-end !important; + text-decoration: underline; + margin-right: 3px; + color: rgb(14, 91, 146); + } + } + + .additional { + display: flex; + @media @mobile { + flex-direction: column !important; + } + @media @tablet { + flex-direction: row !important; + } + gap: 2.5rem; + div { + flex: 1; + display: flex; + align-items: center; + justify-content: start; + } + .submit-request { + flex: 1; + box-shadow: 0 0 25px 10px rgba(0, 0, 0, 0.05); + width: 100%; + display: flex; + align-items: center; + justify-content: start; + background-color: @main-color; + color: @background-color; + padding: 10px 20px; + } + } +} diff --git a/frontend/src/lib/assets/css/main.less b/frontend/src/lib/assets/css/main.less new file mode 100644 index 0000000..f72926b --- /dev/null +++ b/frontend/src/lib/assets/css/main.less @@ -0,0 +1,99 @@ +* { + margin: 0; + padding: 0; + box-sizing: border-box; + overflow-wrap: break-word; +} +html { + background-color: black; +} +body { + color: #343a40 !important; + height: 100%; + background-color: #f9f9f9; +} + +ul { + list-style-type: none; +} +.boxes { + .content { + ul { + padding-left: 20px; + list-style-type: disc; + } + } +} +ol { + list-style-type: decimal; +} + +/* Links */ +a { + text-decoration: none; + font-weight: 700; + color: inherit; + font-weight: normal; + cursor: pointer; +} + +/* Tabellen */ +table { + width: 100%; + border-collapse: collapse; + margin-bottom: 20px; +} +* { + transition: + background-color 0.5s ease, + border-color 0.5s ease, + color 0.5s ease, + max-height 0.5s, + height 0.5s ease, + width 0.5s ease, + flex 0.5s ease, + opacity 0.5s ease, + top 0.5s ease, + bottom 0.5s ease, + left 0.5s ease, + right 0.5s ease, + transform 0.5s ease; +} + +button { + background-color: inherit; + border: none; + cursor: pointer; + font-size: inherit; + color: #343a40; +} +input, +select { + color: #343a40; + width: 100%; +} + +*::-webkit-scrollbar { + width: 10px; /* width of the entire scrollbar */ + height: 10px; +} + +*::-webkit-scrollbar-track { + background: rgb(0, 0, 0); /* color of the tracking area */ +} + +*::-webkit-scrollbar-thumb { + background-color: rgb(255, 255, 255); /* color of the scroll thumb */ + border-radius: 20px; /* roundness of the scroll thumb */ + //border: 3px solid black; /* creates padding around scroll thumb */ +} + +* { + scrollbar-width: thin; /* "auto" or "thin" */ + scrollbar-color: rgb(255, 255, 255) rgb(0, 0, 0); /* scroll thumb and track */ +} + +a { + color: black; + text-decoration: underline; +} diff --git a/frontend/src/lib/assets/css/variables.less b/frontend/src/lib/assets/css/variables.less new file mode 100644 index 0000000..9bed256 --- /dev/null +++ b/frontend/src/lib/assets/css/variables.less @@ -0,0 +1,18 @@ +@main-color: #b5103f; +@hover-color: #920a31; +@background-color: white; +@bodyfontsize: 16px; +@bodyfontsize_desktop: 18px; +@headingfontsize: 24px; +@headingfontsize_desktop: 32px; + +@font-family: "Open Sans", sans-serif; + +@desktop: ~"only screen and (min-width: 1024px)"; +@tablet: ~"only screen and (min-width: 768px)"; +@mobile: ~"only screen and (min-width: 100px)"; + +@body-maxwidth: 1300px; + +:root { +} diff --git a/frontend/src/lib/assets/fonts/LibreCaslonText-Regular.woff2 b/frontend/src/lib/assets/fonts/LibreCaslonText-Regular.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..d898b4ac804bc1c2031dc9801393c7ae96b93eb8 GIT binary patch literal 36184 zcmV)8K*qm!Pew8T0RR910F77x5&!@I0eYAK0F3Sc0RR9100000000000000000000 z0000#Mn+Uk92!U)fwMpyh-3y}0EcD>fes0pZ4n3xgTn-ai7g9=HUI%O0we>FXapby zlLrT%Hw=L>TTWP!3B?Zoz8*qJYTKL}0xW7`-OWd8O4xMZyruK@%DfO*uz(xm49*KU zbnTbU{{R2~|NnnovWVrJo#S@zgK&`W@E!>=A}o6h%7TKbV>`IO1r7hP?|dRm6_2A z2Nt$otaE+JNCPp4-iPZ8@0%THRH{mqy#9Q}wPO5r60Of8e%Gr>@6N~R&sK`a{^mSPS;b%PF6k30&zA`*qg1IlG=~zIDT^AFuEEF`l(a%chk#x6vB&`XHW_WRDhDWAO37|F$4!2d+35qu zTBx%&x6?OmNq~90CVHo;yCj|C=+@4BIj)v64D~Y=1)l;8a|oci-!wWvkzBm_}-%idodO#JeH29}-%M zs3qnN(A+{9$XKvqw~dXBZ7f*lEs`}0T888(0VxA~#J~(}>^EPG{(qxhzry#w{Wm`S z@{7YZYd-IN&F+b!XG)!|$}f-r(}n~~4N6<6J+pVOBP1vR6h|r|fwa8em;!hAwU${d zfno&tPrChg?qs59M1f%PLI@sw;C;7pt!S)i_7~l*7v&b^{(VmEeaUfW-jm{z9c)=H z@oABc{a@d)+I71wvo7wnxdMP)c2XdcqMdOWZ@Xg^=Ta?CcEm@5h}v`-P7qK0Qiq!Q zzFPqQ0RTme`@aX_LzoVu(v3_GsVtPXHKKy71tlanFf{3Xz0TLB{o!=pcmJ2`{@aRJ zMWeJH(lp*SrbvKckbz;0G*t569{|F&l_aRhaa%B3HNPQgh|Snd&#(Uh7z2V1r=M~9 z#!r|7q-9LzRO$AUz9A|&b>QZr+oZU0f#qoL2bS1&i5%cT2n>GTRC5_=SDwFJ>g$x= z9!~(u-K7Fz=0nT~IspRy^FIKf00L^jzzq)EqbQ1^Xqu+$w!UwNgWtn{DQn3&QmJM( zC;OW2BPPiK(?e6zbr>+OUE5-vV-oO64U7PkkTot_Me)N8&Mk_fD4M2ens$Q&*C>jj zXqu*J+6~S%ilQi*rfHfE0{DMi`y?T^9COoGpqTC6IuqT+ z$)%Ts8{~KSMH?PG|L#}X+)gv#_BX0>;gvwRJ+*2!gYRU1fiqCx6qt>zk%*c=)tU?Holr0euVu46unHJw^ZR1nc^#v|MSb1seb@ndtndsY)%q z|Fh1@x~#!EP+{nq6&^H#w(b-~<7ap54T!>&PM0MqDqt;u#f=5v?L9R=u{&zPu((o3 zvR4q<;&1s&8^JG7WOoH`VcYXBlb?QD|92E|MZ8faCNUKZ4EUn|o_jzcHj(_(O&KIG z30?SwekdZjnOJ5JWlif-u4eBZLrx7zSa48H5RbU3(0tRmi(ljM1bCQScM? zJ7mt9HqhnoA)v4g7=%E^U54X-oFjl=eaq7T@QatauLFL4Z^LB}a5Uf!z@QpJTS2I*ghry0?1lG|mL;X7n5DpkXfFngIgxz!BXaxp;JH-hs|J5`K+`s|W0Ri+W z6}|CNrGPJ8Gf2q>f>#=v97n4>#qkJ^=f)xXu;=Jm_J3}WM>n0;zAD|f`5aeM0S@Si ze*-s3aKPp0l^CPJX}4maao%Z4D!1aMwx^@DcW;yvI3uQF_DtJcn~%fbFF`2PSWCm4 z?0V~bWM4pJ8sA!QTpAI~f(_F6g)y)v4^)}Drb)ClaX5@8xY&W3df*;(F+*zCv&aV_ zQKZVE#zV6ZO88&h)8yL0U`_7gZb}TxxOoR@xriDFk!R3{NJ`9^g(t)WH$}{018V9S zLDZgLoGv0CGY&nKvuEN&p)X_-i@vVsPg`_y?~Fp%wjQXd>)NG1^L0~}naCXap%Fj` zg1{EIxshnVR6_$M7)x}ZqsWy*t9zXe=!-0IV4M_`$;QPzR9g--KQ4))QewJ(5rL;+ z3QGduO8H3Totox}lCr`sFnLs0RsAx4pbWr{2saK@sZpe;jYM}vU!Y=~t5Q~!K$sieddjRXWU=0}LF(*fJHJjW|a&smYb2at{!yfR2U}q)fWP*-{IIO$3WM zeh3cMw_t&^K{LXUi=v<4o?E%YUEJK|Q`gg%%PN9Zcs^aA7c8Afr3nGN=lKX7g49UE zjPv#M@20K{Eu&)ee!>t*F9@Lzt<6H z$%O-RKovNQ0m0!CO=mr)ye*IUzltx7U#t;0C+7R{zt_7W6i?|4!S%F2na4CwgA~5D zranr0Wv*n*UFW|IQw-0piiHKQ2}PbYis{+PM3V#2>9QnCU^&Q|Dy$)f{6^uT2;oF9 zVmJ-j2+$~)N^y%?)M8jmAX*C9GVqo|R0Y`z@YVrakG?@{!5KnA7-F~&6nBRgqUMnh z23Ur0a#ED!7$KNs4pYqFv!0Sm(o_TxK?o5jK=42Tp69iO9lT^AIKvkD7>s;^%%>=Q z2HA74UO@K}g|FcD=3>C?4wo>Gp4d}kgi$KfDEnI4vX)oXiq=swHTEAk8*2~@SlhPxcY*!-TwIIoiakCv{-|~7T{+Jf_SAM zK@&7Cnh-;TBF3DrtMF z@I5QpJvg52_?|lM;DU4Vv={ijf#nK{`ADhAob$%w=Xb6m&i}E%eR`@)1i}AS8OUO< zN#a_y5O68DFqdSs5~QB--gk#Ua6!|?^Bb)fubFsYB?@4(@R+pVv}+pu@aL^G6nUuz zvuS4;&u9#qVHSZQn=uuZBB4iRisdz~3_rNLnH`c{*1J{GKs|k=O*&36%8)cJI;K;c zu@*z3IGkTlKnMMOP$HK{kS^LbzS4MhnH0XWI-N5NNGEr7} zyoUAuwg_d628TI8D?{SqG%RM0cZfgZ|5qCB z0b{zJDQ`-nVbh3*#g8CnU#B!U2EK|J99taMgRHqoi|ybaQckU8px~1zuk*hv1a(4K zT!@PGUev;1|4RSrt!;YoZ6+Z-3W=+y8C*GbAZ4DV`vFW;7gx(1;Ky zmYaBP5~$?yai*)g=zUS2*k6HxX^<+6DuSvqx0dp%c(okCMG&oUzYTirm2em>JH6~O z?FfYsiXat>5s#68l817J>Sn!X^=11z&45~{CaQ(%GB6=%5qQq<2rksL{QZ{b)t2cG zqm`$(rjiGvHAJtsGK3sSj7y9s0G|mBTOoo(@E6NfJXZ;vo(DAaWbPU}%mr1xXRBOGr= zBcjJ25yNP6*UP<%++nm$t=H6*riSBTgv1jO;|#`vL>HJ2m<@!JMUq63M3W40Ax=W; zULr#hLo!JUV5p{4hBPfYoL(RUlIc;FP&V5L4WkrPGE^gWlI`ym*`z4u?HQxptB$$3naPZ7IN{#v*1Yv8HEf6F^K1E1MXoOKFt2E1O zbIdi*d<(3$$!1$@was=rR6C&AITu`VS(k?%`RJ=}zWeF7Kl%(nLIRSIh79CEK9r@% zD9dcJ%`W>Ka!QqJ>OAtwJD>atD5=!+WmMjXMmMIhjcY;`&1hzGn%ler*PsUBzOwGBjtvR>3GCeL_^LAP>6@<82yi1 z=61nX2|D&SSRTK-rY+#4b#E)1^w8?TBUVg?CPY3>=)n1_KX{d8V>>Q~MX06PLll&A zVix-@`Vf~6vKCV`00?*ruH5n#7?>B6(*TSWHXI2x;9*$F0{DADQ3m2oM=MLLbOJj$ zUR&4ZN-RZtWy~KrhSBEbpt6yNxWjyJ+ck~DeuaLSM;aQZtzMKGB2^$q4zwaxD1#rA zu@z!^k5hRx@ToL<&!#K7ZFh$sK2+h3+O+|Hi?@O;YsSGQ3%4CQO;jlxKoGS1J-s=i z%%bfDqg^H!1*lj62ROr%7$1v+fMrEs62FD$lM85n*GnnNi58{TMj3*0s4J|gRYAkY zJSFP8C7s4cjfy5G7iO8c%ut_d#z#vsBwM6XOAEa!bhl62?@!F8O;LHzKa(o#&V8RF zbmU&Yk;oz#CEI$j50F<@Avh0O`1#_JzWM5>ysR&yIng86y3@I@E&fLX=Gq+(-5Iy5 zTAiT6mimfIlY_q2J(Ea5C)sB+frhSP!oqdA#0-njLN6J8fL9YfJOBjXwQJ73_RJn6 zpfTNNtT0#;nNbAAeIvB634T+4j&0ICkV& zwMu3kI@|q_tpRhnTP#H{(-@Nrx~qqV@<&8D)-@-YGm*`GkFD7*m@V!~7dHG>?vj&m zG~`zZG>vqdIv`q}2I4@9Lor%$wv{Z>+j>_1$V+1eDwWo04?6b&8l=n}=IjWBO-d7> zuZSaU1Fed7&B`FLRxcz82xV7Mz@2Grjio94XTgT?)4+-)1W@*VNe{@QP}?>pgBgd)Ki{kQQ1&(rbRUM}qwXFTCB(h{o1i81>6D%;v(a>~5^9c;(b@ss)09G3 z7*HkUkH1peDpmjR1@Mc8WLtp*gkTKd2m}&^M&Mu=VsNo|_+$j+ghX!lxCgi83c^4n zjzKt>qW}i~FOiTG6yjf^%t~vsy1E!R9~n?Jn~v@QtTm6?R?V|67rqJiDiLv<0UkD` zv^cN^CyGPFf*rT}@D1KxG@yYEhChN=Qagw6UKeS(#rMFs9mdwnTWkT zD;$~_wHM}=iiak%SzqIi`!xm&W@un;o8EwB>y+f5^KXTQXS#x!-D!p%X zO%F2UAt5I1qAO8Oci%OXq_){KLGXpB@(b=30{Jy0N$gs5)!0ZzIa zK7yxDeqgx`%n95*SHp3FFz}RO`p1=umocQ<_?3Gn&;L zy?<)x#NUGhN8fQ=3?+f-pwnWz6yQ<}|E#@PcxRDKW%-G65lD==nApyC%xr?DxEEg; z_Ptg}xvLx{p&hihz+q~JrR!$?(bgt>~)6#S@iBmQaO z1w%abh8&;2_vucD#+{OM?WMNv$ue;hsS47NBuOJ9*?v=+UtjOwCZ*GcVk+3VBju93 zIiOY-i+cddK~fonyZTcH*v_?dkdYoAd*BVD!vbz4O!3Q|14cUiexDxl0*$n_lyRvX z87T_RmE|Vi?twDMQzyda5xes10h_f?3`ki8tEv2Uyz&rl@NsyaO5VP zIRBOUljW~p8Xb(&O|~EYXCBCei>?EX5jmSf_R>PzLU}t@nrX58~IgM-(bi42PK(&U)Zw)IfBVi<^6$wvLtxq%}+gxXo zkeR`?C0o|=w`;TLsldKPZUcC&xyJCz&l*Wu$sCoY z{))*HQ9L;%u3!Zz*lB7{2I(d$k;qp7D3G3#k#-u9>a7QFJ4=NPF6ZmstPHmF+nPt1 z5e{}dS%{2PXa%I_?B<&aiGFh3Sn?V(MFc1k5(N_t7lSYaDHc~8iWV&%M*>D7DM`4J zu~I-o$wRx|2 z$VcORw?E-ZIQWpR)GZgYsIJdgbM!|%>kAuI?X7$G{KOj+S2g)jKq;TG7B5q8UmP7X z0Sg?XfRI+z)48dCXxyv4KQ|j38t1bf#ij8Yg9UeJU~X#y=r~$Upen}PTl*>*bulyB zl2)#2K?GN|!z)5q0}?$D<)r85o|L3*^JapE994e7-9jKAg(Qg`?3dXvmKlZhn<6~U zf?zv6(OwkX{KfYyw}E$ZJpHjZ7>>r1>1@7OuIB1cI8qXg#S^7v7)6~}OXYM*{@BVWS zo50-kEfi{n?&(A1Fm2d27 zh`t63&; z>w;5fwx0Lbl?q!%L)C?}vX5&CpkxjL?7g393O*QFCygO^6eIfZpNKf~k$RCd=;4wc z7NEi8x+W`)qA(B65-xmhwMkNNB*>2s>)VEijqYH4c^oX@AOUUvDugiOP-+jxMP7Lk zRphBC2vxvbmxZ+l{+tbq!bJiRI}&O+Lj=*u58pkSwdD5a^Z4hn4|_r6)X-BtLCj&h zZup59qt`bSGr_@I{I`gc6V@3dWId3E@t(k7ZfQ^4v~oZBaSD-bGI}*3M?%Ik{ezIx zM(3rlQCT8{phYjh%D*zpP+k~uvZo;a@zIw@9Fibp5H1al9E`$m_EL#sGWaSXvk2N0 zf(s^=LN@M_B+CdEx$#?oj7QuAcI39FJ1~u9S@vLj-qH&&$D(6Pf^h+HF8{S+g&cDv zSYv=893%zQxe51?PlKC5CXl-VM*-)6eZ~Y9pPAP}6lzwWz)`?O7{(~Ts~Bc;8)0!M z%e;1rxs9yo)15t5R=O+x)P-rQ3rvN)F!}75PTu3{DQlMKrReP5<8ec{jQyY$Nu8hEVqHR zArna4ufq)SxSc_0zWH)+t;w|M82hwvK1#@0IJT2Cv6s+8jG=z;fN zukbUQ*V2Kp4mhCP3#ul;AUSM6wnZJait3;jbrdVQk6zR`IMW9;eNZo7u(Kb{2ne_! zgkW4zNLs9+MP6+Y@Do{V70POg1Hm+52Po%27eJRlohV&MH&JdO-A1{Kav$X(%43wb zDDO}{pnO94g7OXJ2g*;B-#4|TS${zJAEjR@r~t4J2dGGZ6Af@;08TuBlME^aR7MMR z$;J~g3}YCEVHlhMY@$Hm77RBH+#(=LOsWX-3Jw8sbomCyw3QFZR#FKnN>-}XsLHEx z8WBNV&>>&~F5pqT$yDPuwHj4rHL4jA)Ri3qBM?8d2@sB9O>Q+%IKTntV-G|F>m6>e z7&AddJ?myzvyHOH${W!1IH~64Q(U3U@U>|p>YN=v>_`RzL5b2y8bOaTC^Bv6vQhzB zlTH!>ijz*#0=kn<<`4RkPLTjAQ$2O5$dm`$y)Aff#(LT1u3aH=RTfkmF#eF~Q_STi z+y9krbuONKm;i}IX=9xSBo?KObzWV|z{~;^V1P|H#L#o|i%Ki1>oNg}MQLN52P76X z)_G-39U}^p3kwMdkt9vI8jNSlP0jWMV-?B9w(fzUc}rHV-@5BS!{L)>tJl4W27J=H zFqL(6C#!1fy7bgXQ-~>-s&3k@4>9FZ)lJ*=)oV3q)*@IC3)svlQs3P_I=#5Q+l;K9 zwaL1_m?+!jw;P=Jf?p~H=<~YPZ@xd3aCavZ3I*?pbi460g#h`S^_8?pw<9t zr%Q14OCHPp=o0p65FVmQRdU)`F#yLcjgt4dzH4+ukpJImt?e2cT@xttc|vQrdX9}^t_$ZV)isM+Pd$;VB* z4}{=4!^o!O?Qt5(l3RenYpAr6wfQE0b0%l)^DflIO@%?(BPbL*3!&uUl(`DmvL&t1 z1TBEzxO?C-9Dtlqfj62ycRZ5b_`z)@V*=s9g{MEcNY51v1Syl-QXM7P%1v8_@y%Fd zB^y@Tz@@poCZ6oHk1q$*38uv{p`E|IMLVZUoLipC@?3rYchD((+)|DnV*If|o2ng7L zYa8O~=D90;7u>xG!aNnh;NM?tI?l=$oq6$1N+I}9o6aHZKlr8rVm@}kAmME$uORj9 zf9;U@_A1*O=XNj&!H-%C4!irsu3kYx@?6?jWWSh zvpNqGBfXR85<2JNJL|NaaB-b+v9+a$jzdMg)Ux<4X4;Nrab3t_yPTzWG>fS($uk>U^Cn}P>JHm%n+FhaW$({cU<8uH z)?fDce>D6ZfPe9)e|%ea?|R>dKK7~4ed%laT#5X40`|qi|Lk`FHHeES#DU*J2!nrv z0J3Fw;3`$OBfciMXNsAkb%G_Kauv}brTXJcx;7XB85&^1lqQPtkzZF38^R%w0VaU; zhxZ`)oFQ9kf6E(6m^PYfya{b;b6eWlwzm5hIs~<~*8I2k;KL0!?G=acUfHz^mkgiu zst~|@cG3Y4&mFzMy{2!$_B(X3AD$k3bQVAx-hUog`~Ppi^3!m0;PU`;;(`Eh{&!3I z+1t|kBMh|vF2HL8yh(%L3~-FfDqG&lI{MHL2hj2OjBeQXB$s&X$p_E$#Z5W2v@*gf zj&X{sJUGM4RZMpeFPk0qyTqC>kBm2}5|dLd|F`VFJum#Q-yD5bC|=t=E;+tWQ-|Mgp6 zhgC}cBxs87hAAeN1>Qf%Loh0mx$`LB41zodDjH95E3Cix0B!EMJH%k2!aBs`Wy_H( zPd@O)NPLkct;Mdk*=48Q_S)luD!m#9`^K(8eb(Y|cEmC6rk*k~bhOgg8uKbCZM8|N zjaFW*iOK+xDQfMU5-2mREvNa0KHqZJDlWLAcZ6vy5561yN zDd6gJqCG+vIKIl{3!iqk)?7=?vCQIcUik9wU4Ebee9;zLZPrsxMaGm@eg&pfTw%F} zy&g!l*C7CwOGXT=q_G3P)(YeG*EiQb(BW&bA3X;oEL-mjSMaSsL6<*2n{JDNtiV1@ zqV((^1o;f*=5t`R%IGPrRX#q#EdSTSE8Z<^?z{(QVA*)U9jw$h5VXp=fuW`NU%>O{ zVH7u-EG8&>!6R9G`z3huu6)_z&E;oQJh`_gUzR^bRnG-^$w*{N$~>8td7=NiXszO>4O|n^20sQ#+VpXaP0>Offt{a^i_ogi5g@*@f_=>nvY-?`~h zY5n~dy=H9-&u>C{?eg0gEcz(KO+d|Qg0lAG`ZB1xJmB7}NKsYOZUV9-!^Uf3pJ^0% zl$t8yvuja{e>}WR8PF6ZUXP^l^pZ3Nbvjs+{*reT(lZ^W8w6tHw$%=|G+AD{RZHWB z;cwoS{eWaYh8(fwGk`+W%AKmnihj*o0=c+EKC6xwg7uls&dG6eQb*gY4ky@c0HilQ}HNGC$qkm5?t;EEtrt3(5mJ_@VQyOZqZy& z9(g+x*z4{VVtxl{*GNe-%HZF~Vkaloo3a8mZ43!$1I4(!beoOJefK_4O}!=*yZuce z!Aq|M)!)|4CJ|xw<(q%2GxDpio{kL;6^_ddE|uoU^DyLlBouf!3OzE4JPN9LR8;q9 zsNvD)k1>;%L@CeS2U82ZH4Z6pPp){qvY(oF-a*;#b9KxHiK~W*H5jZgSYvRD!3Kj7 zgDnO-4E7k@VLH@^1a);3O;=7>MI#&YksVbkwZu=mr7(4-Bc3rsn%O%rVR_fOPvx_q=R8W}_;{`AN7I6*T6$aeTXDfo==kx?}@wWRG1OaxrW#O$z!82)Md$ zyLAzTn$MOM>NFEQ3M~0@)Uc*K-ZgCUg`iD;X!k9Z1$tI3n;_CcmOLq64^rKk73MC; zc2E7ViNXAlOLpZPKrx|#TLXEb)d=G;bzNSSG)Y~_p_W~vT2dkSB2ds2-*hA0#Z~yp zwzie)I`eiB`>r*qNu^sjWYcVmTuoF<-5c$FcEOaEhNQgARMs=+wbZp`EgsD#*&EL` z&AZOfG=*6Y42DgLbn8S_UJ*;gWXmpV4ilag;>JO_CE9sf*r>6p-lJuaZ$~2;R}3)+^O}v z!Olx-tMjiBmOS4|aJ8fs-A6!uQ_n_^W{ix=O;)OfFH&o}q|+ZzwU+g$kL&ZFikSx! zbx0R>&dzq7_mw6eMMMwhqj}jN?9oKZo4n0rMHKn*V_j+T;Q_5%-PtN%jq37b$x|xs zMh&b{eRj;Y{ddyyKhTM()wFc0q23qN=EL*H^^)O$;4sX^iy&Nbz@S{Z2*z*APk1)r zQoacx6(_u;RBl4ar)NidSQCv!m|XLK%i>y#u=(CaqH?UM&L&*BZ?q6k>TSZ8-%kZO zwDq=>Iq(UEOPP!XP0=_^u&Ao525uuwgrJK+#yo-{h|MwvTV)Kl5q!js{1Le#kSBuq zm6ydq8H>X*7Dr_)j%9=r5hxYGGVpRZFXM1g#^JJz!Q(4Tz-(*Tua0WVy}20&=2ooJShkS6hY`P7 zOqS(vosTf~_uNyo-;%rcY|xy!*~V-v6F`W5o`!GE9lD%(1Yj=;JlUzWdSJpB8;d5g z{#zEFSK*OqaJhsqJ7Ou^qz#np;eDh-AuL&IcU9)Keg`3N&-ia^ES{NUuhLayR2o2# zM6$x8S)x|+W^m(XCn7G{m|Nr2nJLwYUtKyo-SCp6BtGLpuQs}qYY%X1V8lhfU9)I) zsg`!TmGSZEkvpTa7JfsXbF{}qPZqFt{U{S6C2LDT04N^uwnqaCAyDs8RiGV>3iWa= zv1CE0Gg<4ZSk|6Sl=c|+&UM&6UsLUBJ36YcL>$dHrd#Z!2Nd+9<}-P8vE zrI3AqOTORUre|WKYjlV#=4*fyI~*O4(%n;tGH|8$w(OuwBt7%HwkFku-bt^eoJJx? z`EA-5nnpZ2648wFOeKH}cj=ufceUUOHGH#QhcGB3xS-_$5z&pOg;!in1D_UA(=Bif z2tBG~ZIY@Y$~~!p!?X<_i4LGi#Fw`pk&K5z(yfxebeGNHLI9e#SA?k^%E$PUw8{3y z?CR$W&j>zh?+R{B)J~RC1D8gx6WJIx0DE&W#D(^{s9+0u&nCy#^_8K!HLa5b-%aRd zTM9zv`~2Z?o#Thn@erM|U8eCxwcgsvL?U3Xw-1}x5$yS}t~A!m7-P#u(?F`OA4*y$ z6_@=s)qR>6!c*fIK4B>WGW_qQz1%FrxxYhp9M11_qNRi8%}%pM+t7GKT-DOVY#3%r z9YqCbOy(f-s4>Y~b|O*-!wAZiB6_V6GB_4$8KWpyNHlK=2&2vkZZTiGtEG56E{zt- z!j*?wo7GTj z8TU-T?)pCC(oQB>hMyM8gw!R{<9~5M9K^uwLB`oXY#}VL#;N?pI|ZcjybF*4s13G0 zXrb3C@`J2hoE8@2o`=l;&SRyT*=R&a0>3Wm()838awp*3&LR{uL8=S zKx3Dxw1wG*W=DfQqa6^O3g~ZAHva5@C!l6?EbAAUhEJ_k+pFdK@oD3O` z4Dp$hjX)DNmj_(pJ!hc1$ojDZ&p=@nQX&AOOx&-KO0>K+iv*hYDf#;R4RJf8U!yrL z1~05%AfF!1L5HApDMu}E&o0$T11d2|XTxl2ZqD@R$5@ZYYGmzxv!|cF1AFEYvT7j` zpP3HlOIOA7@K(i^JGO!Q_5JNxNv>j~(@*_}; zN+^mE5&_7y8{CoDvWsyY9qLBe&cYnm;=q-I#x@qO5tr@NM<9tkoPJ?7Ql;;bj3<;* z(Wn_>j+z2#JXpc6F~?+*lrEyVXLOTH!Qh~A(0guMZ-a~$aCyeiVC8!F6T_3{6Tp!% zi5np`_(Rb~Z&?K#%G=lKCKQG~bx6Dt0tuHqu32BPr9dbj6%@rHf{^o|l$hwjn+#pr zmkH3~#prxvx8?DQl|L;NanaVTNaSNWTx-9m6e1<6Z-THhw2SkoQX!05)5msqk)G*;whAvV0(DJB*W&R^U%@gM|+ledD3CQ;A6lV|=Oy~37Qe7L340o%NIjSiy(`yNwKzr95r6+g@5sj2I`$(B@*ayYl-rZIpa z<&;`_9giHT|I{NGO}|Oq0P4{)yc zU{m*)#JH)Ks+=@y5*78f;1H_(WhKP4D9pvuP|-8}B--ZfW6KmTk?RHek+}8BC>@2r zE3tGDH5y)nYiubxzOdAv1f!dEsK-#?*`a<(te>HHDb5si_;R}7f*g|lqRu~7+f~|l zp-q0&p`5ctzN_$5bpo^I7j)uHr#1%Z+y-JtyFcGca^f%3`)m$TLzPI0e|+Cd3-Ojo z=?s>>;1NbuN9(Chb&l{P#l5=qBVc;S1ncdxry)aRHeyfRPq0Ja}4k0xBMp3lKHhb4c_r@ zq=($NI=?%+3P%VKfTf9yzQ>~ta@==`VkysTQo^_rj;QAKiG(FwVH3aVfSu9>taR6> z$;`wX3s>6>FJArGi6;epVOo2p%k%9_XA!O>X?;WCXa_*Z>W{%eVx^US9PD`02(ZS{ zQ;EN^4@vJLKDDc)z-RFgxB^m?d_8t{;27q(xqJ&Gv4vr4FhTTmgihm#W9L)b)txfL zLFD~PSqjKB1~~`vNTZM3OY1;tR2Zg-;1DIpsbS_;AreStD_di&dl(;wB!QH$NDQ-H z5E58xIDC*NBnTxr3ZdcsOkO|47H(bK8iflRYiQ*~rm?WUFjh;K5-x7Uqwg}$(1cJv zhtzwxGBWVpLSjf&#?mPEg0UI69|xcxu$K?cc(S?l{*WYI+Fta9FP0)Jt^yItioM+Z zXu4i!=1{?d@n7y&4%9rxax3)$OgXWj_~OAvhRJGn+Db4B05O#zPXTcZ-nkMZ^p^%B zClw_VPDQZy*h%rV$-kB6cS3&iWPLG5dDc^wO-tfuhG49?fGI4!KQpVu7VXz?@YS}+ z02nxLK8QT2SM~V_9_cKIg^%3cM>;qU)RfLyMQc41;nW?#GrAis6wqKqbQn+f#tlI% z-W%Kjbdz^m4)SrTK#TsKPnCE7oaPESh4;&K>`a+Cd`BHL_i(L^9{nEWB%!%fL}m@e z*wE5{i;!m#)^EJysu2}A2tNm%nXDH#J5ZUdUIUdrTP#-=P$~W3pInD#=qBJ8i;l_C ztO$O5tt<9^4=wl)G4YrN5gi5yze$HPxzhQo3z-JU%G!N5A`_R6s;p?qqt>Dr_A@0r z^z(x4zzMkEB9$}A2AFh&S{W7)3i6tsMX-VU9LiQm&ackEt0M@aa|*Mz9g=%~u^f1^ z`aWyU=^0x>R1wOPN6mxMA1yxf1pmO22QUzfS^x)G!cRvmFHpH$rOEhkk>}xsK^G); zYmX#7SA(EUQUJl(F_nzu#)va0Z#JD;SY&@yaoossCaP$Em6EpjfA>mGF!BTaKQ~}q zqQUz=+_AJ2aekuu{t)j#rn@!=P<`>G?N@6lTwYVywx- zvho72&O_!nAq`%3idF@bDAtv3qbeSZ8obq`o2AdCRLG#`@kcL@WjhbNl?Rc!M<03*q>t}7C&uho6rHcQulih9pjSC-?JIZH z@38B|U$N~31Bb>TvFoY=PQcWiKE?oDZXLL-_PeX{D8fu0t#`_<=|bfLzd zh1RS&aP{rbkUW*sm=&(K=Pq=A9JCEBx*b zwyO2%OJozr?Od99X{~)3$m#IhcKNJWpK;$$|^L&#XpP{( zA~u$nv%t)H9*Szdj~LcAh$3`WVX(WHpa57Z9aIK2{}X1Z{ddU57Tf-_7U~X^=YHC2 z`Csns3$Q4y8x;z!@{oN57W-~^?Z=8Uspdpfo26z$9l4OP`>d(@|5#jRS`N*hrr7Mj zJNLCrWzhSHtu${xF^`fyW|8X&JCq_$oW^bs6rL?(%Hj^h>pW=Fn1(a6VudbJa3gBh zAtz)XnW<0)GgN5gZ7qC@QPQLh&`0E|e8r}kdCXx}EkK-iM6u$Dl%*>cGTEqCBGn8; zFs!DxuGXA3@fDOGE@_Qkvx7LY}GkknT@8fQ-RQ5H>;lcZzGT3z{Ny=jUKC8a(3 zx_~a#crwreDzq$Ad?(>h8X{%wX-Vhr7T<_JmtNid87siFiNl`%}e+Tz79G29|tR&q5DbFAqb!X$y4pxV~F)yuc>WKKTEC^%A4 z?E4)51}`e{`sxDCQU3oMO&G-!X9(___uM_Gt=nyRr-gI(t$#BaZQo*fr*60Q;9c_` z!TlM;!MFd-9OW2GA4g+mU~q5a?*eZ;%dBvHk&AZVP}PjX{|<}r<6}911BG?~IXiY@ zC2QcL=`+#T7&`Y0S6}9{jz8{lzQCcQSoC=M*x3m&d?kJ-2B*Sc3Ngs}D>dNS_)YD} zQ?gSNl8Fh~#7Rf}3@SP&hvVo(Q}g3wY)+TV z4qyAJjYa5!_cqy2x3$_{>8*FWdg^Vjw6@t!_cXZ(dIxFjrI$#XbXJ*MXUp3(e}3MW z-YMf_xkFfd8-5t;9m;KI)K)qR>PLpg&N^0_9nOSCQeisjp#+C&i`C^SS&crq`_l_s zsXq&C$hh|t{MFHtzfL5Y4PqW!5;4`!$_WnC1)XIOYtVj;1DChhuC)ZP+S?K)r!)+C}4sGh-_HA$P@-FO;g~&ovQlqT5x=ihz2G76tf|9sie>{y>FG~5{1Ah0ZaG%k(S4f=XpGr>e1S2;~T^N6lenLXKL-1X1T6XYw{-j z94pUQu2QLDwPK^LqDWpWR)Dcd?k=vjSkwx$UM6w+0*u}cNrl$ykJ>?>+h{7Qt`~5K z5$(2>xsEQnTeI7Y;=Xtna(<_x;s3v|mH^~>3T+l&rYKkF8HJ6TUN;0cLxN-Arq?p# zE^gs(ndPE%=fpyVY^jz5CWE_RZuMI=Qya>{R#RunW+bn~=A=`}3uML9ud?4`Mpnxx zlm=P$hb`>3(`!!*HO5ZvZfWriYlHozHbJ}B#KW2KxyynD!F`a03SD=Z zd(^6wnWYg&rI=36Vzh~kO(EkFUo5y{eYm#s_14atgFUrlyPe6zFGhx5*6sHc@^u_i zM6w-JP^;GJRBkC?1m52F06sv$zbQ;m1D^g>vEe9+l;;G9fXcby!`Je+)F`IC*70K_ z9nwIT62G3R$9}_M7xTersXqszgSNDXh4jD+UM&#P0412CB^ZFiE0ImD(*|seG}-qF zRZQSzxMYnrC1qu`(WYoX^;6}ky>-pncIq1tBz~0t^I~?D#5QNasr~yGo}I0)7X4Sk z59DPM1fa8#VQk)0Q+A>g%&hkn{-Sp&&1sRj$CLHGLw4zvI+8cgR#?f@b#PadM2i-T z#p`J$fj;_eoqX!gZLE`V7G1j6!jC(B4L)1%e9TMI9)NX*0l z;=A4)<}KlDk@}kUBrA?~bWT5es4=ChrNSXe_(uTM4Mu`Y_59&eCl1XyI4JexQ=AOK z)lv*V1`?QQmUlipn!x3ffmvmIAg%#_jiWbA(ST^(LDcY{9M&Jbbz5lP%OSNNJ{7cD zOzQtR`M>7jHY`+dnSzi%OKq{izmQwUEvhH!e@5ujUIDTI8_YiY`j_UNZ5ZHV@_^Yr zt+74IeqT%j?!d@;2w;w?Uex_(A&7z!>(~ z(V4HP-iz*xDd6wNdKRJ$!}r!#O|-W=X^_;q`=R;l5B0X@h}+W?QEzV>pL3?&(;QZB zZDr$!r}nSzZLMG5vY?qZ#+RS9%HSq7&kLDF(c^dZ6;0N9e^#jV?_1tjmI*n;Su;*A zIO{z~u~s^jMc+lcyV=z5aj?0|k@&lK{3Rmu2m?}#>S;8Ol|BBxt$R%42=`%Q3;I`g zHhN;!LCkxmnN{-R&nu_Pb@>ND+v+9_%ysES{u58N;V1~^o`kz7InQxf50pSvqTHqd z^$OmVzvtfY%H(0K$ync_vv9q@!9E;%a)i=X(;T)3KrLTjw(_@`3yKwrkVdbmu2Y&U zcJA@p3P)iJf%#wq^8ul-Md7${yafZ;0MXYY$z)s^qE>3r)xpD~dmTP7p`-dcGlj*z zJ`qfdap@l|c<1k&$|H+h_Nv%{ul78J(c5tc9%XE~u?)_sukaipzR5XnV;|d zIGZX8Et<5L(|Ts5U-zGfA!{*p$&F=L()mS7pZlB}Zr&RKu4eDa24Z<2W$0bX`;M!} z_5ng*^#Lg2{KjWHKlvS5e?9Pr^!?JUG|`Ayn}O11yN{KsO* zc74&A0p{5OUY?7>;a2n;9+N_-W- zZN?X9?OB(tybHHFK=Zefukgr?aRyh%VDuuyGF;{&6y-IWn zzjl!j+r`=SMr$cpYf^Q3BDO_+KF^m9Evw1V9PV=$ELD*;I-A7t33PG0D>?PZ~6X)a-m^uTtpHvQo~v;x4Oitt=DO7H^MABJ>@Xp_N;^>~3d^ zMb{UIScdu>fn;Onl(st5tw3p37?R~gncWHkwMLJai9dvAukpqKLc@XLKGpmyv)*b# zVsTgx@~!kM#omnK#mZKzx$TwoFzU-S2JQ+A8ObG5HD)*diYKm@NPP*O(jt0>v?Ao; zaffi(`|8IK@Su{LG?2lU`bwp1U$QU=lo-W_Ai7aEv&VHQL-}yjZ2fagO*s1Jg>Rx*-0wIKg2lJA3v^sJ?alcfB<>HK7x{WL3AtUA zJ?q1UA}Qzd2ZJ`ZSXugrNukKed2$McnRot<4BmM)cZi@bJp4fDI~kd5C6nb8vW%ks z;q!i*-vCM8e41Yi>SZsp$ZryH8x|gxVT(AS$n#aTSlqGu|FqP2khtet=p4fvp z-q3pCKRMGvUA|xd<_>pWgWp`y1Jik8=E}R}lmj(~<2pwl5X`iAZ34td>OIybM+ zVV&#uJ82l|@$AOfIxpPs_Cy9+QV{ZZ;7!@WW<0_oupZ=?i-g=Pf+Zk#Q+Xm|wN2h% z9I+41b%y2lA8vT+({WSwx=6R13KpE<@#?wuagBvv=Q40%k2B!AmvKh;y$6X!V3Wv+ zcT4)atlg7;jm=GD8;Ouc?7cI36Ur*LW$qwW)go~@GXlDQ&TeHoR8(Vbo;i!XG#5Fy zp7XSjd}Fiuz1n#qPcj~*6~k^5I|!LxlTRZE6;VGq-*r7)&UZ}rmYTOi9|*q^ra5M|l}q94#nZ~gx(bn$bLG>SahuSC#2pHWz_t!6kpVJx z%{_c&-4sXOS+v7~`wKU89u80J^g>dKQAAGdY200$-AvjtcAjrjNHM#feLcfH{P9nF zk3ISF-`NPuD9o+(LK=!5#CE=p`{sny@Ne=(IjGM@aOE$!1yZRf+&{S2`k~oxw0-{i%au^VX54+;i(5m@qhmiwb|0-pv5V7j zU*dWOTb91A^KJbi)D^a6oXQNI(<;;Ek;Y+`~gZmRVb7MAiT)!?u{lOo) z55E747@uy*ygWu$z5kFsbDbG>y-JDNif25L(6b|m27v3iIU|>>x;mmrfvP7(ON2i74eO=w=_J4XO|z8nPpF$rDDdqM~`$Uw5cP!N0|i z0HZ1@&F{ZWCBn)4XM}@og|{xV^%1b_lz#uxzuUkqZmw{A&|lPNnc8UA^b~tFeGOjg zv;{>k(MqVlQ%NgwNtevg8Q6le1Sq6(z!s=e7JZR@i97>fu_T62H zR~_rFZHP1)B!nXXuI%c&HA0~$|xJZ+vh)!fno(l9iY+KnNrEZ@1Us=9h> z6|gGHwi?g2FSN5kbyHGjw8tT{kSp;^uM5dcn&($(2Nu&%+MqVaLjzj=~w*F)ll3yA02zg6s>ye1Z{dak!e>CESN{6^P zaQJO%?m}Spvfsg@6N@LXqo>cr&x-Z4e(=~Oo7KQ~k^F8Ji)Y@T+v~N`AhF+L5B79n zfaZ=ii-uY)mRWAB)q2`qQ@?JP{lLjr0@gVn!c!effj$+y8@>^?5z)VfQb4;bp4X8! zu2G#-+NU17T_$xnr82uiCVTp-1-9N}FfTC~7n$^jbm_AXB!!5->mKR0NVcf+t`Bt9 zt<)BsU{DXDD@$V*r7;vV=#%sMtM+b=cgqf7PyOw$zO1(vl71wTB@bM?gGQCitP-+- zCP<0dr4oq(VWCvzm9ugOu-M#FfMAIc_l=p90VQ%{P2$`d&6_2lI90o+1>xN)&=Ss~dYf5hWE)p}s-org`|-U_1# zlY}*@DMa??SWVqZ)VuIF0Y4;@@k2g=SiHTX<$s8Zc|3{FW)pjOe394Ye)tr-cwz!P zYdw30by}>KHRFT0nMVNB^XNp4DcA}r3q$(v$N^9b#^E@G&*W) zDwi#*uUxv+CgEk)XI4V{giq~3RaM)2l4U`@GO?vc@Yv#0SEPQEuLvD4TR%}I)6$mo zK3Z_-N^_J?T|pl`GXKgql`5Sb`eSzg$~%|*mPT9fKsnVjHtrtwHeTz>wZ9gc;Whiz z!Vs4~K6YK|;1<65#@)+>@}Fd8YjZt2io~X2ACMOlSBf(u(|nuz2W+8|=`Ity!2I{A zla#@3sMV?vKD3kKb=buc`uR1#&ZK&iLO)@=9?VpC@lB{Bo0&~QeUBV|sj z|E^2C$YuxKzl1W*o%PnbL{@NOGFKG@Q#`s7M zX@liqLQU!c70fCfsnt%nNHh9UiIAyEsXCi)sXHHBw?(pLu=8YM{xoQ6KKU2DFKG0( zV5o`YrF2@qAy%sL%y^e*eCtmxmio<6PV_XiY+hubMfZ6o-`?W4*Fgte_ThN3vO8%8 zD-729?CoNNi*(6@#6q!2L1YJ65L>!(F1y{{NS8hN5Roe9AOK#Tvl)z%B-w1 zpkKDLcHmop7xs0g=P3rW35~B_*}MnwwHxqXR+N=h`D0n7UE<|{jiE2Dv_q<-An2*W zOFQ`5%C>0mS}ZkDo~1l^hzx#37=cI;rI}0#hnyvr6 zX>;GLgj8I6!e$24Md4WVeU)bq*0rrzzh~->O*j~F_x!`N*TlLq=5^6a4%Rn29`_6) z`qsjs9_Uyi9s_efhbQJ(Z#?d^+2s2fq%>la#p3~3si7X-ws3x6zF0`ywc<#Mzp#)T z&BK-?Qn;KVMF3G^I}}`bBn!&n@OS!;6~Xd*^MSk~40;zD-SmCjOC-XE!mV@^>f0%W zy_zbNo~jz1pKdpw^;2rK(SEbw@@)RJp%29@EjV{uBY((=x8IzWS4=3}Qg9e5$}BJ3 z`P{w7VDQJ6vY&|wlLR#@zbvl$lK{P{6SPGxl&6+8Ez?CVR8?XMdS@Bh!WX>F%j$1F zZ^?x=1F8Uh&u@{oGe+q@?_jW2?qqPF>^_Y)I6B!EdH?aEpB0K4H{WH0eyQy+iqq``mo z%8kpjflqMQ?*Z7YcJc_EI64g0z^ELDze+g=AtR#%ct++ELKfj89PVR$&H>mLY&1Wy zqGXT5Dv>y>BGER>fA>ZNQ1-4w9`Yp2Dr1)_+5W<9x*m9WY<%`e4XTJ*be zsMTbGS`s*16BI0;E!oy`T&hE%n2}4vb%8SGB%naM&@`5MtYwMDXpKwm5KGR9>dG)*3+ z>J#YwZ8@q9JvGu*I$#U2%sKvv3Z7J{2SV@e#_FZRS9sAw`kaXWVf*$yG_Jp3^<1-R-3}=9k1Dw1F*kKx8L9Kz(7_D*!Uin2C-Z?v z%IeU!o}^#$l9PosY_4(2sjypRZSP9~$BeG}quxnZnSJw9xpUtYG5()I%_D6E4hU&;rPz4-#my^X)$?dKbNDX53e?5@)va#H#oFzlespW z2Vvsj=dSI?c)P2wj5K%XYJbH>OD#Eb=*bg7_p86Bjd#P=RpR!H*1EmBJ;=UG#$-5x zG&=9ydXVq#wcNXsXqM5k^`|1+2I)tm=6-944Wj&~DtQW(Rlp(~!~a zdetj^FWF8aFQ;la@JIA8lNY?zKZBwN%28&c{$hK9mz$I`W9^&MR{R9YK!t5zk$5t^ zJtq!E=pvPcVedS$$q_hq;YRfC zFC`oQZ?OO_0K|v4Ion(+iEs^<{yG~1@iR+{cuqH0AhC+*SSK0{=^An7=2x&pcrNOz zelua_{4bR9Jf%kIH{kE$?FfJRr(<_ud-hZ>W{|8QuTjYJ6c>pkPYQ5O6#C1qZU?}4 zo6QD`Xm4U@|Llenf!cMjV%J<~AmK~S*;UWnM~rq<9a%}#xcqu^G-ylD6-ZQ6^s6fp zg|Z^5PIEvrD3~Q#_aOx%MFY(%Vf*uQxZ+g|);nDOR}a{RSh3CGw<_%MLKlaj^niMe zQzfKM5ANYpWmHOj9%;$@o=}R+KgOajpwcY+d6U=HabI%I?t12aQnYLOkyS*s%c}uP z0=8dsg#tMh_3DbIe3>?1o3j=+01xcyjIE_7qiLJ04^7g&I-Pi^Eoq!1nmYb4$62QY zDm^>uW;<`2+vo6loiq&f`+tpDextmxva+H%5-x87$^LB^;Rv`rSbQITBerf`?#CV4 zmz-3|!eu?ZTg`%LY;Lis)>zD@Oez<--XC^ zW#)4o^U^l&nOQdTO5K(8^2`6FpGB?^#DtNgOW)CAvde9B(te*q==-XNc)2lPEuGO` zgH!6SY;-UOj^gI1_CveY47F9hc67}w&h-Is!4XuOWSS+9rHCj+HAbtdp;lx5S6*5i z)KrT}7d}3r39FJ~?RWn~HrkgPcbm^^_`oQ!h;5&C-`?c)e*C3h*Tfy`)-@Ons$^2F z*OW`;38l_eUR-Ds7^dswvT&(Lt%z_%ZjnqK3*<&4N|jl}FBMA+UORKu`VN~hppt5= zdX2f%#^E*Ob*&j{s62gi$*jWLvo*tOQ8Su0!=Xym>hD_>dTx!Y8pIl)HnjDDin`|* z^{~y!to!RGs#(hq7xQVv9L>{tFie zVeE8adicR+p}+j-Bit$-ccWq3=0HAkwFRpJq>np2KP!y7aId5M?c0!Bd!EDy>eTk` zd$^R~b5Z;)-vP5|nk*dWn*p5>nRWt!`UHV>?T0BoPq@h(*|CmA(v%hXj{rFI6GifCxu4LprS!v^4;T}6u(#C60 z`0sK;CiZwW9=!>JdFt87+k={RvSMgI8q8(kvdG<$tzt7JhIP1 zaO_6#&c?=w4Kv8Vh19b7U|_GvJtcQ~#R)eOyS`dl7ALoZc`zkcaR`o^?0_D2kn7;X z;bNeA95T3_+)p{-f%uvuuZhkJ*2l!>lF~gj6;*gxwn64LA3EEjxak%jU&V-D064H8 z)a)lb;|*8|@`5xBKM2CKpfyqZGR(2`Ua;t;p$C+`?jZ%65vixxA<==+#?kn|(bYq4 zU1mejb083Q$!BEZL(?$l_;FD7-y$iDF0xIMBjOAttLXk@Z~PW>qb{>fbOErBbjnlK z$zJq`Ws(&OHj;(a-5l+aI!@*_Fy?*EHY5ONreWTPmSJHxVhd`qDg zWAzx=l15JD>s@iejf5FvbgmJme(~d7&eSZmez_S_0774)fI6l5DJe zKigqpV|oj9p)GVy=V}(Gydmcy)tP7uprxH>wk>JQM81nLCG+q|AH+F0BosRkN=09j zpTX8z(LY=x(u+?AV+_GG%-fH{!YdGG6pkawy9(7qyEp-HTAOp>;xi~ZeK*JyO?YJK znuQu9@i}2$;pTsdukrCtYzPwG8a$%Qc<+IP=fWApD_7_?114wU&{;~WxN{YGoFp9d zka}NZw&##qQnpl$ghwbE{ppcWR)o$A`#oprDp`+U;-unaY zmZ`}nUg8b-pHgQ%M3c92AV_VLzcz?ZFr45tT=MQok#(+o8!zA6z!a?-OnD)Rf^C!* zzMA{ONnlD~pnoTQ^_Qo?$q0|j^inE_#BcwBq3Eh*usng3YSy8O{UBpqb&K1Um0=fX zw+*wjitSp4g$<1@I7)yRQNbDTDT7dXPg#*;epknP2`&UaayEKBT9RxRV7?0p;pix` z%YG@>5|Rh(dHhL&=eRzw{7M}`w)0cV;W7%ElQS?MQaNdt7Q(GpJ5}Pcv{@VkE(^4@ zcJZVnH3i~9931jw?8rIQ$p&j!r{I!Ik_(saMgRH=3LO0NfEG+tFNJa;feN|PepRXX z2m~V~&4L;Gj-5br`ZY0T-?0^iYlU~>>_#!i;)}Q!45K-z+AHKqMI~`PyQX;Zf6+}V zypOG5R+3=%pj1mJaaR{G&@yQIK@e6XwDKn>w!y(b6H@3c%Yt*$3O%ufBjlhmmS{9z zT5|s$ghl4=Ph*OArIm4?$`e&^QjyMOseB;6BoonD$d;g-K~h%T4Ywut>Q}JH_M^aL zM;(aK9ew@6?VaCbXQvAfhq|*#H^WbN*44bX5ejgcGIe_ojsnw4(f+5O@V(f}2m-{QA;oIK~ci7wMaAH?gK`d%azpKdAtB zROtjNYwG*~M%(6VuYN{?XR2E_(MxsqYRH9q74o36ru37-E8AACncmVJ(EYUFU>P9l zM01hdmAbCI`X|P99hk}jqV5y2poxZNV3jGeBcB1$b)~eL*EPZd$YMlY0DLTv*eeT& zI*A#p{+nO`r9|~Dsmoxr+DPgdES0DfAma)VZL5o(R{t~uMV;6xvSsarGFp1bovp3X zk_KC-ptjgrn-sAg7$KUFu@T#NhGDFH*hT-1P@ULXn-sHHE3@F7IiJi(Q|i)4Oa%pD zJ*o9`aGWg%o6F9Kv9+L5r4*@*79ob=8jkLMzH?Lrn%U3;%BC|T+O`?Z4NBKln4Jiu z?0^al=6VHHBT!@blW@5Nu8ma6V68f?P&iMy!ZSi*L)^4#F*e@z<>^#TO&bqu;SROM zR#BSQ#<_^~l>3aHuHtf%s$UT*cQj$L=51f9YZz6}`$P0BM7oL#vE^42#^7yVm+AlK zod{GKO=XQ#01|7fnzjOUlBFCs%#GM0vSOUJ>E+0$EUpyQjnw@0Usu)DC~f zy-S8cZ25zhX3@1-6jDS+u%u)4^Ir7pH7%kMU}2Vv`uGt8G}Y5+ySD4Vl<0gpAsufOLf#wm`xq&`UTB zcCVU)I0Zlus0pC)9Eof|?Lo1tPU@pv#7SiYiA@7QTMxm@-Y|1>xbn&zV71g+qo})E z62e4*yL2|zoXa-uRLZj6;Ax($NouG?c?Roa5I%oyT)d9cq&zOdh>!1wB$D(Al}Pg* z3%|tK(P6QPV$57~QUJD36KKfQ=ZcQr8JP+b; zpUvt7icAwh!w%B7m@nZuCpY@ljj*|J$R)!WTeZjYT#CvMd!o1i_+^3eK$;p?2Nu;8 zlLSBm;i`R1scSe#=N$^6@VjL)5N@0QmhYv^luXAW#aSy6rUGKT$g2d^W_-+~MLZ$J zFB{<|>Wmt3g%{tVAkwrj^hp#vg_jV*#s5 z%Gi5i&STNxWr~sESrS)2H>AE&;A$km+*~#hDYkeV(n1&oMD0R#q1bt2YXe;Hu}o$< zPeh8W=}3sQ`(#bWlQXcZm9y5V=4O@(H0&M?tN@rnqwApPR9&CI@1>?Li3fM;Fb&rq zB7Y0XO1Lx$L~YwCwe&lwkrG?Da%X{VJ|aywtJRUv!X$(6go+VJ zDD{F7hTx~!gFY?5Gm!GeuJGU<>eOIdQ@J46S=z5>2(6d*318-4iA{G=0DwIcX1XGS zwx;Z|{rEE}rXoB1uSIS)1R=p;*I2;g29N&(KoTB9p4vnYT_2fGv)%&C@gek9`Pbhb zR}ZzFn<@&)dJ?qEQ8CoU>KJPfsfiImg3@E46>I>sAyQD*rx$|DOZ~;bMqhCncx!~S zW|t>%D)>B9ko{y#ZKXLx*A5a}4-nwRL`xZEQt7{Fajcn(luur5D-0d5xDOt^C4?(> zo>jgzI#-b`7+xtZB3NXn!C~P`PeKGXEc1SxG=;LKSg5x-G*d(OF08MBwdG_(VyfY*=9mo7EwpnDC!J;sepXu$!7{SUV0lt8uRbqR<$WIZHL7c>nmh zS)HH>W?_mcR8vW{Oc-+VER)QSd>mKPmN`cm+Q>v*jrbm}ih71pR{;W`UQaUBy`BN?bP!3@YgyXua+F)QH*0DNv4H9^ z5YAsTv%_>Rv`1~h6ihwrD@gWoLm}8NAzi%Ywi*5pmm;F!ZNvqD5x%A_vh4VKtuq^% z`{HRDHC4;yr-)!gX{gTjr^ZwDvdAT01koDRn?7z31AhU4Ekux%i=>&T{1O^r(0W3) zV4rk)d6nANQrrCtg>0SWD8W@AsNwfR;4WYQwBiPaQS57 z<-$UEvjvAET#Zyaz+`$%gZ7+0xT66eo>;O1k|)9{=|(eDkjXd=CMpoW zI|@4y)^GmyS)2Nr03_HCKqGR*;T4RLDjBW-;$akaX#%-AchIUdkC-5Ydjs}pAY+~O zNBa2+B=EW`A@ECKCSe|~MexmeClFh?)yj7jlH*CZL}Aq>M(H?dzLdmf3CWfcaIT&RR_CX0M@;E=&iAW%Gp(0^ zboczAqlK%7;w?nh&mvIxg&ReT>T0xI0=FY{RS*YuhqGneSx}B^YKUss)MYvL=q(K* znt-64((W1S=C5wigzFmvD-Fj^d@#3r#Jw*`E=If+S_9!{-HB+vHhDiJ2nV@UM-sqy z-6ETGYGI&0)tY6d)I@{ZPHW2`6hJ*?jiA;k^|2-qqJhWmugwfQ!6QpYQ-%Q&aqY_> zGU4-@+8WZ*_!~t;Vx*cXE|hEcU35&wKp0%*u}xkJX((xGM$dn=d2#FAam}QQoRKt! zFVYyw@REHrrnf|u7y=Q`RMY}rQU1JcrY94=akG5qAAV8fo(?G{ZRFh8r*={Viz#3;8}iy8;d z&$86YltRXnfQle7f%~p4Q8Z1r=y?)Kbq700{qLM#=4u4*UtkDa5q>Srmw5tzkDk%p zB=B2M0#4MI$5V5Fh08L(6stkS4gdMx#17vJeG%y!3ITe{4rO>W=zth4wj_h zcwRtzb`X4igf2nakPd9-#)>d%IeVPYXK*ddmmue}om=>V#!< zy^a?H?d1#CIh2s(r|897n8(2i;z*I`UCSa)@Qhn~;--@VBpl%xb9%f^m{HovmVySA zKf`#bfHde*1Ee3v0caxjGJ~Nht;fhXr1%tlgH;74ct}_pHmDU%=m{{vxWi7Mmv*F) zRY;o5C?&wKu8VYkF(1NR7#CgkpZfOrPByc*nS%x}nM_Hpz zkq{l?1Ae))4&+#Z|m7)Q@oA;NH%at(?tAZ9>@%&b8qa>?hu z=}?aI=5fm6O@(Sq_8F=aw{U0{wM5>#)?Wzt+5sKtUS=}aWY~r@ji9H|GigPDH~_qu zlk9QarD&}@(J-JEcIuXHZ-c+Z5&h$5iAT|~y5|uHgL`i&Y`2oH4c=MuWiYi1_oUw>aO1Xb-8<6PmwjKk12h2p^RXq#an98H|lq*C4|p zc0JQUrsjDh*YJptUw@+rAOTK7I^DP~du<}D{80!v5Eg`NBXHsof=(K{lepBRk5wF+ zJtQ&&87lpeI7`IBMCfv-1)*Y?ZmN5CaRorDXD=l zOrg}$gx&iNpyZg1WUd2UIUrWl2akKNjtrJ=74Wo5Q*?C&==tmI<>~R^emNlm(+Og` z*YQh@9OmwDaj{xYg==*@%+z7lmqp=fzy%ke|K_Mfv5i8WA+#Q9kFgrCJ*nB?_Z$>P zZ4)@^Y>fQ&sP`e00)H_SG?(q7PPNM5bjl^#3P8G;2|#Z1bW<6rw{tRQR%^a4$a&A7 zYk;&XN36*=b6>S?y9#_2cKq`+zW~to`UI&t3;oB=Oe#XJ)v4FrZq? ze4nxLe6Z1Y>W=QV+3EJ1uLYdhjUdZ!uVjX_+d1E@`Y8U>)sVo%o^F7MzkAvoyYi4{ z+i~fHYckkuZ4top&IP+SkMc=4ANub0f2dOV3!=Vte>rzEPu6cz@sSltDKz!ym?1~0 zUdBjG%cExP#V$J=tzN$B2|qt>*V8!k>RCUtbC4D$PkjP$j-r&N4bOWsu7PVGPPAyA zs|*a#4mHhX-Ixqa&K;3+x*`&|HA%{spt3jX(4xKf9*mad%yzSG8v@qHcY^>%jIrkf z&j&90|1`MCcQLUZ%;Xf-&bqul3zgGxUn6-ua+}&0>pc2Et&}(pP-oNf4ye=43O%D{ zaQJ#P=?kDoE1m+06XA!RNjCfGpckV^+E|ESg+xdgG(89Zk2ba!yD&q!iVG@Ow}i@A zSXt~zTXc{(WEk%_=KiTZ{;wzq<72=*FXHJ2UpwKOtsSMM$uE={wh|7lfMDaH{a=rz zQ$1hY{S>12`7Xd~jf(eGTG();XUHQ+fDpSkwSF)ju+a<-X z$GHBnlAh;Fl(3dtVo7Vgv}UdQr9k@q+2S!X{ryCEg{U)GUOsQa&fY8HBPbVrq9RAh z6N=PX+Og0?*X)q%R^*|6ki{jsjZo^M-K*))%jyP$ioA1zKvXo zbTR{E*?WzN$ixnF%xaZaIonp@Q@dJXOb38*FpwCVN|(&Pid#dbFw0k=5-;<$?<9Lb&Wi{XsYIN1V-;`kj`9fg)!FjNc7 zEcN=F3SYS}(y(xT`DsunsELH7Y@_>t>eN-~1UjDs~T z>x}-X9dS^2mWGNvujx_o_-9NS^bjPw0ooV&@wqBu3zV}d6b7HS9TpO zdy1EBpLJLdn>Vi9wpz1{_9Sxv!z_h(Ib)7B3&5 zO5a58aU1kZD{ec;GEfD;=xG86COoY2yE#ln)^~NRoy%IT8v`v7`Tm$WFMCFFfHXLe?wj7|gu^YvuX?K72n1yOESb2Vn2h5;4b_h8@@)SL!y&&^Zaf^|pd?W{#g4 zew&_VWNPaA$l};LAmAhw7X98BVdSO;dq^c+z6&&7yL4&B+ofR@c)utNa{Hkbn8{Wb ziuhb^yMt1n#zI{hKA_{C>=}y}Oj`+VZpRu~QToItn~F!m-NaBk6RcV>}wi)P!>50Z^9iPyJd zs&|4S`+{s`D3e9pX=VzRMI?u7bE=;{h;}7eDUIo^xtvlB9rXklmq>4P5#px{QlPjJ zgNPvN7HwTAKnL}hqkN7s6|#v5&pBO(t*p>SzeXZ*{H%b48|+x)eK6}N$$9t9L@w(Y z_mrnd7k`9xW|-NC23pOMra!Fff@ORc6`yXe*4aw)gIjFhoKvaw(W?tRMLz-!-QXh% zRg)1}om0)knh_vI?>ASw@KP7ZBy-iYYj*ug=+K463*ZL(|ym`R>Hfh z%egM%U8N9ubR;VLz8H}U=N5%duixrybG-g`eeK-lQ~z=4Q@hGVS)ZvlvvH_$?{ZdW zUeG=KtN9YMYJ?>eih06#D7>3zA1r>umOx5MfJXU#Vx3lT zpG4bXHp6Xn*#WG_)@;QI7i&ZG@!{r62-t+z9KTW&JX`3VJDQacM)nu2i+nLfl z-*4w|XI1?kjvOGofbs>Q)Wk=l2p#3SGBYXD&k4NZa2pJ$cSZlK<3*HoTQQcoY9FY<};Lvb{@ z^?Vk@8Y$<@zKD-5{@U5L|MQpG5C6Njw~M{CH?xT^G+vp1g+i4NOma&eSMvCHCK8+s zVlFoRySNJo!LU>tDIj~rhCj&R8t}V}7&$VmL?l@Qc9|!H%;K)lhLfWH6Gff220!%m$&USaN2twd=2{?P?1_5;&S5=KqqrB%L$rDfWe!WNM^Jrc+L&l zYfEIIbk?l=W8Jg~;LYsSEMCJ^6Vt{jLD8P`T2oI-I185$%OKu!BYlIbCZ@VTVP|kO zKR=!hIqxI|NaOd<4n_8yd`ivOan?;fuQa*sLTbsGh-;vLvp9yVj!cRT*30|#ay|_` zpf&n)#2%bWc(osbMCEUf_m2IqENb01*<}k{dM?d^627)4jXwjuQzo4e14c z)THbtk$v4tpCUMPSpaK2l&Y1Z_46^ATKIk<9yj*f^vY*jEAD)jwDKu}j!twszCM#V z=Gm16ibc?>9!ViydgtF`t}Mhpz67JjAP4`&M{B&HMl&xN*+Z>}d=`zE{8USHTq%@> zs$n^rBE?kBUJ&hC7Bj)+0c~1~N?|6U1d{Z&VQhoCSi~|^m+BqrpsrR&5~()EgHD|-sWvYs*8LW=phWik%|oWQ?r9XY>I9;})RXR;k`-@Gi|eR&q&y@eoA-S*sX>MD-WZfN3?{yx}@*v~0tjg^K`D5G2&&<%A&60O((s>h?T zSOUzr*W-i$ulR9egEqE>$J}ms%u72d_K3E5I2KX4WGge!)b(O_BYWGI}}Z8 z%@}LL+fA%(eZX2@ug~v4_wTot>jk7?jzv)LWdDcg%zvA64l6V7PlJa#9QzV#e9iZb zduB`&+FaU^#H{Aon2zMf`nsDZ?r6;S+uK;uJu~)y6S~jVPX*0>_v>+r@ceIj+^i;J z+tg04&t!r5U5^%A_P3RfQE+u_8_+wR>{B|UIWc8eA9u+D>_gd;rTxk(AD>w zLu{i~ATGbQi`j5snfm$jLt2p)wcrC)1};-=2eXDgROXqZ7 zMctTGhc=H|u05RX&A8`eMAcJYA@h>vV_q1G&SjVdcAVUsZ8&FpLqXSUZ{36e*+mfE z?&tznMTO8Mv+g$et~p@=xzCn)i76thGYVdp&p+!W`p&m&OFMmizP;YBIFZ64p`n?+ z(Rms>@8(f+kG<9FmWDwdeg}|Ec|;ku@v#y??6CQ9aEtZH>Em6VEPnKCPQZTq{P{-Y z7H+$JIwVhSX(H%}HykKv%S6>$!T@@V8XKZ5cyFC^-Ox3EPuBdWFM`9|{&avhu_-_r zX+A&VNkFJ)+k5PCDEQIq%fg+a>T-|S8j=huISxFWI7>zfjd=e+Ucx>a-_L>1{pekf zL#Bbo#~*ZHRh!SoMz^xHMzzbTjOP7Ng`6zKHEi03?SvtPr_rxvRYGG^ej3|YJH+?; zmWPXJ5&^Bwv@x zYMNuF4rKNo#*9};jc&!~Xwe2oLmyfOk0Y2V-k^8Wz@zM8b}~VX4N8NFKLm7bbR;Cx zS8xqxrrBRsToBAn=T>l94b@N5x_xTNOj9!txFcX^MYknyrf?8&(mQMNl!y_1_qM^( zz47r7CdbhrnmAR#u$|}Tlq*v`MhuQ4Fc0>QuxrU5uJg(nDnxKYzZh{D z7oBTojBHMs<0fRZ= zsf#?2QHWFZ*&d2vh~YDf!Nc&PLni{5&VPmqkSiX}3t6uVkUKf#6vaO2C0Fj=?~3%v z-b=|A3#m;*ewPvD_886yT>S!wp(lOz0`DlPp>Te@vn~#Wz}sNh->AZFWeB`tMpX6n z;44?Ga6%3_o#Jejy;sh8>QL8je&UCXUgmByqgfL@)&MHoi=XQGy#Mr}a_PAV8>I+2tE0we1 z<+IHrW={n9+z`w-ydn|gz`IIvNGJ;Kv+|ikUoder?<3T z{9BnV-R=1wSnK%Yo0kYq3>+W;0l()~X#2~gd~!#FrkUr=8O1HP)cs;2b0LH@!;3Iy9JIuZn1#J_>RzGo1ocSZJ4fnTs9Qumdp^@qIf2U3b-Dte zs)~9&s1``IFg~rLzM;o=S!o9K9nL}mi#pe32CqMqtiQOhF4@J*Fh!MfeO1c+@j14m zq8-2t52(}QkBmz>Tyx`U4p|6LQ%0sUGv(`O;>omNvc=3QU{(oL!^qNebsKY=`J2t8 zRMNb$OCn*Rz}$i}5ZD>XM4_TvN3jxU-`^*Q97mq*VcukMvxubF@~P)hs~KmyabP|sgO_ouSi^DCT`AH;Z<{F5ylU~FQGynY7Yp6Y_o8zv*NgG5 z!IxG(P5PR2wdU7-BW~j^&QD%^=UemJhgQWVF8$3nOcV2TqoIqp;A6y1Ie+CMJzAgi zaW1aKuab$IIXR5fy;N>u=8ic6vImWw!@`H+DSJ47WYbv<2XRZZsKt-lGC3?_l5%JU zn}x96M|%0|*IIWXSQoU1tl`6yR@S18Yr%e0o6cnim!0pJKg+fc^K{j|t!o};eYpd_ z%+1tVv2ijp%UN4NXc2Q~axsy@MO>|9;S=pRu*=FaHZWYw!WrXYe@PWQY^2J7y|+kn zhPR(V5}tk_O2lVRjOiQ)3y=|kJ+Xw4g6}j(oh4344nJxrDy0&}KuC?yDpJ^m~Pe6C$E z5OA&|Kmfd?!$?G?%Al%{g{2o|Ly?JWrOb2Lk*!$vT=qx~tWGjV*j71`$2CNbBEK3r z+Ws%csMrBqBLue|C{GUwAv7djwq_|acx#htyVce zTwFJ>S&Ql8U5I0WnJn95RV}`^vRG4C@1Gowlva0bB3rC;M_Jy}nUpLgw-fugme*=~ z2li?3k_n`j@l__k{!eMMT52_j`7#uhGU&v4Z^x24l+tX7iN^D~cU~|lSw&9OGRtFa z?K?0-VW7Doz(S-(9Rr^9#5Xm7$L4XlehJ63;1_voti%N^LMh(yT=&;|TI9dz(uhPs zi%PEc%Zk&+a0;RLM%dJ#>KQU{v@uHzu|Css1gVCf3$6RrJIEr1f8XLN{)IcoeeBaY zzQ#SD5$+JN;*HAUge&G;AbjEdE#9%G+5p%rseTgJGzsj6mzt4k@a@^NzrI6D;`dv7 zg6_DDk_y)0vqO6q}B!dXzlRn30%|H7U9%hd<=V6jEj5~JK-@- z*lfz9!rMh*i^*oY%n?M3h=n`hbQ_AU0?6%H18V765ekOWJk zzyjwyi3VF8@KcXps@3|}C3W%@s8Z;PBA2zhuESN=yi@F^8#>h+=BpL%xaGDIAAGV< zsehCiuG|RQjWpUQzbE(2-#RCl=)DS)O)|waQysO#bd_e9>7&n%$AJvwLKgBMANlRs5(Zw{R*y7R_uR$ZQGb~xyP+@7pbdt>Q%4^UUmSvYy z?t^(QsIVfruEQ$npGqsMyy1;#WTP7G1oUJ38t;v_O|YklRWu108a7SXbYU~am<N~d!B<+HuYoA-1oGVt!i~^TKia`qc*hh;bmV3?Wnq)?P_;>+S|VNcc6pS zR9jv3HPl#B&9!LK?64!wL+mi#1+$zr-$57S=hVp#b+{t{HvE{vk}mge?Omy(tG;xt z>)oicu5Na#+uiAI_qyMM9sgMiYj}!j}lt-hw8*Er_ zJ33JjGwYrFSNV&N(j>crAbNodcEF;G3^e4Nmj^PmU$;jpYjs4}YdYS)tlE4zv*Ot_ zZN$+{bm9zO!GCrq9lVpB>{4SvU5J|MV(AxW*yVvlC*Bh)#Lv3!b7ZDQzdt=|`cLsH zIWW_@9*{7y7lT2R?LpRlim>U%vI5P|FjRtx!jkmHA<-Yb@Y$oIekN}m_nDzUdrt=r zP|oCaIk{e7#Ijpw1^IKI85OC@X$QP^AYTkdd^rQz?qX7vRLi7A(FAHuhsI!bcJA-3 zZRK}W}Ybv>=e z>}Z#Ub_A{v#)OkMRg?Xi=2!Q8xpA((dLNk3iAYFAvMgtGBdW-VnfvFnw$ID-a)nD& zZtZ}}?{dq#>RC#jm6uPxiXjyUFo(r8|n-z#!a+!B95E@9j|4{%ts zu(GjpP(}faOw25-Z0sD{`2%O(C2J^t5-C5DM*_6Htqum%oklp+rhb2{3s&FMQ@|lc zO=hl2my&g;`M{yH%F^qr>s`<^(2~(D-Ri}b^sege^jb4hU!BZYMQB7bQe+@ES);+t zI2GPO7XpGPNX-TB?!Mf*`eKA+?r-)Pf+5x3|m~)>I81DF-A8 zAdXCw6-OjW0*O+EBnqO5a!3=U6iF1sp$U1v=`8C*pc}%TAfC+{RvgL}5?~2M2s=Q) zitd07%|%!M(y?%`8nuG}`yTMr7v$p5g8?#fhJ>}Tso}g1s{~7qfW9?8BiRyjRE7>| zD=f~5?5b;R!U&<0BKX}efb>eaB3w}16d+i7fwV(PMeSl&=WA<26*T(g(xC9QLR6mJ zD(~tMBj=#^lcEFfN^`)_y}r8vhZmOOIHaYnOG9F_;4$C>Q!8JdU(;DLj%V*752~xo zfYn)wnzNF;!`(S4tZC_n23%D*jdVcoy|9HF1i6sCB{{5z2V;^35%)+a4q=m^JX9Y| zR(ke5o=ml@I~nAKUk1Q&d`5dWz^|8)<~^HsStU+PnX;_(_>_15TDs#z8fBhJ(}-!1 zwDf+r=4|^^MOI-}ZWe?-`WVhMgArs>GWW(cFQJDJL(rj&p)?#Zgal1#nlFIHPEWH> zFsCdIC61dHCnjiyht=hL)=(OJ%+1=8#C2AxSJIsAOj8+lCXfkX9nVgg961hIeq!o& M>dA~5nQ68S0H;{wQ2+n{ literal 0 HcmV?d00001 diff --git a/frontend/src/lib/assets/fonts/libre-franklin-v13-latin-regular.woff2 b/frontend/src/lib/assets/fonts/libre-franklin-v13-latin-regular.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..982f904f0210a776f55943401a4a6ac4863cd17e GIT binary patch literal 14152 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 SqU0pG@-z8w{YkwT0001&Tq8ID literal 0 HcmV?d00001 diff --git a/frontend/src/lib/components/CookieSet.svelte b/frontend/src/lib/components/CookieSet.svelte new file mode 100644 index 0000000..eb5c839 --- /dev/null +++ b/frontend/src/lib/components/CookieSet.svelte @@ -0,0 +1,60 @@ + + +{#if contentShown} + +{:else} +
+
+

Cookie ist nicht aktiviert. Bitte aktivieren Sie ihn.

+
+
+{/if} + + diff --git a/frontend/src/lib/components/Footer.svelte b/frontend/src/lib/components/Footer.svelte new file mode 100644 index 0000000..73a87cb --- /dev/null +++ b/frontend/src/lib/components/Footer.svelte @@ -0,0 +1,123 @@ + + +
+ + diff --git a/frontend/src/lib/components/Header.svelte b/frontend/src/lib/components/Header.svelte new file mode 100644 index 0000000..518882d --- /dev/null +++ b/frontend/src/lib/components/Header.svelte @@ -0,0 +1,382 @@ + + +
+
+ + + + + + +
+
+ + diff --git a/frontend/src/lib/components/ScrollBottom.svelte b/frontend/src/lib/components/ScrollBottom.svelte new file mode 100644 index 0000000..30c7665 --- /dev/null +++ b/frontend/src/lib/components/ScrollBottom.svelte @@ -0,0 +1,71 @@ + + +{#if showButton && force} + +{/if} + + diff --git a/frontend/src/lib/components/ScrollTop.svelte b/frontend/src/lib/components/ScrollTop.svelte new file mode 100644 index 0000000..1fe4430 --- /dev/null +++ b/frontend/src/lib/components/ScrollTop.svelte @@ -0,0 +1,52 @@ + + +{#if showButton} + +{/if} + + diff --git a/frontend/src/lib/components/pagebuilder/GoogleMaps.svelte b/frontend/src/lib/components/pagebuilder/GoogleMaps.svelte new file mode 100644 index 0000000..adbfbd9 --- /dev/null +++ b/frontend/src/lib/components/pagebuilder/GoogleMaps.svelte @@ -0,0 +1,27 @@ + + + + + + + diff --git a/frontend/src/lib/components/pagebuilder/Image.svelte b/frontend/src/lib/components/pagebuilder/Image.svelte new file mode 100644 index 0000000..d116086 --- /dev/null +++ b/frontend/src/lib/components/pagebuilder/Image.svelte @@ -0,0 +1,96 @@ + + +{#if images.length > 1} +
+ + {#each images as image, i (i)} + +
+ Bild +
+
+ {/each} +
+
+{:else if image} +
+ Bild +
+{/if} + + diff --git a/frontend/src/lib/components/pagebuilder/Modules.svelte b/frontend/src/lib/components/pagebuilder/Modules.svelte new file mode 100644 index 0000000..2bd5aec --- /dev/null +++ b/frontend/src/lib/components/pagebuilder/Modules.svelte @@ -0,0 +1,14 @@ + + +{#if module.type == "form"} + +{/if} diff --git a/frontend/src/lib/components/pagebuilder/Pagebuilder.svelte b/frontend/src/lib/components/pagebuilder/Pagebuilder.svelte new file mode 100644 index 0000000..4f73359 --- /dev/null +++ b/frontend/src/lib/components/pagebuilder/Pagebuilder.svelte @@ -0,0 +1,158 @@ + + +{#if Object.keys(row).length} + {#if page.pageTitle && i == 0} +

{page.pageTitle}

+ {/if} + {#if row.title} +

{row.title}

+ {/if} + {#if row?.columns?.length} +
+ {#each row?.columns as col} +
+ {#if col.contentType == "images"} + + {:else if col.contentType == "text"} + + {:else if col.contentType == "form" || col.contentType == "moduleImport"} + + {:else if col.contentType == "googleMaps"} + + {/if} +
+ {/each} +
{/if} +{/if} + + diff --git a/frontend/src/lib/components/pagebuilder/Text.svelte b/frontend/src/lib/components/pagebuilder/Text.svelte new file mode 100644 index 0000000..0ac9384 --- /dev/null +++ b/frontend/src/lib/components/pagebuilder/Text.svelte @@ -0,0 +1,10 @@ + + +
+ {@html text} +
+ + diff --git a/frontend/src/lib/components/pagebuilder/form/Checkbox.svelte b/frontend/src/lib/components/pagebuilder/form/Checkbox.svelte index 2ef46d2..069a2db 100644 --- a/frontend/src/lib/components/pagebuilder/form/Checkbox.svelte +++ b/frontend/src/lib/components/pagebuilder/form/Checkbox.svelte @@ -12,7 +12,3 @@ {label} - - diff --git a/frontend/src/lib/components/pagebuilder/form/CheckboxGroup.svelte b/frontend/src/lib/components/pagebuilder/form/CheckboxGroup.svelte index beb7771..8a3f370 100644 --- a/frontend/src/lib/components/pagebuilder/form/CheckboxGroup.svelte +++ b/frontend/src/lib/components/pagebuilder/form/CheckboxGroup.svelte @@ -1,7 +1,8 @@ @@ -14,10 +15,10 @@ - {checkbox.name} + {checkbox.textTitle} {/each} diff --git a/frontend/src/lib/components/pagebuilder/form/Datepicker.svelte b/frontend/src/lib/components/pagebuilder/form/Datepicker.svelte index 5a251c5..ce7aa18 100644 --- a/frontend/src/lib/components/pagebuilder/form/Datepicker.svelte +++ b/frontend/src/lib/components/pagebuilder/form/Datepicker.svelte @@ -2,7 +2,6 @@ import { CalendarView } from "fluent-svelte" import type { Writable } from "svelte/store" - export let groupTitle: string export let datePickerProps: DatePickerProps export let formValues: Writable @@ -112,22 +111,410 @@ diff --git a/frontend/src/lib/components/pagebuilder/form/Form.svelte b/frontend/src/lib/components/pagebuilder/form/Form.svelte deleted file mode 100644 index dcfb5ac..0000000 --- a/frontend/src/lib/components/pagebuilder/form/Form.svelte +++ /dev/null @@ -1,200 +0,0 @@ - - -
-

- {#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/FormColumn.svelte b/frontend/src/lib/components/pagebuilder/form/FormColumn.svelte new file mode 100644 index 0000000..eecf703 --- /dev/null +++ b/frontend/src/lib/components/pagebuilder/form/FormColumn.svelte @@ -0,0 +1,469 @@ + + +{#each widgets as widget} + {#if column?.title?.trim()} +

{column?.title ?? ""}

{/if} + {#if column?.annotation} +

{column?.annotation}

+ {/if} + {#if widget?.labelNumber} +
+ +
+ {/if} + + {#if widget?.times} +
+ +
+ {/if} + + {#if widget?.timeSelect} +
+ +
+ {/if} + + {#if widget?.standardSelect} +
+ +
+ {/if} + {#if widget?.date} +
+ +
+ {/if} + {#if widget?.number} +
+ +
+ {/if} + + {#if widget?.checkboxGroup} +
+ +
+ {/if} + + {#if widget?.datepicker} +
+ +
+ {/if} + + {#if widget?.multiselect} +
+ + + {:else} + + {/if} +
+ + {/each} + {/if} +{/each} + + diff --git a/frontend/src/lib/components/pagebuilder/form/FormColumnWrapper.svelte b/frontend/src/lib/components/pagebuilder/form/FormColumnWrapper.svelte new file mode 100644 index 0000000..9f92ca0 --- /dev/null +++ b/frontend/src/lib/components/pagebuilder/form/FormColumnWrapper.svelte @@ -0,0 +1,56 @@ + + +
+

+ {#if formRow.title}{formRow.title || ""}{/if} +

+ {#if innerWidth < 768} +
+ {#each formRow.columns as column, columnIndex} + + {/each} +
+ {/if} + {#if innerWidth >= 768} +
+ {#each formRow.columns as column, columnIndex} +
+ +
+ {/each} +
{/if} +
+ + diff --git a/frontend/src/lib/components/pagebuilder/form/FormLabelNumberBlock.svelte b/frontend/src/lib/components/pagebuilder/form/FormLabelNumberBlock.svelte index 0b76ce1..86af756 100644 --- a/frontend/src/lib/components/pagebuilder/form/FormLabelNumberBlock.svelte +++ b/frontend/src/lib/components/pagebuilder/form/FormLabelNumberBlock.svelte @@ -1,15 +1,15 @@
- {#each column.labelNumber as outerblock, i} + {#each widget as outerblock, i}

{outerblock.title}

diff --git a/frontend/src/lib/components/pagebuilder/form/Formular.svelte b/frontend/src/lib/components/pagebuilder/form/Formular.svelte index 2940daa..a69a23e 100644 --- a/frontend/src/lib/components/pagebuilder/form/Formular.svelte +++ b/frontend/src/lib/components/pagebuilder/form/Formular.svelte @@ -1,18 +1,18 @@ -{#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 formSend} +
+

Formular erfolgreich gesendet!

+

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

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

- {#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 index 277e4d5..d50f8a5 100644 --- a/frontend/src/lib/components/pagebuilder/form/Select.svelte +++ b/frontend/src/lib/components/pagebuilder/form/Select.svelte @@ -3,7 +3,7 @@ import { onMount } from "svelte" import type { Writable } from "svelte/store" - export let options: MultiSelectOptions[] = [] + export let options: { name: string }[] = [] export let groupTitle: string export let formValues: Writable @@ -19,7 +19,7 @@ // @ts-ignore $formValues[`selectMultiple_${groupTitle}_${rowNr}_${formCol.multiSelectEmailTitle}`] = { value: value.toString(), - required: !formCol.multiSelectNotRequired, + required: !formCol?.multiSelectInput?.standardInputProperties?.notRequired, } } @@ -80,5 +80,69 @@ diff --git a/frontend/src/lib/functions/eventBus.ts b/frontend/src/lib/functions/eventBus.ts new file mode 100644 index 0000000..f454525 --- /dev/null +++ b/frontend/src/lib/functions/eventBus.ts @@ -0,0 +1,13 @@ +const eventCallbacks: { [key: string]: any } = {} + +export const registerEventCallback = (event: string | number, id: string | number, callback: any) => { + if (!eventCallbacks[event]) eventCallbacks[event] = {} + eventCallbacks[event][id] = callback +} + +export const unregisterEventCallback = (event: string | number, id: string | number) => { + delete eventCallbacks[event][id] +} +export const getEventCallbacks = (event: string) => { + return eventCallbacks[event] +} diff --git a/frontend/src/lib/functions/fetch/loadContentAndSetStores.ts b/frontend/src/lib/functions/fetch/loadContentAndSetStores.ts new file mode 100644 index 0000000..35090c1 --- /dev/null +++ b/frontend/src/lib/functions/fetch/loadContentAndSetStores.ts @@ -0,0 +1,16 @@ +import { api } from "../../../api" +import { pages, content, rerender } from "../../store" +export async function loadContentAndSetStores(): Promise { + const contentRes = await api("content", {}) + const contentStore: { [id: string]: Content } = {} + const pagesStore: { [path: string]: Content } = {} + contentRes.data.forEach((e: Content) => { + contentStore[e.id] = e + if (e.type === "page") { + pagesStore[e.path] = e + } + }) + content.set(contentStore) + pages.set(pagesStore) + return null +} diff --git a/frontend/src/lib/functions/fetch/loadLibraryAndSetStores.ts b/frontend/src/lib/functions/fetch/loadLibraryAndSetStores.ts new file mode 100644 index 0000000..f5f258f --- /dev/null +++ b/frontend/src/lib/functions/fetch/loadLibraryAndSetStores.ts @@ -0,0 +1,12 @@ +import { api } from "../../../api" +import { mediaLibrary } from "../../store" + +export async function loadLibraryAndSetStore(): Promise { + const libraryRes = await api("medialib", {}) + const libStore: { [id: string]: MediaLibrary } = {} + libraryRes.data.forEach((el: MediaLibrary) => { + libStore[el.id] = el + }) + mediaLibrary.set(libStore) + return null +} diff --git a/frontend/src/lib/functions/fetch/loadModules.ts b/frontend/src/lib/functions/fetch/loadModules.ts new file mode 100644 index 0000000..3048adb --- /dev/null +++ b/frontend/src/lib/functions/fetch/loadModules.ts @@ -0,0 +1,11 @@ +import { api } from "../../../api" +import { modules } from "../../store" +export async function loadModulesAndSetStore(): Promise<{ [id: string]: Module }> { + const module = await api("module", {}) + const moduleStore: { [id: string]: Module } = {} + module.data.forEach((e: Module) => { + moduleStore[e.id] = e + }) + modules.set(moduleStore) + return moduleStore +} diff --git a/frontend/src/lib/functions/fetch/loadNavigationAndSetStores.ts b/frontend/src/lib/functions/fetch/loadNavigationAndSetStores.ts new file mode 100644 index 0000000..aca1d1f --- /dev/null +++ b/frontend/src/lib/functions/fetch/loadNavigationAndSetStores.ts @@ -0,0 +1,15 @@ +import { api } from "../../../api" +import { navigation, serviceNavigation } from "../../store" +export async function loadNavigationAndSetStores(): Promise { + const navigations = await api("navigation", {}) + let navigationStore: NavElement[] = [] + let serviceNavigationStore: NavElement[] = [] + navigations.data.forEach((nav: Navigation) => { + if (nav.tree == 0) navigationStore = nav.elements + else if (nav.tree == 1) serviceNavigationStore = nav.elements + }) + navigation.set(navigationStore) + serviceNavigation.set(serviceNavigationStore) + + return null +} diff --git a/frontend/src/lib/functions/pagebuilder/components/form/validateFields.ts b/frontend/src/lib/functions/pagebuilder/components/form/validateFields.ts index 9b36c1a..fd4850a 100644 --- a/frontend/src/lib/functions/pagebuilder/components/form/validateFields.ts +++ b/frontend/src/lib/functions/pagebuilder/components/form/validateFields.ts @@ -20,7 +20,10 @@ export function validateFields(fieldsArray: ValueEntry[]): (string | (() => void } fieldsArray.forEach(([field, value]) => { + + if (field === "blockGroups" || (typeof field === "string" && field.includes("numberLabel"))) { + // number label benötigt gesonderte Validierung if (!field.includes("numberLabel")) return // @ts-ignore let [elementValue, element, group, boolean] = value diff --git a/frontend/src/lib/functions/utils.ts b/frontend/src/lib/functions/utils.ts new file mode 100644 index 0000000..162237b --- /dev/null +++ b/frontend/src/lib/functions/utils.ts @@ -0,0 +1,14 @@ +import { getEventCallbacks } from "./eventBus" +import { navigate } from "../../../../vendor/svelte-routing" + +export function navigateWrapper(path: string, props: any = null) { + if (getEventCallbacks("navigate")) { + let callbacks = Object.values(getEventCallbacks("navigate")) + for (let i = 0; i < callbacks?.length; i++) { + // do not navigate if false is returned + if ((callbacks[i] as Function)(path, props) === false) return + } + } + if (props) navigate(path, props) + else navigate(path) +} diff --git a/frontend/src/lib/store.ts b/frontend/src/lib/store.ts index ba2e055..61facf8 100644 --- a/frontend/src/lib/store.ts +++ b/frontend/src/lib/store.ts @@ -8,4 +8,11 @@ const initLoc = { pop: false, categoryPath: "", } -export const location = writable(initLoc) \ No newline at end of file +export const location = writable(initLoc) +export let content = writable<{ [id: string]: Content }>({}) +export let pages = writable<{ [path: string]: Content }>({}) +export let modules = writable<{ [id: string]: Module }>({}) +export let mediaLibrary = writable<{ [id: string]: MediaLibrary }>({}) +export let navigation = writable([]) +export let serviceNavigation = writable([]) +export let rerender = writable(false) diff --git a/frontend/src/routes/NotFound.svelte b/frontend/src/routes/NotFound.svelte new file mode 100644 index 0000000..736c412 --- /dev/null +++ b/frontend/src/routes/NotFound.svelte @@ -0,0 +1,56 @@ + + +
+
+

404

+

Seite nicht gefunden

+

+ Die gesuchte Seite wurde möglicherweise entfernt, ihr Name wurde geändert oder sie ist vorübergehend nicht + verfügbar. +

+ +
+
+ + diff --git a/frontend/src/routes/Page.svelte b/frontend/src/routes/Page.svelte new file mode 100644 index 0000000..83f91e0 --- /dev/null +++ b/frontend/src/routes/Page.svelte @@ -0,0 +1,119 @@ + + + + {#key page} + + {#if page?.pageTitle} + {page.pageTitle} + {:else if page?.meta?.title} + {page.meta.title} + {/if} + + + {#if page?.meta?.description} + + {/if} + + + {#if page?.meta?.keywords} + + {/if} + + {#if page?.active === false} + + {/if} + + {/key} + +
+ {#if page} + {#each page.rows as row, i} +
+ {#if row.backgroundImage && $mediaLibrary[row.backgroundImage]} +
+ img +
+ {/if} +
+ +
+
+ {/each} + {:else} + + {/if} +
+ + diff --git a/package.json b/package.json index 7eed6c5..808a635 100644 --- a/package.json +++ b/package.json @@ -29,6 +29,7 @@ "connect-history-api-fallback": "^2.0.0", "esbuild": "^0.19.5", "esbuild-svelte": "^0.8.0", + "fluent-svelte": "^1.6.0", "http-proxy-middleware": "^2.0.6", "less": "^4.2.0", "morgan": "^1.10.0", @@ -42,13 +43,14 @@ "svelte-hmr": "^0.15.3", "svelte-preprocess": "^5.1.0", "svelte-preprocess-esbuild": "^3.0.1", - "svelte-routing": "^2.6.0", + "swiper": "^9.2.0", "tslib": "^2.6.2", "typescript": "^5.2.2" }, "dependencies": { "@sentry/cli": "^2.21.4", "@sentry/svelte": "^7.80.1", - "core-js": "3.33.2" + "core-js": "3.33.2", + "svelte-select": "^5.7.0" } } diff --git a/types/content.d.ts b/types/content.d.ts index f834f75..02f0b04 100644 --- a/types/content.d.ts +++ b/types/content.d.ts @@ -1,7 +1,7 @@ -interface Page { +interface Content { path: string active: boolean - type: "page" | "teamMembers" | "jobOffers" + type: "page" pageTitle: string rows: Row[] id: string @@ -13,10 +13,16 @@ interface Page { } interface Row { + title: string + backgroundImage: string columns: Column[] } type Column = - | { contentType: "image"; image: string; icons: { icon: string; link: string }[] } + | { contentType: "images"; images: string[] } | { contentType: "moduleImport"; moduleImport: string } + | { contentType: "form"; moduleImport: string } | { contentType: "text"; text: string } + | { contentType: "googleMaps" } + +type Module = { type: "form"; form: DBFormObj; id: string } | { type: ""; id: string } diff --git a/types/formComponent.d.ts b/types/formComponent.d.ts index 927d337..d14aace 100644 --- a/types/formComponent.d.ts +++ b/types/formComponent.d.ts @@ -1,52 +1,21 @@ -interface FormValues { - [key: string]: CustomHTMLElement - blockGroups?: Set -} -interface FormObj { - formRows?: string[] - index?: number - formTitle?: string - formValues?: Writable - honey?: boolean - agreement?: boolean -} -// Before transformation -interface TempFormBefore { - [rowName: string]: TempFormRowBefore -} - -interface TempFormRowBefore { - [newKey: string]: [any, boolean, boolean] -} - -// After transformation -interface TempFormAfter { - [rowName: string]: Array<[string, [any, boolean, boolean]]> -} - -interface TempFormIndices { - [rowName: string]: { - [newKey: string]: number - } -} - -type ValueEntry = - | [string, [boolean | string | any, boolean]] - | [string, [any, CustomHTMLElement, string | null, boolean]] - -type ObjectEntry = [string, CustomHTMLElement] - -interface DBFormObj { - emailSubject: string - emailReciever: string - emailCC: string[] - emailIntroduction: string - rows: DBFormRow[] -} -interface DBFormRow { - title: string +// Common Interfaces +interface StandardInputProperties { emailTitle: string - columns: FormColumn[] + placeholder: string + notRequired: boolean + fieldOrder: number + textTitle: string + groupTitle: string +} + +interface TimeRange { + from: string + to: string +} + +interface DateRange { + from: Date + to: Date } interface Block { @@ -61,7 +30,7 @@ interface LabelNumberInput { block: Block[] } -type inputWidgets = +type InputWidgets = | "labelNumber" | "times" | "select" @@ -69,21 +38,67 @@ type inputWidgets = | "customCalendar" | "number" | "checkboxGroup" - | "test" + | "text" | "multiSelect" + | "timeSelect" + | "standardSelect" -type StandardInputProperties = { - emailTitle: string - placeholder: string - notRequired: boolean - fieldOrder: number - textTitle: string +// Form Related Interfaces +interface FormValues { + [key: string]: CustomHTMLElement + blockGroups?: Set } +interface FormObj { + formRows?: string[] + index?: number + formTitle?: string + formValues?: Writable + honey?: boolean + agreement?: boolean +} + +interface TempFormBefore { + [rowName: string]: TempFormRowBefore +} + +interface TempFormRowBefore { + [newKey: string]: [any, boolean, boolean] +} + +interface TempFormAfter { + [rowName: string]: Array<[string, [any, boolean, boolean]]> +} + +interface TempFormIndices { + [rowName: string]: { + [newKey: string]: number + } +} + +// DB Related Interfaces +interface DBFormObj { + emailSubject: string + emailReciever: string + emailCC: string[] + emailIntroduction: string + sendFormBtnText: string + rows: DBFormRow[] +} + +interface DBFormRow { + title: string + emailTitle: string + columns: FormColumn[] +} + +// Input Widgets Interfaces interface CheckboxGroupInput { groupTitle: string checkboxes: { - standardInputProperties: StandardInputProperties[] + standardInputProperties: StandardInputProperties + emailTitle?: string + textTitle?: string }[] } @@ -94,10 +109,7 @@ interface DateInput { interface DatePickerInput { standardInputProperties: StandardInputProperties props: { - allowedDateRanges: { - from: Date - to: Date - } + allowedDateRanges: DateRange excludeDates: string[] } } @@ -109,7 +121,7 @@ interface MultiSelectInput { } options: { name: string - } + }[] } interface NumberInput { @@ -125,20 +137,66 @@ interface TextInput { interface TimesInput { standardInputProperties: StandardInputProperties - times: { - from: string - to: string + times: TimeRange[] +} + +interface TimeSelect { + selectEntries: { + leftSide: string + rightSide: string }[] + standardInputProperties: StandardInputProperties +} +interface StandardSelect { + selectEntries: { + shownValue: string + value: string + defaultValue: boolean + }[] + standardInputProperties: StandardInputProperties +} +// Widget Interface +interface Widget { + text: (TextInput & StandardInputProperties)[] + number: NumberInput & StandardInputProperties + date: DateInput & StandardInputProperties + times: TimesInput & StandardInputProperties + checkboxGroup: CheckboxGroupInput + datepicker: DatePickerInput & StandardInputProperties + multiselect: MultiSelectInput & StandardInputProperties + labelNumber: LabelNumberInput[] & StandardInputProperties + timeSelect: TimeSelect & StandardInputProperties + standardSelect: StandardSelect & StandardInputProperties } interface FormColumn { - inputWidgets: inputWidgets - labelNumberInput?: LabelNumber - checkboxGroupInput?: CheckboxGroupInput - dateInput?: DateInputInput - datePickerInput?: DatePickerInput - multiSelectInput?: MultiSelectInput - numberInput?: NumberInput - timesInput?: TimesInput - textInput?: TextInput + emailTitle: string + title: string + annotation: string + inputWidgets: InputWidgets[] + labelNumberInput: LabelNumberInput[] + checkboxGroupInput: CheckboxGroupInput + dateInput: DateInput + datePickerInput: DatePickerInput + multiSelectInput: MultiSelectInput + numberInput: NumberInput + timesInput: TimesInput + textInput: TextInput[] + timeSelect: TimeSelect + standardSelect: StandardSelect +} +type ValueEntry = + | [string, [boolean | string | any, boolean]] + | [string, [any, CustomHTMLElement, string | null, boolean]] + +type ObjectEntry = [string, CustomHTMLElement] +interface FormValues { + [key: string]: CustomHTMLElement + blockGroups?: Set +} +interface CustomHTMLElement extends HTMLElement { + checked?: boolean + value?: any + required?: boolean + getAttribute(attr: string): string | null } diff --git a/types/navigation.d.ts b/types/navigation.d.ts index 7192568..a8dfd73 100644 --- a/types/navigation.d.ts +++ b/types/navigation.d.ts @@ -1,9 +1,12 @@ interface Navigation { tree: number - pages: NavElement[] + elements: NavElement[] } interface NavElement { + endpoint: boolean name: string - page: string + image: FileField + page?: string + elements?: NavElement[] } diff --git a/vendor/svelte-routing/.gitattributes b/vendor/svelte-routing/.gitattributes new file mode 100644 index 0000000..eb49e78 --- /dev/null +++ b/vendor/svelte-routing/.gitattributes @@ -0,0 +1 @@ +*.svelte linguist-language=HTML diff --git a/vendor/svelte-routing/.prettierrc b/vendor/svelte-routing/.prettierrc new file mode 100644 index 0000000..353e1a5 --- /dev/null +++ b/vendor/svelte-routing/.prettierrc @@ -0,0 +1,9 @@ +{ + "trailingComma": "es5", + "tabWidth": 4, + "semi": true, + "singleQuote": false, + "plugins": ["prettier-plugin-svelte"], + "pluginSearchDirs": ["."], + "overrides": [{ "files": "*.svelte", "options": { "parser": "svelte" } }] +} diff --git a/vendor/svelte-routing/CHANGELOG.md b/vendor/svelte-routing/CHANGELOG.md new file mode 100644 index 0000000..2aae66c --- /dev/null +++ b/vendor/svelte-routing/CHANGELOG.md @@ -0,0 +1,309 @@ +# CHANGELOG + +# 2.11.0 +- PR Merged [#277](https://github.com/EmilTholin/svelte-routing/pull/277) +- Update dependencies. + +# 2.10.0 +- PR Removed [#266](https://github.com/EmilTholin/svelte-routing/pull/266) +- Issue Fixed [#273](https://github.com/EmilTholin/svelte-routing/issues/273) +- Update dependencies. + +# 2.9.0 +- PR Merged [#272](https://github.com/EmilTholin/svelte-routing/pull/272). +- Issue Fixed [#271](https://github.com/EmilTholin/svelte-routing/issues/271). + +# 2.8.0 +- PR Merged [#267](https://github.com/EmilTholin/svelte-routing/pull/267). +- PR Merged [#270](https://github.com/EmilTholin/svelte-routing/pull/270). +- Issue Fixed [#268](https://github.com/EmilTholin/svelte-routing/issues/268). +- Issue Fixed [#269](https://github.com/EmilTholin/svelte-routing/issues/269). +- Update dependencies. + +# 2.7.0 +- PR Merged [#266](https://github.com/EmilTholin/svelte-routing/pull/266). +- Update dependencies. + +# 2.6.0 + +- Issue Fixed [#262](https://github.com/EmilTholin/svelte-routing/issues/262). +- PR Merged [#263](https://github.com/EmilTholin/svelte-routing/pull/263). +- Update svelte version. + +# 2.5.0 + +- Issue Fixed [#260](https://github.com/EmilTholin/svelte-routing/issues/260). +- Update svelte version. + +# 2.4.0 + +- Fixed viewtransition callback function error. + +# 2.3.0 + +- Added Prettier. +- Added View Transition (Experimental). + +# 2.2.0 + +- PR Merged [#258](https://github.com/EmilTholin/svelte-routing/pull/258). + +# 2.1.0 + +- PR Merged [#256](https://github.com/EmilTholin/svelte-routing/pull/256). +- PR Merged [#257](https://github.com/EmilTholin/svelte-routing/pull/257). +- Issue Fixed [#254](https://github.com/EmilTholin/svelte-routing/issues/254). +- Update svelte version. + +# 2.0.0 + +- PR Merged [#250](https://github.com/EmilTholin/svelte-routing/pull/250). +- PR Merged [#247](https://github.com/EmilTholin/svelte-routing/pull/247). +- Removing example folder. +- Update svelte version. + +# 1.11.0 + +- PR Merged [#245](https://github.com/EmilTholin/svelte-routing/pull/245). +- Update svelte version. + +# 1.10.0 + +- PR Merged [#243](https://github.com/EmilTholin/svelte-routing/pull/243). + +# 1.9.0 + +- Major improvement in performance. Minimize unnecessary prefetch components. + +# 1.8.9 + +- Fixed. Sometimes navigate return info null. +- Issue Fixed [#132](https://github.com/EmilTholin/svelte-routing/issues/132). + +# 1.8.8 + +- Issue Fixed [#242](https://github.com/EmilTholin/svelte-routing/issues/242). +- PR Removed [#77](https://github.com/EmilTholin/svelte-routing/pull/77) + Causing infinity loop in nested routes. + +# 1.8.7 + +- Segment mismatch bug fixed. + +# 1.8.6 + +- Issue Fixed [#242](https://github.com/EmilTholin/svelte-routing/issues/242). +- Update svelte version. +- Codebase improved. + +# 1.8.5 + +- Can Use Dom function improved. +- function & class mismatch bug fixed. + +# 1.8.4 + +- Issue Fixed [#241](https://github.com/EmilTholin/svelte-routing/issues/241). + +# 1.8.3 + +- Hooks & Types bugs fixed. + +# 1.8.2 + +- Svelte dependency updated. +- Lazyload component return type added. +- Issue Fixed [#240](https://github.com/EmilTholin/svelte-routing/issues/240). + +# 1.8.0 + +- Major Bugs fixed in `Router.svelte`. +- Converted all interfaces into types. +- Improved Lazy Loading/Async Route Import. Get much smaller chunk for every + route. Only load files (JS & CSS module) when URL is active. + +```jsx + + import("./Home.svelte")} /> + + import("./About.svelte")} /> + + import("./User.svelte")} /> +``` + +- Added Hooks for Contexts. `useLocation`, `useRouter`, `useHistory`. + +```html + + + +
{JSON.stringify($location)}
+``` + +# 1.7.0 + +- Added Code of Conduct. +- Optimized the codebase. +- Update the dependencies. +- PR Merged [#220](https://github.com/EmilTholin/svelte-routing/pull/220). +- PR Merged [#210](https://github.com/EmilTholin/svelte-routing/pull/210). +- PR Merged [#206](https://github.com/EmilTholin/svelte-routing/pull/206). +- PR Merged [#192](https://github.com/EmilTholin/svelte-routing/pull/193). +- PR Merged [#188](https://github.com/EmilTholin/svelte-routing/pull/188). +- PR Merged [#175](https://github.com/EmilTholin/svelte-routing/pull/175). +- PR Merged [#173](https://github.com/EmilTholin/svelte-routing/pull/173). +- PR Merged [#158](https://github.com/EmilTholin/svelte-routing/pull/158). +- PR Merged [#105](https://github.com/EmilTholin/svelte-routing/pull/105). +- PR Merged [#95](https://github.com/EmilTholin/svelte-routing/pull/95). +- PR Merged [#85](https://github.com/EmilTholin/svelte-routing/pull/85). +- PR Merged [#77](https://github.com/EmilTholin/svelte-routing/pull/77). +- PR/Issue [#200](https://github.com/EmilTholin/svelte-routing/pull/200), + Tested & it's not relevant/exists. +- Issue Fixed [#122](https://github.com/EmilTholin/svelte-routing/issues/122), + [#4652](https://github.com/sveltejs/svelte/issues/4652). + +# 1.6.0 + +Added TypeScript support. + +# 1.4.0 + +Added functionality for passing the `location` to the rendered Route `component` +and slot. + +```html + + + + + + +

Blog

+

{queryParams.foo}

+ + + +

Blog

+

{location.search}

+
+``` + +# 1.3.0 + +Added functionality to pass potential `Route` path parameters back to the parent +using props, so they can be exposed to the slot template using `let:params`. + +```html + + + +``` + +# 1.2.0 + +Added functionality for passing all the extra `Route` properties to the rendered +`component`. + +```html + + + + + + +

{foo} {bar}

+``` + +# 1.1.0 + +Added the ability to give `Route` path wildcards a custom name. + +```html + + + + + + +

{wildcardName}

+``` + +# 1.0.0 + +- Moved to Svelte 3. +- It's now required for all `Route` and `Link` components to have a `Router` + ancestor. +- `NavLink` was removed in favour for a more versatile `Link` component. Check + the userland `NavLink` component in the `example` directory for an example. +- The SSR component no longer needs to be compiled at runtime with the help of + [esm](https://github.com/standard-things/esm) as there is no longer a + dependency on the `history` library. You can compile a separate CJS bundle + for the server and pass in a prop to the topmost component and use that as + the `url` property for the `Router`, which will force the URL for all + descendants. +- All component filename extensions have been changed to `.svelte`. +- Hash routing is no longer supported. +- The entire API of the library is now exported from the `src/index.js` file, + so importing from the library is now much more pleasant. + +```javascript +import { Router, Route, Link } from "svelte-routing"; +``` + +# 0.4.0 + +Moved to Svelte v2 and added the new +[link](https://github.com/EmilTholin/svelte-routing#linkjs) and +[links](https://github.com/EmilTholin/svelte-routing#linksjs) actions. + +# 0.3.0 + +Split the `createHistory` function into `createBrowserHistory`, +`createMemoryHistory`, `createHashHistory` to allow for better tree shaking of +unused history creation code. + +# 0.2.0 + +Added the ability to access the match object in a matched route: + +```html + + +

{{match && match.params.myParam}}

+
+``` + +or: + +```html + + + + +

{{match.params.myParam}}

+``` + +# 0.1.0 + +Added the ability to give a component constructor to a route with the +`component` property: + +```html + + +``` diff --git a/vendor/svelte-routing/CODE_OF_CONDUCT.md b/vendor/svelte-routing/CODE_OF_CONDUCT.md new file mode 100644 index 0000000..633952e --- /dev/null +++ b/vendor/svelte-routing/CODE_OF_CONDUCT.md @@ -0,0 +1,128 @@ +# Contributor Covenant Code of Conduct + +## Our Pledge + +We as members, contributors, and leaders pledge to make participation in our +community a harassment-free experience for everyone, regardless of age, body +size, visible or invisible disability, ethnicity, sex characteristics, gender +identity and expression, level of experience, education, socio-economic status, +nationality, personal appearance, race, religion, or sexual identity and +orientation. + +We pledge to act and interact in ways that contribute to an open, welcoming, +diverse, inclusive, and healthy community. + +## Our Standards + +Examples of behavior that contributes to a positive environment for our +community include: + +- Demonstrating empathy and kindness toward other people +- Being respectful of differing opinions, viewpoints, and experiences +- Giving and gracefully accepting constructive feedback +- Accepting responsibility and apologizing to those affected by our mistakes, + and learning from the experience +- Focusing on what is best not just for us as individuals, but for the overall + community + +Examples of unacceptable behavior include: + +- The use of sexualized language or imagery, and sexual attention or advances + of any kind +- Trolling, insulting or derogatory comments, and personal or political + attacks +- Public or private harassment +- Publishing others' private information, such as a physical or email address, + without their explicit permission +- Other conduct which could reasonably be considered inappropriate in a + professional setting + +## Enforcement Responsibilities + +Community leaders are responsible for clarifying and enforcing our standards of +acceptable behavior and will take appropriate and fair corrective action in +response to any behavior that they deem inappropriate, threatening, offensive, +or harmful. + +Community leaders have the right and responsibility to remove, edit, or reject +comments, commits, code, wiki edits, issues, and other contributions that are +not aligned to this Code of Conduct, and will communicate reasons for moderation +decisions when appropriate. + +## Scope + +This Code of Conduct applies within all community spaces, and also applies when +an individual is officially representing the community in public spaces. +Examples of representing our community include using an official e-mail address, +posting via an official social media account, or acting as an appointed +representative at an online or offline event. + +## Enforcement + +Instances of abusive, harassing, or otherwise unacceptable behavior may be +reported to the community leaders responsible for enforcement at . All +complaints will be reviewed and investigated promptly and fairly. + +All community leaders are obligated to respect the privacy and security of the +reporter of any incident. + +## Enforcement Guidelines + +Community leaders will follow these Community Impact Guidelines in determining +the consequences for any action they deem in violation of this Code of Conduct: + +### 1. Correction + +**Community Impact**: Use of inappropriate language or other behavior deemed +unprofessional or unwelcome in the community. + +**Consequence**: A private, written warning from community leaders, providing +clarity around the nature of the violation and an explanation of why the +behavior was inappropriate. A public apology may be requested. + +### 2. Warning + +**Community Impact**: A violation through a single incident or series of +actions. + +**Consequence**: A warning with consequences for continued behavior. No +interaction with the people involved, including unsolicited interaction with +those enforcing the Code of Conduct, for a specified period of time. This +includes avoiding interactions in community spaces as well as external channels +like social media. Violating these terms may lead to a temporary or permanent +ban. + +### 3. Temporary Ban + +**Community Impact**: A serious violation of community standards, including +sustained inappropriate behavior. + +**Consequence**: A temporary ban from any sort of interaction or public +communication with the community for a specified period of time. No public or +private interaction with the people involved, including unsolicited interaction +with those enforcing the Code of Conduct, is allowed during this period. +Violating these terms may lead to a permanent ban. + +### 4. Permanent Ban + +**Community Impact**: Demonstrating a pattern of violation of community +standards, including sustained inappropriate behavior, harassment of an +individual, or aggression toward or disparagement of classes of individuals. + +**Consequence**: A permanent ban from any sort of public interaction within the +community. + +## Attribution + +This Code of Conduct is adapted from the [Contributor Covenant][homepage], +version 2.0, available at +https://www.contributor-covenant.org/version/2/0/code_of_conduct.html. + +Community Impact Guidelines were inspired by +[Mozilla's code of conduct enforcement ladder](https://github.com/mozilla/diversity). + +[homepage]: https://www.contributor-covenant.org + +For answers to common questions about this code of conduct, see the FAQ at +https://www.contributor-covenant.org/faq. Translations are available at +https://www.contributor-covenant.org/translations. diff --git a/vendor/svelte-routing/LICENSE b/vendor/svelte-routing/LICENSE new file mode 100644 index 0000000..807f9fd --- /dev/null +++ b/vendor/svelte-routing/LICENSE @@ -0,0 +1,20 @@ +The MIT License (MIT) + +Copyright (c) 2023 Krishna Torque + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of +the Software, and to permit persons to whom the Software is furnished to do so, +subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR +COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/vendor/svelte-routing/README.md b/vendor/svelte-routing/README.md new file mode 100644 index 0000000..3fa71cd --- /dev/null +++ b/vendor/svelte-routing/README.md @@ -0,0 +1,234 @@ +[![npm][npm]][npm-url] + +# Svelte Routing + +A declarative Svelte routing library with SSR support. + +[[CHANGELOG][changelog-url]] + +## Install + +```bash +npm i -D svelte-routing +``` + +## Usage + +```html + + + + + +
+ + + + +
+
+``` + +```javascript +// main.js +import App from "./App.svelte"; + +const app = new App({ + target: document.getElementById("app"), +}); +``` + +## API + +#### `Router` + +The `Router` component supplies the `Link` and `Route` descendant components +with routing information through context, so you need at least one `Router` at +the top of your application. It assigns a score to all its `Route` descendants +and picks the best match to render. + +`Router` components can also be nested to allow for seamless merging of many +smaller apps. + +###### Properties + +| Property | Required | Default Value | Description | +| :--------------: | :------: | :-----------: | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `basepath` | | `"/"` | The `basepath` property will be added to all the `to` properties of `Link` descendants and to all `path` properties of `Route` descendants. This property can be ignored in most cases, but if you host your application on e.g. `https://example.com/my-site`, the `basepath` should be set to `/my-site`. | +| `url` | | `""` | The `url` property is used in SSR to force the current URL of the application and will be used by all `Link` and `Route` descendants. A falsy value will be ignored by the `Router`, so it's enough to declare `export let url = "";` for your topmost component and only give it a value in SSR. | +| `viewtransition` | | `null` | View Transition (Experimental) | + +#### `Link` + +A component used to navigate around the application. + +###### Properties + +| Property | Required | Default Value | Description | +| :--------------: | :------: | :-----------: | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| `to` | ✔ ️ | `"#"` | URL the component should link to. | +| `replace` | | `false` | When `true`, clicking the `Link` will replace the current entry in the history stack instead of adding a new one. | +| `state` | | `{}` | An object that will be pushed to the history stack when the `Link` is clicked. | +| `getProps` | | `() => ({})` | A function that returns an object that will be spread on the underlying anchor element's attributes. The first argument given to the function is an object with the properties `location`, `href`, `isPartiallyCurrent`, `isCurrent`. | +| `preserveScroll` | | `false` | When `true`, clicking the `Link` will not scroll the page to the top. | + +#### `Route` + +A component that will render its `component` property or children when its +ancestor `Router` component decides it is the best match. + +All properties other than `path` and `component` given to the `Route` will be +passed to the rendered `component`. + +Potential path parameters will be passed to the rendered `component` as +properties. A wildcard `*` can be given a name with `*wildcardName` to pass the +wildcard string as the `wildcardName` property instead of as the `*` property. + +Potential path parameters are passed back to the parent using props, so they can +be exposed to the slot template using `let:params`. + +```html + + + +``` + +The active status of link can be exposed to the slot template using +`let:active`. + +```html + + Browser + +``` + +###### Properties + +| Property | Required | Default Value | Description | +| :---------: | :------: | :------------ | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `path` | | `""` | The path for when this component should be rendered. If no `path` is given the `Route` will act as the default that matches if no other `Route` in the `Router` matches. | +| `component` | | `null` | The component constructor that will be used for rendering when the `Route` matches. If `component` is not set, the children of `Route` will be rendered instead. | + +#### `navigate` + +A function that allows you to imperatively navigate around the application for +those use cases where a `Link` component is not suitable, e.g. after submitting +a form. + +The first argument is a string denoting where to navigate to, and the second +argument is an object with a `replace`, `state` and `preserveScroll` properties equivalent to those +in the `Link` component. + +```html + +``` + +#### `link` + +An action used on anchor tags to navigate around the application. You can add an +attribute `replace` to replace the current entry in the history stack instead of +adding a new one and `preserveScroll` to not scroll the page to the top when clicked. + +```html + + + + Home + Replace this URL + + +``` + +#### `links` + +An action used on a root element to make all relative anchor elements navigate +around the application. You can add an attribute `replace` on any anchor to +replace the current entry in the history stack instead of adding a new one. +You can add an attribute `preserveScroll` on any anchor to not to scroll the page to the top when clicked. You +can add an attribute `noroute` for this action to skip over the anchor and allow +it to use the native browser action. + +```html + + + + +``` + +#### `viewtransition` + +Viewtransition for navigation (Experimental). + +_`builtin transition`_ + +```html + + + + + + +``` + +_`custom transition`_ + +```html + + + + + + +``` + +# License + +This project is licensed under the [**MIT**](LICENSE). + +# Contribution + +Unless you explicitly state otherwise, any contribution intentionally submitted +for this project by you, shall be licensed as **MIT**, without any additional +terms or conditions. [**Code of Conduct**](CODE_OF_CONDUCT.md). + +[npm]: https://img.shields.io/npm/v/svelte-routing.svg +[npm-url]: https://npmjs.com/package/svelte-routing +[changelog-url]: https://github.com/EmilTholin/svelte-routing/blob/master/CHANGELOG.md diff --git a/vendor/svelte-routing/package.json b/vendor/svelte-routing/package.json new file mode 100644 index 0000000..98d49eb --- /dev/null +++ b/vendor/svelte-routing/package.json @@ -0,0 +1,34 @@ +{ + "name": "svelte-routing", + "version": "2.11.0", + "author": "Emil Tholin @EmilTholin", + "license": "MIT", + "description": "A declarative Svelte routing library with SSR support", + "keywords": [ + "svelte routing", + "svelte", + "sveltejs", + "route", + "router", + "routing", + "svelte route", + "svelte router", + "typescript" + ], + "repository": "EmilTholin/svelte-routing", + "main": "./src/index.js", + "types": "./types/index.d.ts", + "svelte": "./src/index.js", + "exports": { + ".": { + "main": "./src/index.js", + "types": "./types/index.d.ts", + "svelte": "./src/index.js" + } + }, + "devDependencies": { + "svelte": "^4.2.8", + "prettier": "^3.1.1", + "prettier-plugin-svelte": "^3.1.2" + } +} diff --git a/vendor/svelte-routing/src/Link.svelte b/vendor/svelte-routing/src/Link.svelte new file mode 100644 index 0000000..fd072bd --- /dev/null +++ b/vendor/svelte-routing/src/Link.svelte @@ -0,0 +1,50 @@ + + + + + diff --git a/vendor/svelte-routing/src/Route.svelte b/vendor/svelte-routing/src/Route.svelte new file mode 100644 index 0000000..9987922 --- /dev/null +++ b/vendor/svelte-routing/src/Route.svelte @@ -0,0 +1,59 @@ + + +{#if $activeRoute && $activeRoute.route === route} + {#if component} + {#await component then resolvedComponent} + + {/await} + {:else} + + {/if} +{/if} diff --git a/vendor/svelte-routing/src/Router.svelte b/vendor/svelte-routing/src/Router.svelte new file mode 100644 index 0000000..b47262b --- /dev/null +++ b/vendor/svelte-routing/src/Router.svelte @@ -0,0 +1,145 @@ + + +{#if viewtransition} + {#key $location.pathname} +
+ +
+ {/key} +{:else} + +{/if} diff --git a/vendor/svelte-routing/src/actions.js b/vendor/svelte-routing/src/actions.js new file mode 100644 index 0000000..cb351bd --- /dev/null +++ b/vendor/svelte-routing/src/actions.js @@ -0,0 +1,87 @@ +import { navigate } from "./history.js"; +import { hostMatches, shouldNavigate } from "./utils.js"; + +/** + * A link action that can be added to tags rather + * than using the component. + * + * Example: + * ```html + * {post.title} + * ``` + */ +const link = (node) => { + const onClick = (event) => { + const anchor = event.currentTarget; + + if ( + (anchor.target === "" || anchor.target === "_self") && + hostMatches(anchor) && + shouldNavigate(event) + ) { + event.preventDefault(); + navigate(anchor.pathname + anchor.search, { + replace: anchor.hasAttribute("replace"), + preserveScroll: anchor.hasAttribute("preserveScroll"), + }); + } + }; + + node.addEventListener("click", onClick); + + return { + destroy() { + node.removeEventListener("click", onClick); + }, + }; +}; +/** + * An action to be added at a root element of your application to + * capture all relative links and push them onto the history stack. + * + * Example: + * ```html + *
+ * + * + * + * {#each projects as project} + * {project.title} + * {/each} + * + *
+ * ``` + */ +const links = (node) => { + const findClosest = (tagName, el) => { + while (el && el.tagName !== tagName) el = el.parentNode; + return el; + }; + + const onClick = (event) => { + const anchor = findClosest("A", event.target); + if ( + anchor && + (anchor.target === "" || anchor.target === "_self") && + hostMatches(anchor) && + shouldNavigate(event) && + !anchor.hasAttribute("noroute") + ) { + event.preventDefault(); + navigate(anchor.pathname + anchor.search, { + replace: anchor.hasAttribute("replace"), + preserveScroll: anchor.hasAttribute("preserveScroll"), + }); + } + }; + + node.addEventListener("click", onClick); + + return { + destroy() { + node.removeEventListener("click", onClick); + }, + }; +}; + +export { link, links }; diff --git a/vendor/svelte-routing/src/contexts.js b/vendor/svelte-routing/src/contexts.js new file mode 100644 index 0000000..5647251 --- /dev/null +++ b/vendor/svelte-routing/src/contexts.js @@ -0,0 +1,9 @@ +import { getContext } from "svelte"; + +export const LOCATION = {}; +export const ROUTER = {}; +export const HISTORY = {}; + +export const useLocation = () => getContext(LOCATION); +export const useRouter = () => getContext(ROUTER); +export const useHistory = () => getContext(HISTORY); diff --git a/vendor/svelte-routing/src/history.js b/vendor/svelte-routing/src/history.js new file mode 100644 index 0000000..241a599 --- /dev/null +++ b/vendor/svelte-routing/src/history.js @@ -0,0 +1,109 @@ +/** + * Adapted from https://github.com/reach/router/blob/b60e6dd781d5d3a4bdaaf4de665649c0f6a7e78d/src/lib/history.js + * https://github.com/reach/router/blob/master/LICENSE + */ +import { canUseDOM } from "./utils"; + +const getLocation = (source) => { + return { + ...source.location, + state: source.history.state, + key: (source.history.state && source.history.state.key) || "initial", + }; +}; +const createHistory = (source) => { + const listeners = []; + let location = getLocation(source); + + return { + get location() { + return location; + }, + + listen(listener) { + listeners.push(listener); + + const popstateListener = () => { + location = getLocation(source); + listener({ location, action: "POP" }); + }; + + source.addEventListener("popstate", popstateListener); + + return () => { + source.removeEventListener("popstate", popstateListener); + const index = listeners.indexOf(listener); + listeners.splice(index, 1); + }; + }, + + navigate( + to, + { + state, + replace = false, + preserveScroll = false, + blurActiveElement = true, + } = {} + ) { + state = { ...state, key: Date.now() + "" }; + // try...catch iOS Safari limits to 100 pushState calls + try { + if (replace) source.history.replaceState(state, "", to); + else source.history.pushState(state, "", to); + } catch (e) { + source.location[replace ? "replace" : "assign"](to); + } + location = getLocation(source); + listeners.forEach((listener) => + listener({ location, action: "PUSH", preserveScroll }) + ); + if (typeof document !== "undefined") + if (blurActiveElement) document.activeElement.blur(); + }, + }; +}; +// Stores history entries in memory for testing or other platforms like Native +const createMemorySource = (initialPathname = "/") => { + let index = 0; + const stack = [{ pathname: initialPathname, search: "" }]; + const states = []; + + return { + get location() { + return stack[index]; + }, + addEventListener(name, fn) {}, + removeEventListener(name, fn) {}, + history: { + get entries() { + return stack; + }, + get index() { + return index; + }, + get state() { + return states[index]; + }, + pushState(state, _, uri) { + const [pathname, search = ""] = uri.split("?"); + index++; + stack.push({ pathname, search }); + states.push(state); + }, + replaceState(state, _, uri) { + const [pathname, search = ""] = uri.split("?"); + stack[index] = { pathname, search }; + states[index] = state; + }, + }, + }; +}; +// Global history uses window.history as the source if available, +// otherwise a memory history +const globalHistory = createHistory( + canUseDOM() ? window : createMemorySource() +); +const { navigate } = globalHistory; + +export { globalHistory, navigate, createHistory, createMemorySource }; diff --git a/vendor/svelte-routing/src/index.js b/vendor/svelte-routing/src/index.js new file mode 100644 index 0000000..73c7c76 --- /dev/null +++ b/vendor/svelte-routing/src/index.js @@ -0,0 +1,6 @@ +export { default as Link } from "./Link.svelte"; +export { default as Route } from "./Route.svelte"; +export { default as Router } from "./Router.svelte"; +export { link, links } from "./actions.js"; +export * from "./contexts.js"; +export { navigate } from "./history.js"; diff --git a/vendor/svelte-routing/src/utils.js b/vendor/svelte-routing/src/utils.js new file mode 100644 index 0000000..cc39c6b --- /dev/null +++ b/vendor/svelte-routing/src/utils.js @@ -0,0 +1,278 @@ +/** + * Adapted from https://github.com/reach/router/blob/b60e6dd781d5d3a4bdaaf4de665649c0f6a7e78d/src/lib/utils.js + * https://github.com/reach/router/blob/master/LICENSE + */ + +const PARAM = /^:(.+)/; +const SEGMENT_POINTS = 4; +const STATIC_POINTS = 3; +const DYNAMIC_POINTS = 2; +const SPLAT_PENALTY = 1; +const ROOT_POINTS = 1; + +/** + * Split up the URI into segments delimited by `/` + * Strip starting/ending `/` + * @param {string} uri + * @return {string[]} + */ +const segmentize = (uri) => uri.replace(/(^\/+|\/+$)/g, "").split("/"); +/** + * Strip `str` of potential start and end `/` + * @param {string} string + * @return {string} + */ +const stripSlashes = (string) => string.replace(/(^\/+|\/+$)/g, ""); +/** + * Score a route depending on how its individual segments look + * @param {object} route + * @param {number} index + * @return {object} + */ +const rankRoute = (route, index) => { + const score = route.default + ? 0 + : segmentize(route.path).reduce((score, segment) => { + score += SEGMENT_POINTS; + + if (segment === "") { + score += ROOT_POINTS; + } else if (PARAM.test(segment)) { + score += DYNAMIC_POINTS; + } else if (segment[0] === "*") { + score -= SEGMENT_POINTS + SPLAT_PENALTY; + } else { + score += STATIC_POINTS; + } + + return score; + }, 0); + + return { route, score, index }; +}; +/** + * Give a score to all routes and sort them on that + * If two routes have the exact same score, we go by index instead + * @param {object[]} routes + * @return {object[]} + */ +const rankRoutes = (routes) => + routes + .map(rankRoute) + .sort((a, b) => + a.score < b.score ? 1 : a.score > b.score ? -1 : a.index - b.index + ); +/** + * Ranks and picks the best route to match. Each segment gets the highest + * amount of points, then the type of segment gets an additional amount of + * points where + * + * static > dynamic > splat > root + * + * This way we don't have to worry about the order of our routes, let the + * computers do it. + * + * A route looks like this + * + * { path, default, value } + * + * And a returned match looks like: + * + * { route, params, uri } + * + * @param {object[]} routes + * @param {string} uri + * @return {?object} + */ +const pick = (routes, uri) => { + let match; + let default_; + + const [uriPathname] = uri.split("?"); + const uriSegments = segmentize(uriPathname); + const isRootUri = uriSegments[0] === ""; + const ranked = rankRoutes(routes); + + for (let i = 0, l = ranked.length; i < l; i++) { + const route = ranked[i].route; + let missed = false; + + if (route.default) { + default_ = { + route, + params: {}, + uri, + }; + continue; + } + + const routeSegments = segmentize(route.path); + const params = {}; + const max = Math.max(uriSegments.length, routeSegments.length); + let index = 0; + + for (; index < max; index++) { + const routeSegment = routeSegments[index]; + const uriSegment = uriSegments[index]; + + if (routeSegment && routeSegment[0] === "*") { + // Hit a splat, just grab the rest, and return a match + // uri: /files/documents/work + // route: /files/* or /files/*splatname + const splatName = + routeSegment === "*" ? "*" : routeSegment.slice(1); + + params[splatName] = uriSegments + .slice(index) + .map(decodeURIComponent) + .join("/"); + break; + } + + if (typeof uriSegment === "undefined") { + // URI is shorter than the route, no match + // uri: /users + // route: /users/:userId + missed = true; + break; + } + + const dynamicMatch = PARAM.exec(routeSegment); + + if (dynamicMatch && !isRootUri) { + const value = decodeURIComponent(uriSegment); + params[dynamicMatch[1]] = value; + } else if (routeSegment !== uriSegment) { + // Current segments don't match, not dynamic, not splat, so no match + // uri: /users/123/settings + // route: /users/:id/profile + missed = true; + break; + } + } + + if (!missed) { + match = { + route, + params, + uri: "/" + uriSegments.slice(0, index).join("/"), + }; + break; + } + } + + return match || default_ || null; +}; +/** + * Add the query to the pathname if a query is given + * @param {string} pathname + * @param {string} [query] + * @return {string} + */ +const addQuery = (pathname, query) => pathname + (query ? `?${query}` : ""); +/** + * Resolve URIs as though every path is a directory, no files. Relative URIs + * in the browser can feel awkward because not only can you be "in a directory", + * you can be "at a file", too. For example: + * + * browserSpecResolve('foo', '/bar/') => /bar/foo + * browserSpecResolve('foo', '/bar') => /foo + * + * But on the command line of a file system, it's not as complicated. You can't + * `cd` from a file, only directories. This way, links have to know less about + * their current path. To go deeper you can do this: + * + * + * // instead of + * + * + * Just like `cd`, if you want to go deeper from the command line, you do this: + * + * cd deeper + * # not + * cd $(pwd)/deeper + * + * By treating every path as a directory, linking to relative paths should + * require less contextual information and (fingers crossed) be more intuitive. + * @param {string} to + * @param {string} base + * @return {string} + */ +const resolve = (to, base) => { + // /foo/bar, /baz/qux => /foo/bar + if (to.startsWith("/")) return to; + + const [toPathname, toQuery] = to.split("?"); + const [basePathname] = base.split("?"); + const toSegments = segmentize(toPathname); + const baseSegments = segmentize(basePathname); + + // ?a=b, /users?b=c => /users?a=b + if (toSegments[0] === "") return addQuery(basePathname, toQuery); + + // profile, /users/789 => /users/789/profile + + if (!toSegments[0].startsWith(".")) { + const pathname = baseSegments.concat(toSegments).join("/"); + return addQuery((basePathname === "/" ? "" : "/") + pathname, toQuery); + } + + // ./ , /users/123 => /users/123 + // ../ , /users/123 => /users + // ../.. , /users/123 => / + // ../../one, /a/b/c/d => /a/b/one + // .././one , /a/b/c/d => /a/b/c/one + const allSegments = baseSegments.concat(toSegments); + const segments = []; + + allSegments.forEach((segment) => { + if (segment === "..") segments.pop(); + else if (segment !== ".") segments.push(segment); + }); + + return addQuery("/" + segments.join("/"), toQuery); +}; +/** + * Combines the `basepath` and the `path` into one path. + * @param {string} basepath + * @param {string} path + */ +const combinePaths = (basepath, path) => + `${stripSlashes( + path === "/" + ? basepath + : `${stripSlashes(basepath)}/${stripSlashes(path)}` + )}/`; +/** + * Decides whether a given `event` should result in a navigation or not. + * @param {object} event + */ +const shouldNavigate = (event) => + !event.defaultPrevented && + event.button === 0 && + !(event.metaKey || event.altKey || event.ctrlKey || event.shiftKey); + +// svelte seems to kill anchor.host value in ie11, so fall back to checking href +const hostMatches = (anchor) => { + const host = location.host; + return ( + anchor.host === host || + anchor.href.indexOf(`https://${host}`) === 0 || + anchor.href.indexOf(`http://${host}`) === 0 + ); +}; + +const canUseDOM = () => + typeof window !== "undefined" && + "document" in window && + "location" in window; + +export { + stripSlashes, + pick, + resolve, + combinePaths, + shouldNavigate, + hostMatches, + canUseDOM, +}; diff --git a/vendor/svelte-routing/types/Link.d.ts b/vendor/svelte-routing/types/Link.d.ts new file mode 100644 index 0000000..19bce0c --- /dev/null +++ b/vendor/svelte-routing/types/Link.d.ts @@ -0,0 +1,24 @@ +import { SvelteComponent } from "svelte"; +import { HTMLAnchorAttributes } from "svelte/elements"; +import { RouteLocation } from "./Route"; + +type LinkProps = { + to: string; + replace?: boolean; + preserveScroll?: boolean; + state?: { + [k in string | number]: unknown; + }; + getProps?: (linkParams: GetPropsParams) => Record; +}; + +type GetPropsParams = { + location: RouteLocation; + href: string; + isPartiallyCurrent: boolean; + isCurrent: boolean; +}; + +export class Link extends SvelteComponent< + Omit +> {} diff --git a/vendor/svelte-routing/types/Route.d.ts b/vendor/svelte-routing/types/Route.d.ts new file mode 100644 index 0000000..d464a89 --- /dev/null +++ b/vendor/svelte-routing/types/Route.d.ts @@ -0,0 +1,37 @@ +import { SvelteComponent } from "svelte"; + +type AsyncSvelteComponent = () => Promise<{ + default: typeof SvelteComponent; +}>; + +type RouteProps = { + path?: string; + component?: typeof SvelteComponent | AsyncSvelteComponent; + [additionalProp: string]: unknown; +}; + +type RouteSlots = { + default: { + location: RouteLocation; + params: RouteParams; + }; +}; + +type RouteLocation = { + pathname: string; + search: string; + hash?: string; + state: { + [k in string | number]: unknown; + }; +}; + +type RouteParams = { + [param: string]: string; +}; + +export class Route extends SvelteComponent< + RouteProps, + Record, + RouteSlots +> {} diff --git a/vendor/svelte-routing/types/Router.d.ts b/vendor/svelte-routing/types/Router.d.ts new file mode 100644 index 0000000..43a144c --- /dev/null +++ b/vendor/svelte-routing/types/Router.d.ts @@ -0,0 +1,20 @@ +import { SvelteComponent } from "svelte"; + +type Viewtransition = { + fn?: any; + delay?: number; + duration?: number; + x?: number; + y?: number; + opacity?: number; + easing?: any; + css?: (t: number) => string; +}; + +type RouterProps = { + basepath?: string; + url?: string; + viewtransition?: (direction?: string) => Viewtransition; +}; + +export class Router extends SvelteComponent {} diff --git a/vendor/svelte-routing/types/actions.d.ts b/vendor/svelte-routing/types/actions.d.ts new file mode 100644 index 0000000..3aa8903 --- /dev/null +++ b/vendor/svelte-routing/types/actions.d.ts @@ -0,0 +1,2 @@ +export const link: (node: Element) => { destroy(): void }; +export const links: (node: Element) => { destroy(): void }; diff --git a/vendor/svelte-routing/types/ambient.d.ts b/vendor/svelte-routing/types/ambient.d.ts new file mode 100644 index 0000000..f6cca8e --- /dev/null +++ b/vendor/svelte-routing/types/ambient.d.ts @@ -0,0 +1,38 @@ +declare module "svelte-routing/src/history" { + const getLocation: ( + source: typeof window + ) => Location & { state: any; key: string }; + + type Listener = (params: { + location: ReturnType; + action: "POP" | "PUSH"; + }) => void; + + export const createHistory: (source: typeof window) => { + readonly location: ReturnType; + listen: (listener: Listener) => () => void; + navigate: ( + to?: string | null, + options?: { replace: boolean; preserveScroll: boolean; state: any } + ) => void; + }; + + type StackItem = { pathname: string; search: string }; + + export const createMemorySource: (initialPathname?: string) => { + readonly location: StackItem; + // These functions seem to have no implimentation + // addEventListener: typeof window.addEventListener + // removeEventListener: typeof window.removeEventListener + history: { + readonly entries: StackItem[]; + readonly index: number; + readonly state: any; + pushState: (state: any, _: unknown, uri: string) => void; + replaceState: (state: any, _: unknown, uri: string) => void; + }; + }; + + export const globalHistory: ReturnType; + export const navigate: ReturnType["navigate"]; +} diff --git a/vendor/svelte-routing/types/contexts.d.ts b/vendor/svelte-routing/types/contexts.d.ts new file mode 100644 index 0000000..9f015ad --- /dev/null +++ b/vendor/svelte-routing/types/contexts.d.ts @@ -0,0 +1,11 @@ +import { readable } from "svelte/store"; +import { RouteLocation } from "./Route"; +import { RouterProps } from "./Router"; + +type LOCATION = RouteLocation; +type ROUTER = RouterProps; +type HISTORY = Record; + +export const useLocation: () => ReturnType>; +export const useRouter: () => ReturnType>; +export const useHistory: () => ReturnType>; diff --git a/vendor/svelte-routing/types/functions.d.ts b/vendor/svelte-routing/types/functions.d.ts new file mode 100644 index 0000000..38e14ec --- /dev/null +++ b/vendor/svelte-routing/types/functions.d.ts @@ -0,0 +1,14 @@ +export const navigate: ( + to: string, + { + replace, + state, + preserveScroll, + }?: { + replace?: boolean; + state?: { + [k in string | number]: unknown; + }; + preserveScroll?: boolean; + } +) => void; diff --git a/vendor/svelte-routing/types/index.d.ts b/vendor/svelte-routing/types/index.d.ts new file mode 100644 index 0000000..3909c9d --- /dev/null +++ b/vendor/svelte-routing/types/index.d.ts @@ -0,0 +1,8 @@ +/// + +export { Link } from "./Link"; +export { Route } from "./Route"; +export { Router } from "./Router"; +export { link, links } from "./actions"; +export * from "./contexts"; +export { navigate } from "./functions"; diff --git a/yarn.lock b/yarn.lock index 5b8f6f9..4bfa336 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1508,6 +1508,32 @@ __metadata: languageName: node linkType: hard +"@floating-ui/core@npm:^1.5.0, @floating-ui/core@npm:^1.6.0": + version: 1.6.0 + resolution: "@floating-ui/core@npm:1.6.0" + dependencies: + "@floating-ui/utils": ^0.2.1 + checksum: 2e25c53b0c124c5c9577972f8ae21d081f2f7895e6695836a53074463e8c65b47722744d6d2b5a993164936da006a268bcfe87fe68fd24dc235b1cb86bed3127 + languageName: node + linkType: hard + +"@floating-ui/dom@npm:^1.5.3": + version: 1.6.1 + resolution: "@floating-ui/dom@npm:1.6.1" + dependencies: + "@floating-ui/core": ^1.6.0 + "@floating-ui/utils": ^0.2.1 + checksum: 5565e4dee612bab62950913c311d75d3f773bd1d9dc437f7e33b46340f32ec565733c995c6185381adaf64e627df3c79901d0a9d555f58c02509d0764bceb57d + languageName: node + linkType: hard + +"@floating-ui/utils@npm:^0.2.1": + version: 0.2.1 + resolution: "@floating-ui/utils@npm:0.2.1" + checksum: 9ed4380653c7c217cd6f66ae51f20fdce433730dbc77f95b5abfb5a808f5fdb029c6ae249b4e0490a816f2453aa6e586d9a873cd157fdba4690f65628efc6e06 + languageName: node + linkType: hard + "@isaacs/cliui@npm:^8.0.2": version: 8.0.2 resolution: "@isaacs/cliui@npm:8.0.2" @@ -2918,6 +2944,25 @@ __metadata: languageName: node linkType: hard +"fluent-svelte@npm:^1.6.0": + version: 1.6.0 + resolution: "fluent-svelte@npm:1.6.0" + dependencies: + focus-trap: ^6.7.3 + tabbable: ^5.2.1 + checksum: 1b2ac33343f6e34469e4af9b31e0d446b021b3b2cd64f91b5b010fcf045abdbf7bb5910b9bc4ad90bd5020cf4293e23f625acb01addede3806eb0325514b727d + languageName: node + linkType: hard + +"focus-trap@npm:^6.7.3": + version: 6.9.4 + resolution: "focus-trap@npm:6.9.4" + dependencies: + tabbable: ^5.3.3 + checksum: 0b4cebcc11010bd9397731092bd59a981e838c710c6497374ba70571875a14ab27c0db7d60f36005ec01bdabc3b9cfeda11d30ddf5b8874596dcc95e18913b3b + languageName: node + linkType: hard + "follow-redirects@npm:^1.0.0, follow-redirects@npm:^1.14.0": version: 1.15.3 resolution: "follow-redirects@npm:1.15.3" @@ -4649,6 +4694,13 @@ __metadata: languageName: node linkType: hard +"ssr-window@npm:^4.0.2": + version: 4.0.2 + resolution: "ssr-window@npm:4.0.2" + checksum: df182600927f4f3225224cf8c02338ea637c9750519505bbfb9a9236741a2a7ec088386fb948bca7b447b8303d9109e7dc7672e3de041c79ac2a0e03665af7d2 + languageName: node + linkType: hard + "ssri@npm:^10.0.0": version: 10.0.5 resolution: "ssri@npm:10.0.5" @@ -4792,6 +4844,16 @@ __metadata: languageName: node linkType: hard +"svelte-floating-ui@npm:1.5.8": + version: 1.5.8 + resolution: "svelte-floating-ui@npm:1.5.8" + dependencies: + "@floating-ui/core": ^1.5.0 + "@floating-ui/dom": ^1.5.3 + checksum: f35ec8828d41bf54f92bde43b897a49ab7ac0907d976e8379c6e55186177663e353ce260bd56f4f44713174c04d3a6f5b9dcd04520066e607e7a6eeffcc07724 + languageName: node + linkType: hard + "svelte-hmr@npm:^0.15.3": version: 0.15.3 resolution: "svelte-hmr@npm:0.15.3" @@ -4857,10 +4919,12 @@ __metadata: languageName: node linkType: hard -"svelte-routing@npm:^2.6.0": - version: 2.10.0 - resolution: "svelte-routing@npm:2.10.0" - checksum: d9b2b0264548105bacd97646ce7dbc303746a3e1c6b413754c89e7e7be9b4243e046fd647f03daf52cd43f4374e0ee9c39537014dee9f8c459842d52b9e13ff2 +"svelte-select@npm:^5.7.0": + version: 5.8.3 + resolution: "svelte-select@npm:5.8.3" + dependencies: + svelte-floating-ui: 1.5.8 + checksum: f3cf89f2214bad360352c2ca18c64abbb6a35ab69ab5bc3f28a60f43762b09847105e2794462019f540734c02cc677a25679107e29a36d7b42cbc1efd61bc2ee languageName: node linkType: hard @@ -4885,6 +4949,22 @@ __metadata: languageName: node linkType: hard +"swiper@npm:^9.2.0": + version: 9.4.1 + resolution: "swiper@npm:9.4.1" + dependencies: + ssr-window: ^4.0.2 + checksum: 1180b3b766f25cbe636fafbb56adbddf8a240077c504a335a62d1773f4452df1bd9ca09bccfe86478c3b9401879c4e8f7ed3824e74299f8b48953e8fc7f08bc3 + languageName: node + linkType: hard + +"tabbable@npm:^5.2.1, tabbable@npm:^5.3.3": + version: 5.3.3 + resolution: "tabbable@npm:5.3.3" + checksum: 1aa56e1bb617cc10616c407f4e756f0607f3e2d30f9803664d70b85db037ca27e75918ed1c71443f3dc902e21dc9f991ce4b52d63a538c9b69b3218d3babcd70 + languageName: node + linkType: hard + "tar@npm:^6.1.11, tar@npm:^6.1.2": version: 6.2.0 resolution: "tar@npm:6.2.0" @@ -4916,6 +4996,7 @@ __metadata: core-js: 3.33.2 esbuild: ^0.19.5 esbuild-svelte: ^0.8.0 + fluent-svelte: ^1.6.0 http-proxy-middleware: ^2.0.6 less: ^4.2.0 morgan: ^1.10.0 @@ -4929,7 +5010,8 @@ __metadata: svelte-hmr: ^0.15.3 svelte-preprocess: ^5.1.0 svelte-preprocess-esbuild: ^3.0.1 - svelte-routing: ^2.6.0 + svelte-select: ^5.7.0 + swiper: ^9.2.0 tslib: ^2.6.2 typescript: ^5.2.2 languageName: unknown