diff --git a/.env.example b/.env.example index 65a6f856..98799402 100644 --- a/.env.example +++ b/.env.example @@ -9,3 +9,7 @@ BASE_URL=http://quickstart-druxtsite.ddev.site # OAuth consumer (simple_oauth Consumer) client ID. # Written automatically by the setup / provision step. OAUTH_CLIENT_ID= + +# Optional. Turns on POST /_druxt/cache/clear, so Drupal can clear the Nuxt +# server's cache when content changes; send it in an X-Druxt-Secret header. +DRUXT_CACHE_SECRET= diff --git a/README.md b/README.md index 8d13962c..0a77d248 100644 --- a/README.md +++ b/README.md @@ -224,6 +224,19 @@ Your environment contains a pre-installed, pre-configured and running instance o In a Development Container (VS Code, Codespaces, DevPod), forwarded ports are accessible via your editor's **Ports** panel, or Codespaces' own URL pattern for forwarded ports. +### Caching + +`npm run start` serves a production build, which keeps the JSON:API index and menus for 60 seconds, the page cache max-age Drupal is installed with. Displays changed in Drupal show after the next cache clear, without a rebuild. `npm run dev` caches nothing. + +A site installed before this setting keeps its old max-age, which is 0 on a default Drupal install, and the server cache keeps nothing. Set it once: + +```bash +npm run drush -- config:set system.performance cache.page.max_age 60 -y +npm run drush -- cache:rebuild +``` + +To clear the cache when content changes, set `DRUXT_CACHE_SECRET` in `.env` and have Drupal send `POST /_druxt/cache/clear` with the secret in an `X-Druxt-Secret` header. The [druxt README](https://github.com/druxt/druxt.js/tree/HEAD/packages/druxt#clearing-from-drupal-with-purge) shows the Purge setup. + ## Services | Port | Service | diff --git a/drupal/.ddev/commands/web/drupal-install b/drupal/.ddev/commands/web/drupal-install index 1eb7433f..12673823 100755 --- a/drupal/.ddev/commands/web/drupal-install +++ b/drupal/.ddev/commands/web/drupal-install @@ -49,6 +49,9 @@ drush -r "$DRUPAL_ROOT" -y pm:enable druxt # Allow the anonymous user read only access to required Druxt resources. drush -r "$DRUPAL_ROOT" role:perm:add anonymous "access druxt resources" +# Druxt's server cache keeps anonymous responses only as long as this allows. +drush -r "$DRUPAL_ROOT" -y config:set system.performance cache.page.max_age 60 + # Enable the Simple OAuth module for authentication. drush -r "$DRUPAL_ROOT" -y pm:enable simple_oauth diff --git a/drupal/.devtools/provision b/drupal/.devtools/provision index 6aae2873..5a80e0f6 100755 --- a/drupal/.devtools/provision +++ b/drupal/.devtools/provision @@ -91,7 +91,9 @@ PASS('Content types applied.'); TASK('Enabling the druxt module.'); drush('pm:enable druxt'); drush('role:perm:add anonymous %s', 'access druxt resources'); -PASS('druxt enabled; anonymous can access Druxt resources.'); +// Druxt's server cache keeps anonymous responses only as long as this allows. +drush('config:set system.performance cache.page.max_age %s', '60'); +PASS('druxt enabled; anonymous can access Druxt resources, cached for 60 seconds.'); TASK('Enabling and configuring simple_oauth.'); drush('pm:enable simple_oauth'); diff --git a/drupal/web/sites/default/services.yml b/drupal/web/sites/default/services.yml index 8c916c97..d6d69b48 100644 --- a/drupal/web/sites/default/services.yml +++ b/drupal/web/sites/default/services.yml @@ -186,5 +186,8 @@ parameters: exposedHeaders: false # Sets the Access-Control-Max-Age header. maxAge: false - # Sets the Access-Control-Allow-Credentials header. - supportsCredentials: true + # Sets the Access-Control-Allow-Credentials header. Off, as sign-in uses + # OAuth bearer tokens. With `*` as the allowed origin, turning it on makes + # every response vary by Origin, and Druxt's server cache keeps none of + # them; a single named origin can have it on and still be cached. + supportsCredentials: false diff --git a/nuxt/components/druxt/site/Olivero.vue b/nuxt/components/druxt/site/Olivero.vue index ac429d43..dc83c908 100644 --- a/nuxt/components/druxt/site/Olivero.vue +++ b/nuxt/components/druxt/site/Olivero.vue @@ -1,31 +1,58 @@ diff --git a/nuxt/cypress/e2e/content.cy.js b/nuxt/cypress/e2e/content.cy.js index 4938ec52..ef316f1e 100644 --- a/nuxt/cypress/e2e/content.cy.js +++ b/nuxt/cypress/e2e/content.cy.js @@ -40,7 +40,7 @@ it('Article page', () => { // Expect the entity's body to render inside the page's content region - // proof that a real Drupal entity survives the full JSON:API -> // DruxtRouter -> DruxtEntity round trip. - cy.get('div[blocks][name="content"]') + cy.get('.region--content') .should('exist') .should('contain.text', 'Seeded by .devtools/seed-test-content') }) diff --git a/nuxt/cypress/e2e/homepage.cy.js b/nuxt/cypress/e2e/homepage.cy.js index 4e54c56a..b215cb54 100644 --- a/nuxt/cypress/e2e/homepage.cy.js +++ b/nuxt/cypress/e2e/homepage.cy.js @@ -5,16 +5,16 @@ it('Homepage', () => { cy.visit('/') // Expect primary menu. - cy.get('div[blocks][name="primary_menu"]').should('exist') + cy.get('.region--primary-menu').should('exist') .find('li').should('have.length', 1) .first().should('contain.text', 'Home') // Expect secondary menu. - cy.get('div[blocks][name="secondary_menu"]').should('exist') + cy.get('.region--secondary-menu').should('exist') .find('li').should('have.length', 1) .first().should('contain.text', 'Log in') // Expect empty frontpage in content block. - cy.get('div[blocks][name="content"]').should('exist') + cy.get('.region--content').should('exist') .should('contain.text', 'No front page content has been created yet.') }) diff --git a/nuxt/nuxt.config.js b/nuxt/nuxt.config.js index 63022e43..33d91794 100644 --- a/nuxt/nuxt.config.js +++ b/nuxt/nuxt.config.js @@ -81,6 +81,16 @@ export default { // Set the JSON:API endpoint, `/jsonapi` by default. // endpoint: '/jsonapi' + // Server cache; https://druxtjs.org/modules/druxt + // In production the server keeps the JSON:API index and menus for as long + // as Drupal's page cache max-age allows. It is off under `nuxt dev`, and + // `cache: false` turns it off everywhere. + cache: { + // Turns on `POST /_druxt/cache/clear`, for Drupal to call when content + // changes. Send the secret in an `X-Druxt-Secret` header. + secret: process.env.DRUXT_CACHE_SECRET + }, + // DruxtEntity module settings; https://druxtjs.org/modules/entity entity: { // Disable the deprecated DruxtField components. @@ -123,6 +133,14 @@ export default { // wildcard: false }, + // DruxtSchema module settings; https://druxtjs.org/modules/schema + schema: { + // Regenerate a schema on the Nuxt server when a page first needs it, so + // a display changed in Drupal shows without a rebuild. Held until the + // next cache clear; under `nuxt dev` every request regenerates. + refresh: true + }, + // DruxtSite module settings; https://druxtjs.org/modules/site site: { // Disable the DruxtSite default layout. diff --git a/nuxt/package-lock.json b/nuxt/package-lock.json index d8a5813f..6d7aaa71 100644 --- a/nuxt/package-lock.json +++ b/nuxt/package-lock.json @@ -10,8 +10,8 @@ "dependencies": { "core-js": "3.50.0", "dotenv": "^17.4.2", - "druxt-auth": "^0.4.0", - "druxt-site": "^0.14.3", + "druxt-auth": "^0.5.1", + "druxt-site": "^0.15.0", "nuxt": "2.15.8", "vue-server-renderer": "^2.7.14", "vue-template-compiler": "^2.7.14" @@ -8934,8 +8934,7 @@ "node_modules/@vue/devtools-api": { "version": "6.6.4", "resolved": "https://registry.npmjs.org/@vue/devtools-api/-/devtools-api-6.6.4.tgz", - "integrity": "sha512-sGhTPMuXqZ1rVOk32RylztWkfXTRhuS7vgAKv0zjqk8gbsHkJ7xfFf+jbySxt7tWObEJwyKaHMikV/WGDiQm8g==", - "license": "MIT" + "integrity": "sha512-sGhTPMuXqZ1rVOk32RylztWkfXTRhuS7vgAKv0zjqk8gbsHkJ7xfFf+jbySxt7tWObEJwyKaHMikV/WGDiQm8g==" }, "node_modules/@vue/reactivity-transform": { "version": "3.2.36", @@ -9784,12 +9783,13 @@ "license": "MIT" }, "node_modules/axios": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/axios/-/axios-0.27.2.tgz", - "integrity": "sha512-t+yRIyySRTp/wua5xEr+z1q60QmLq8ABsS5O9Me1AsE5dfKqgnCFzwiCZZ/cGNd1lq4/7akDWMxdhVlucjmnOQ==", + "version": "0.34.0", + "resolved": "https://registry.npmjs.org/axios/-/axios-0.34.0.tgz", + "integrity": "sha512-CkOmqy7BaT4VC9+wRUmSM3LVwCkKK3UYc7koEqIHWRpOTJypwdNctaVOgnOjhHP3599Ubq2K8KqYwfC7c8NdPQ==", "dependencies": { - "follow-redirects": "^1.14.9", - "form-data": "^4.0.0" + "follow-redirects": "^1.15.4", + "form-data": "^4.0.4", + "proxy-from-env": "^1.1.0" } }, "node_modules/axios-retry": { @@ -9802,18 +9802,25 @@ } }, "node_modules/axios/node_modules/form-data": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", - "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.6.tgz", + "integrity": "sha512-vKatAh4SlVfgbv+YtmhiRjhEMJsYpsG1Y2rMQtR+SVSbytsSD1YGzDIcrAJmdFec88u/+VoGmxnl+80gL1tRCQ==", "dependencies": { "asynckit": "^0.4.0", "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" + "es-set-tostringtag": "^2.1.0", + "hasown": "^2.0.4", + "mime-types": "^2.1.35" }, "engines": { "node": ">= 6" } }, + "node_modules/axios/node_modules/proxy-from-env": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==" + }, "node_modules/babel-code-frame": { "version": "6.26.0", "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz", @@ -11386,7 +11393,6 @@ "version": "0.0.2", "resolved": "https://registry.npmjs.org/charenc/-/charenc-0.0.2.tgz", "integrity": "sha512-yrLQ/yVUFXkzg7EDQsPieE/53+0RlaWTs+wBrvW36cyilJ2SaDWfl4Yj7MtLTXleV9uEKefbAGUPv2/iWSooRA==", - "license": "BSD-3-Clause", "engines": { "node": "*" } @@ -12544,7 +12550,6 @@ "version": "0.0.2", "resolved": "https://registry.npmjs.org/crypt/-/crypt-0.0.2.tgz", "integrity": "sha512-mCxBlsHFYh9C+HVpiEacem8FEBnMXgU9gy4zmNC+SXAZNB/1idgp/aulFJ4FgCi7GPEVbfyng092GqL2k2rmow==", - "license": "BSD-3-Clause", "engines": { "node": "*" } @@ -14197,463 +14202,176 @@ "version": "2.3.2", "resolved": "https://registry.npmjs.org/drupal-jsonapi-params/-/drupal-jsonapi-params-2.3.2.tgz", "integrity": "sha512-2flOOPT8E8IhxzD4dW8tDToOkzTEzsfbY8k4Nbu11JshRdaJl1jL2lmbB7QLZuMnG77HhjXjEgF8Rw7j/5yB5g==", - "license": "ISC", "dependencies": { "qs": "^6.10.3" } }, "node_modules/druxt": { - "version": "0.22.0", - "resolved": "https://registry.npmjs.org/druxt/-/druxt-0.22.0.tgz", - "integrity": "sha512-2q6GCAxEFSZbgFRt5zcz/Pp1xatkyPN8n2tc51+ESPceihr+buATuMdtR/KBEpsgDiUaHOWFMxFYW3mM6XP6IA==", - "license": "MIT", + "version": "0.25.0", + "resolved": "https://registry.npmjs.org/druxt/-/druxt-0.25.0.tgz", + "integrity": "sha512-EEevKpqLCKZVRV+LNvi+PpPI3F2RP5BYE3a28DsuYiH2sBXeLTRC8t0bDuy3bXpvlWih2r/Wn5+IngLfytSZpA==", "dependencies": { "@nuxtjs/axios": "^5.13.6", "@nuxtjs/proxy": "^2.1.0", - "@vue/devtools-api": "^6.5.0", + "@vue/devtools-api": "^6.6.4", "chalk": "^4.1.2", + "consola": "^2.15.3", "deepmerge": "^4.3.1", - "drupal-jsonapi-params": "^2.2.0", - "express-rate-limit": "^6.7.0", - "launch-editor": "^2.6.0", + "drupal-jsonapi-params": "^2.3.2", + "express-rate-limit": "^7.5.1", + "launch-editor": "^2.14.1", "md5": "^2.3.0", "querystring": "^0.2.1", "scule": "^0.3.2" }, "optionalDependencies": { - "core-js": "^3.31.0", - "vue": "^2.7.14", - "vuex": "^3.6.2" + "core-js": "^3.50.0" }, "peerDependencies": { - "axios": "*", - "consola": "*" + "axios": ">=0.34.0", + "vue": "^2.7.14", + "vuex": "^3.6.2" } }, "node_modules/druxt-auth": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/druxt-auth/-/druxt-auth-0.4.0.tgz", - "integrity": "sha512-WwDj36JLTJvgzkGL5aQQBPA6Ja0FqsxLDx0qLeq72rKLRw+ZkMHUYjG9JQvLH06xyfJr+1co1Ax57bdd1xPbVA==", + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/druxt-auth/-/druxt-auth-0.5.1.tgz", + "integrity": "sha512-wZ9xImioLjeQ6lnuQmFoqdvFmGyxdbRSnNNLBj2+aeI9MPUx9636lu97/j4EeJIZRGR7WG96cjqTyTe+eYU52Q==", "dependencies": { - "@nuxtjs/auth-next": "^5.0.0-1667386184.dfbbb54" + "@nuxtjs/auth-next": "^5.0.0-1667386184.dfbbb54", + "http-proxy-middleware": "^1.0.6" }, "peerDependencies": { - "axios": "^0.27.2", + "axios": ">=0.27.2 <1", "body-parser": "^1.20.2" } }, "node_modules/druxt-blocks": { - "version": "0.17.3", - "resolved": "https://registry.npmjs.org/druxt-blocks/-/druxt-blocks-0.17.3.tgz", - "integrity": "sha512-O3dMItSmJS3XEXjTOT85AJ43dSwuVqrk6L3ay7GwruLBDZ+yhyDGPNibSxOMBlHhK7A8VhnEHgZn8l/NNpXC6Q==", - "license": "MIT", - "dependencies": { - "axios": "0.27.2", - "drupal-jsonapi-params": "^2.2.0", - "druxt": "^0.23.0", - "druxt-entity": "^0.28.1", - "druxt-router": "^0.30.0" - }, - "optionalDependencies": { - "vue": "^2.7.14", - "vuex": "^3.6.2" - } - }, - "node_modules/druxt-blocks/node_modules/druxt": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/druxt/-/druxt-0.23.0.tgz", - "integrity": "sha512-KPgLBJnubhaCiFyX4+Cekn58BZuD0lxMPu7476PnlfxuGXNP1XVm8WN16DrjJMRoUpZsLVZqIEGzCWjQrQ9naw==", - "license": "MIT", + "version": "0.18.0", + "resolved": "https://registry.npmjs.org/druxt-blocks/-/druxt-blocks-0.18.0.tgz", + "integrity": "sha512-qeOm8kfiS78a/6AaOnreao7zay3gEJDdL1IQD3WHLf+F2oBcN12o/2qp/dssYZriqtGCR5KP+NA09TMJW9HDsA==", "dependencies": { - "@nuxtjs/axios": "^5.13.6", - "@nuxtjs/proxy": "^2.1.0", - "@vue/devtools-api": "^6.5.0", - "chalk": "^4.1.2", - "deepmerge": "^4.3.1", - "drupal-jsonapi-params": "^2.2.0", - "express-rate-limit": "^6.7.0", - "launch-editor": "^2.6.0", - "md5": "^2.3.0", - "querystring": "^0.2.1", - "scule": "^0.3.2" - }, - "optionalDependencies": { - "core-js": "^3.31.0", - "vue": "^2.7.14", - "vuex": "^3.6.2" + "axios": "0.34.0", + "drupal-jsonapi-params": "^2.3.2", + "druxt": "^0.25.0" }, "peerDependencies": { - "axios": "*", - "consola": "*" - } - }, - "node_modules/druxt-blocks/node_modules/druxt-router": { - "version": "0.30.0", - "resolved": "https://registry.npmjs.org/druxt-router/-/druxt-router-0.30.0.tgz", - "integrity": "sha512-MuvQFwEi/Yq+UrNX0a7tKUUKBeU9VVJzjt86rDVU1yAlJexrrpMRQJSYkW/sFZKAp7OAS6irb0hMSZWe2H9EKg==", - "license": "MIT", - "dependencies": { - "druxt": "^0.23.0", - "url-parse": "^1.5.10" - }, - "optionalDependencies": { "vue": "^2.7.14", "vuex": "^3.6.2" - }, - "peerDependencies": { - "drupal-jsonapi-params": "*" } }, - "node_modules/druxt-blocks/node_modules/scule": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/scule/-/scule-0.3.2.tgz", - "integrity": "sha512-zIvPdjOH8fv8CgrPT5eqtxHQXmPNnV/vHJYffZhE43KZkvULvpCTvOt1HPlFaCZx287INL9qaqrZg34e8NgI4g==", - "license": "MIT" - }, "node_modules/druxt-breadcrumb": { - "version": "0.17.2", - "resolved": "https://registry.npmjs.org/druxt-breadcrumb/-/druxt-breadcrumb-0.17.2.tgz", - "integrity": "sha512-aDXlvasWEa5v8/EVWrrC4qAi4bPmDsjdiDmKR3nuCRM4fkTyw1wEGFeu8d5raaQQj70umR1hrtcAhGyq3BnstQ==", - "license": "MIT", - "dependencies": { - "druxt": "^0.23.0", - "druxt-blocks": "^0.17.3", - "druxt-router": "^0.30.0" - }, - "optionalDependencies": { - "vue": "^2.7.14", - "vuex": "^3.6.2" - } - }, - "node_modules/druxt-breadcrumb/node_modules/druxt": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/druxt/-/druxt-0.23.0.tgz", - "integrity": "sha512-KPgLBJnubhaCiFyX4+Cekn58BZuD0lxMPu7476PnlfxuGXNP1XVm8WN16DrjJMRoUpZsLVZqIEGzCWjQrQ9naw==", - "license": "MIT", + "version": "0.18.0", + "resolved": "https://registry.npmjs.org/druxt-breadcrumb/-/druxt-breadcrumb-0.18.0.tgz", + "integrity": "sha512-xquJskZP/aTdmdCIEsPoZozQqfUAULIORUksqZgB8YCa0ZeucEfyTxKLmqRKed4m5Bg4cyeY+GtJR3rbLVKvSQ==", "dependencies": { - "@nuxtjs/axios": "^5.13.6", - "@nuxtjs/proxy": "^2.1.0", - "@vue/devtools-api": "^6.5.0", - "chalk": "^4.1.2", - "deepmerge": "^4.3.1", - "drupal-jsonapi-params": "^2.2.0", - "express-rate-limit": "^6.7.0", - "launch-editor": "^2.6.0", - "md5": "^2.3.0", - "querystring": "^0.2.1", - "scule": "^0.3.2" - }, - "optionalDependencies": { - "core-js": "^3.31.0", - "vue": "^2.7.14", - "vuex": "^3.6.2" + "druxt": "^0.25.0", + "druxt-blocks": "^0.18.0", + "druxt-router": "^0.32.0" }, "peerDependencies": { - "axios": "*", - "consola": "*" - } - }, - "node_modules/druxt-breadcrumb/node_modules/druxt-router": { - "version": "0.30.0", - "resolved": "https://registry.npmjs.org/druxt-router/-/druxt-router-0.30.0.tgz", - "integrity": "sha512-MuvQFwEi/Yq+UrNX0a7tKUUKBeU9VVJzjt86rDVU1yAlJexrrpMRQJSYkW/sFZKAp7OAS6irb0hMSZWe2H9EKg==", - "license": "MIT", - "dependencies": { - "druxt": "^0.23.0", - "url-parse": "^1.5.10" - }, - "optionalDependencies": { "vue": "^2.7.14", "vuex": "^3.6.2" - }, - "peerDependencies": { - "drupal-jsonapi-params": "*" } }, - "node_modules/druxt-breadcrumb/node_modules/scule": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/scule/-/scule-0.3.2.tgz", - "integrity": "sha512-zIvPdjOH8fv8CgrPT5eqtxHQXmPNnV/vHJYffZhE43KZkvULvpCTvOt1HPlFaCZx287INL9qaqrZg34e8NgI4g==", - "license": "MIT" - }, "node_modules/druxt-entity": { - "version": "0.28.1", - "resolved": "https://registry.npmjs.org/druxt-entity/-/druxt-entity-0.28.1.tgz", - "integrity": "sha512-CQf/ZYuPP1XmN1o+2t2Qzs0zmzAXS3faYyeDronBlX8ckMARjVp71Oe/fz9pQLP0bAcUnAO6F4H9XxGYAbFRMg==", - "license": "MIT", + "version": "0.29.0", + "resolved": "https://registry.npmjs.org/druxt-entity/-/druxt-entity-0.29.0.tgz", + "integrity": "sha512-I09QIRa7DiInuoBqLQxps+n4KXQteNnDSftD7gB2aIlwfmTj8yZJgxDp1XHXn//BnjBOB6plJHVMOq9brT8Jow==", "dependencies": { "deepmerge": "^4.3.1", - "drupal-jsonapi-params": "^2.2.0", - "druxt": "^0.23.0", - "druxt-router": "^0.30.0", - "druxt-schema": "^0.11.3" - } - }, - "node_modules/druxt-entity/node_modules/druxt": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/druxt/-/druxt-0.23.0.tgz", - "integrity": "sha512-KPgLBJnubhaCiFyX4+Cekn58BZuD0lxMPu7476PnlfxuGXNP1XVm8WN16DrjJMRoUpZsLVZqIEGzCWjQrQ9naw==", - "license": "MIT", - "dependencies": { - "@nuxtjs/axios": "^5.13.6", - "@nuxtjs/proxy": "^2.1.0", - "@vue/devtools-api": "^6.5.0", - "chalk": "^4.1.2", - "deepmerge": "^4.3.1", - "drupal-jsonapi-params": "^2.2.0", - "express-rate-limit": "^6.7.0", - "launch-editor": "^2.6.0", - "md5": "^2.3.0", - "querystring": "^0.2.1", - "scule": "^0.3.2" - }, - "optionalDependencies": { - "core-js": "^3.31.0", - "vue": "^2.7.14", - "vuex": "^3.6.2" - }, - "peerDependencies": { - "axios": "*", - "consola": "*" + "drupal-jsonapi-params": "^2.3.2", + "druxt": "^0.25.0", + "druxt-router": "^0.32.0", + "druxt-schema": "^0.12.0" } }, - "node_modules/druxt-entity/node_modules/druxt-router": { - "version": "0.30.0", - "resolved": "https://registry.npmjs.org/druxt-router/-/druxt-router-0.30.0.tgz", - "integrity": "sha512-MuvQFwEi/Yq+UrNX0a7tKUUKBeU9VVJzjt86rDVU1yAlJexrrpMRQJSYkW/sFZKAp7OAS6irb0hMSZWe2H9EKg==", - "license": "MIT", - "dependencies": { - "druxt": "^0.23.0", - "url-parse": "^1.5.10" - }, - "optionalDependencies": { - "vue": "^2.7.14", - "vuex": "^3.6.2" - }, - "peerDependencies": { - "drupal-jsonapi-params": "*" - } - }, - "node_modules/druxt-entity/node_modules/scule": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/scule/-/scule-0.3.2.tgz", - "integrity": "sha512-zIvPdjOH8fv8CgrPT5eqtxHQXmPNnV/vHJYffZhE43KZkvULvpCTvOt1HPlFaCZx287INL9qaqrZg34e8NgI4g==", - "license": "MIT" - }, "node_modules/druxt-menu": { - "version": "0.21.0", - "resolved": "https://registry.npmjs.org/druxt-menu/-/druxt-menu-0.21.0.tgz", - "integrity": "sha512-hTlH3XGsJdTQPhQ6g/FuztPZfPlOZBcaWLms9wxkFj+RLudcsd4qG4JPqMyOxabQu280/Q0TX+4XG1Rrlt8WiQ==", - "license": "MIT", - "dependencies": { - "deepmerge": "^4.3.1", - "drupal-jsonapi-params": "^2.2.0", - "druxt": "^0.24.0", - "druxt-blocks": "^0.17.1" - }, - "optionalDependencies": { - "vue": "^2.7.14", - "vuex": "^3.6.2" - } - }, - "node_modules/druxt-menu/node_modules/druxt": { - "version": "0.24.0", - "resolved": "https://registry.npmjs.org/druxt/-/druxt-0.24.0.tgz", - "integrity": "sha512-JG2m1ieQJ/dfEodd4253UnjTqtOWjXdirHF8/HNQb0FLwjy4uQkFvyo9SSIBkIDdomMEaGiAszjyc0PYVf8QYg==", - "license": "MIT", + "version": "0.22.0", + "resolved": "https://registry.npmjs.org/druxt-menu/-/druxt-menu-0.22.0.tgz", + "integrity": "sha512-sTcTbqzIuKCiFSyLLruZHVzSdaByH0PBvAMViMkCcQ9IH3gJsUwQ9rrL22pGR4S19TOcb5UVACD98A1tPhXUxg==", "dependencies": { - "@nuxtjs/axios": "^5.13.6", - "@nuxtjs/proxy": "^2.1.0", - "@vue/devtools-api": "^6.5.0", - "chalk": "^4.1.2", "deepmerge": "^4.3.1", - "drupal-jsonapi-params": "^2.2.0", - "express-rate-limit": "^6.7.0", - "launch-editor": "^2.6.0", - "md5": "^2.3.0", - "querystring": "^0.2.1", - "scule": "^0.3.2" + "drupal-jsonapi-params": "^2.3.2", + "druxt": "^0.25.0", + "druxt-blocks": "^0.18.0" }, - "optionalDependencies": { - "core-js": "^3.31.0", + "peerDependencies": { "vue": "^2.7.14", "vuex": "^3.6.2" - }, - "peerDependencies": { - "axios": "*", - "consola": "*" } }, - "node_modules/druxt-menu/node_modules/scule": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/scule/-/scule-0.3.2.tgz", - "integrity": "sha512-zIvPdjOH8fv8CgrPT5eqtxHQXmPNnV/vHJYffZhE43KZkvULvpCTvOt1HPlFaCZx287INL9qaqrZg34e8NgI4g==", - "license": "MIT" - }, "node_modules/druxt-router": { - "version": "0.29.1", - "resolved": "https://registry.npmjs.org/druxt-router/-/druxt-router-0.29.1.tgz", - "integrity": "sha512-qNIKimi5EO9BlnfZLiIN8eHQxYyngprcDQRsPo8nlXrN2/20Iy6tHd8Gs2Jt3J0U+v+bnB+TnSweZTwXdBaH3w==", - "license": "MIT", + "version": "0.32.0", + "resolved": "https://registry.npmjs.org/druxt-router/-/druxt-router-0.32.0.tgz", + "integrity": "sha512-Kn7FltLHwnf/2o/+iK2aTnMvvFquA9AfkDXYP/Rv1XY7/tLkb8TK/rpDVVEliF4VcG36eDJU2eCTdTHyEpQwTA==", "dependencies": { - "druxt": "^0.22.0", + "drupal-jsonapi-params": "^2.3.2", + "druxt": "^0.25.0", "url-parse": "^1.5.10" }, - "optionalDependencies": { + "peerDependencies": { "vue": "^2.7.14", "vuex": "^3.6.2" - }, - "peerDependencies": { - "drupal-jsonapi-params": "*" } }, "node_modules/druxt-schema": { - "version": "0.11.3", - "resolved": "https://registry.npmjs.org/druxt-schema/-/druxt-schema-0.11.3.tgz", - "integrity": "sha512-aObNabCWNQP0bSelVvBRc+eXOP/Tyyc9saZnsNJNGk31M6CFYc5d4Eo9D85f5srgPCpFRzxvkBnN7XUPHiAL6A==", - "license": "MIT", + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/druxt-schema/-/druxt-schema-0.12.0.tgz", + "integrity": "sha512-X08cAn+6L74xMX3ZriEIiJgp53pdZhVtJTsO54vBaepy8XsY0++JpAngxTyyJ/F1KyMYXJbEF54L7ntmkoe2ZA==", "dependencies": { "consola": "^2.15.3", - "drupal-jsonapi-params": "^2.2.0", - "druxt": "^0.23.0" + "drupal-jsonapi-params": "^2.3.2", + "druxt": "^0.25.0" }, - "optionalDependencies": { - "vue": "^2.7.14", - "vuex": "^3.6.2" - } - }, - "node_modules/druxt-schema/node_modules/druxt": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/druxt/-/druxt-0.23.0.tgz", - "integrity": "sha512-KPgLBJnubhaCiFyX4+Cekn58BZuD0lxMPu7476PnlfxuGXNP1XVm8WN16DrjJMRoUpZsLVZqIEGzCWjQrQ9naw==", - "license": "MIT", - "dependencies": { - "@nuxtjs/axios": "^5.13.6", - "@nuxtjs/proxy": "^2.1.0", - "@vue/devtools-api": "^6.5.0", - "chalk": "^4.1.2", - "deepmerge": "^4.3.1", - "drupal-jsonapi-params": "^2.2.0", - "express-rate-limit": "^6.7.0", - "launch-editor": "^2.6.0", - "md5": "^2.3.0", - "querystring": "^0.2.1", - "scule": "^0.3.2" - }, - "optionalDependencies": { - "core-js": "^3.31.0", + "peerDependencies": { "vue": "^2.7.14", "vuex": "^3.6.2" - }, - "peerDependencies": { - "axios": "*", - "consola": "*" } }, - "node_modules/druxt-schema/node_modules/scule": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/scule/-/scule-0.3.2.tgz", - "integrity": "sha512-zIvPdjOH8fv8CgrPT5eqtxHQXmPNnV/vHJYffZhE43KZkvULvpCTvOt1HPlFaCZx287INL9qaqrZg34e8NgI4g==", - "license": "MIT" - }, "node_modules/druxt-site": { - "version": "0.14.3", - "resolved": "https://registry.npmjs.org/druxt-site/-/druxt-site-0.14.3.tgz", - "integrity": "sha512-rQBzxf56maLH8SUA0fSqGd+Sfi9xoSu/Yo7JwrE8XlgFZTs8f/YLduWkcRBS8hLPUdCpfNlqvV1u5pV1FSlZzg==", - "license": "MIT", + "version": "0.15.0", + "resolved": "https://registry.npmjs.org/druxt-site/-/druxt-site-0.15.0.tgz", + "integrity": "sha512-Oj7nWi+g+XuMfMTZ9qteWQHUChZITwMqBK1xOzYQlnh2e80qRXDmKUFXiESpFj/Kjwt0BainarbVBZpViqquyQ==", "dependencies": { - "drupal-jsonapi-params": "^2.2.0", - "druxt": "^0.22.0", - "druxt-blocks": "^0.17.1", - "druxt-breadcrumb": "^0.17.1", - "druxt-entity": "^0.28.0", - "druxt-menu": "^0.21.0", - "druxt-router": "^0.29.1", - "druxt-schema": "^0.11.2", - "druxt-views": "^0.22.0", - "md5": "^2.3.0" + "drupal-jsonapi-params": "^2.3.2", + "druxt": "^0.25.0", + "druxt-blocks": "^0.18.0", + "druxt-breadcrumb": "^0.18.0", + "druxt-entity": "^0.29.0", + "druxt-menu": "^0.22.0", + "druxt-router": "^0.32.0", + "druxt-schema": "^0.12.0", + "druxt-views": "^0.23.0" }, - "optionalDependencies": { + "peerDependencies": { "vue": "^2.7.14", "vuex": "^3.6.2" } }, "node_modules/druxt-views": { - "version": "0.22.2", - "resolved": "https://registry.npmjs.org/druxt-views/-/druxt-views-0.22.2.tgz", - "integrity": "sha512-/nYW+RtPBeHXgcr+mk0J3XR31yeLbmgso2ByoMDfgEaU4qR98/e1G7MR9MapqffuxEDZ7xzYbCZXGMxwXV8Ynw==", - "license": "MIT", - "dependencies": { - "axios": "0.27.2", - "deepmerge": "^4.3.1", - "drupal-jsonapi-params": "^2.2.0", - "druxt": "^0.23.0", - "druxt-blocks": "^0.17.3", - "druxt-entity": "^0.28.1", - "druxt-router": "^0.30.0", - "md5": "^2.3.0" - }, - "optionalDependencies": { - "vue": "^2.7.14", - "vuex": "^3.6.2" - } - }, - "node_modules/druxt-views/node_modules/druxt": { "version": "0.23.0", - "resolved": "https://registry.npmjs.org/druxt/-/druxt-0.23.0.tgz", - "integrity": "sha512-KPgLBJnubhaCiFyX4+Cekn58BZuD0lxMPu7476PnlfxuGXNP1XVm8WN16DrjJMRoUpZsLVZqIEGzCWjQrQ9naw==", - "license": "MIT", + "resolved": "https://registry.npmjs.org/druxt-views/-/druxt-views-0.23.0.tgz", + "integrity": "sha512-yipt2VFk1E9yhRodlsDUllzGaN48F6OMN7qAroBw/t48XKJWAI74rJ9FizAXEjih7yYztCkJNy9RsgJEPQ8kwQ==", "dependencies": { - "@nuxtjs/axios": "^5.13.6", - "@nuxtjs/proxy": "^2.1.0", - "@vue/devtools-api": "^6.5.0", - "chalk": "^4.1.2", + "axios": "0.34.0", "deepmerge": "^4.3.1", - "drupal-jsonapi-params": "^2.2.0", - "express-rate-limit": "^6.7.0", - "launch-editor": "^2.6.0", - "md5": "^2.3.0", - "querystring": "^0.2.1", - "scule": "^0.3.2" - }, - "optionalDependencies": { - "core-js": "^3.31.0", - "vue": "^2.7.14", - "vuex": "^3.6.2" + "drupal-jsonapi-params": "^2.3.2", + "druxt": "^0.25.0", + "druxt-blocks": "^0.18.0", + "druxt-entity": "^0.29.0", + "druxt-router": "^0.32.0", + "md5": "^2.3.0" }, "peerDependencies": { - "axios": "*", - "consola": "*" - } - }, - "node_modules/druxt-views/node_modules/druxt-router": { - "version": "0.30.0", - "resolved": "https://registry.npmjs.org/druxt-router/-/druxt-router-0.30.0.tgz", - "integrity": "sha512-MuvQFwEi/Yq+UrNX0a7tKUUKBeU9VVJzjt86rDVU1yAlJexrrpMRQJSYkW/sFZKAp7OAS6irb0hMSZWe2H9EKg==", - "license": "MIT", - "dependencies": { - "druxt": "^0.23.0", - "url-parse": "^1.5.10" - }, - "optionalDependencies": { "vue": "^2.7.14", "vuex": "^3.6.2" - }, - "peerDependencies": { - "drupal-jsonapi-params": "*" } }, - "node_modules/druxt-views/node_modules/scule": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/scule/-/scule-0.3.2.tgz", - "integrity": "sha512-zIvPdjOH8fv8CgrPT5eqtxHQXmPNnV/vHJYffZhE43KZkvULvpCTvOt1HPlFaCZx287INL9qaqrZg34e8NgI4g==", - "license": "MIT" - }, "node_modules/druxt/node_modules/scule": { "version": "0.3.2", "resolved": "https://registry.npmjs.org/scule/-/scule-0.3.2.tgz", - "integrity": "sha512-zIvPdjOH8fv8CgrPT5eqtxHQXmPNnV/vHJYffZhE43KZkvULvpCTvOt1HPlFaCZx287INL9qaqrZg34e8NgI4g==", - "license": "MIT" + "integrity": "sha512-zIvPdjOH8fv8CgrPT5eqtxHQXmPNnV/vHJYffZhE43KZkvULvpCTvOt1HPlFaCZx287INL9qaqrZg34e8NgI4g==" }, "node_modules/dunder-proto": { "version": "1.0.1", @@ -14993,7 +14711,6 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", - "dev": true, "license": "MIT", "dependencies": { "es-errors": "^1.3.0", @@ -16170,15 +15887,17 @@ } }, "node_modules/express-rate-limit": { - "version": "6.11.2", - "resolved": "https://registry.npmjs.org/express-rate-limit/-/express-rate-limit-6.11.2.tgz", - "integrity": "sha512-a7uwwfNTh1U60ssiIkuLFWHt4hAC5yxlLGU2VP0X4YNlyEDZAqF4tK3GD3NSitVBrCQmQ0++0uOyFOgC2y4DDw==", - "license": "MIT", + "version": "7.5.1", + "resolved": "https://registry.npmjs.org/express-rate-limit/-/express-rate-limit-7.5.1.tgz", + "integrity": "sha512-7iN8iPMDzOMHPUYllBEsQdWVB6fPDMPqwjBaFrgr4Jgr/+okjvzAy+UHlYYL/Vs0OsOrMkwS6PJDkFlJwoxUnw==", "engines": { - "node": ">= 14" + "node": ">= 16" + }, + "funding": { + "url": "https://github.com/sponsors/express-rate-limit" }, "peerDependencies": { - "express": "^4 || ^5" + "express": ">= 4.11" } }, "node_modules/express/node_modules/body-parser": { @@ -21539,12 +21258,12 @@ } }, "node_modules/launch-editor": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/launch-editor/-/launch-editor-2.6.0.tgz", - "integrity": "sha512-JpDCcQnyAAzZZaZ7vEiSqL690w7dAEyLao+KC96zBplnYbJS7TYNjvM3M7y3dGz+v7aIsJk3hllWuc0kWAjyRQ==", + "version": "2.14.2", + "resolved": "https://registry.npmjs.org/launch-editor/-/launch-editor-2.14.2.tgz", + "integrity": "sha512-NHJEb30MGBCkmZXLZwz25t37QR4aY03ZzPYUJXOJaOa92uWwExI9SBQUuIznBYc1xkD7cJNGX7oc3Nl3sq2kQQ==", "dependencies": { - "picocolors": "^1.0.0", - "shell-quote": "^1.7.3" + "picocolors": "^1.1.1", + "shell-quote": "^1.10.0" } }, "node_modules/launch-editor-middleware": { @@ -21555,9 +21274,12 @@ } }, "node_modules/launch-editor/node_modules/shell-quote": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.7.4.tgz", - "integrity": "sha512-8o/QEhSSRb1a5i7TFR0iM4G16Z0vYB2OQVs4G3aAFXjn3T6yEx8AZxy1PgDF7I00LZHYA3WxaSYIf5e5sAX8Rw==", + "version": "1.12.0", + "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.12.0.tgz", + "integrity": "sha512-PcByqNyT/38F2kDNi006HAMRJaULuBzq/FOsw3qdZvX/GA9W/jamDaRskgHjubHiftXK5sIFxLNkvrXUwcof6Q==", + "engines": { + "node": ">= 0.4" + }, "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -22257,7 +21979,6 @@ "version": "2.3.0", "resolved": "https://registry.npmjs.org/md5/-/md5-2.3.0.tgz", "integrity": "sha512-T1GITYmFaKuO91vxyoQMFETst+O71VUPEU3ze5GNzDm0OWdP8v1ziTaAEPUr/3kLsY3Sftgz242A1SetQiDL7g==", - "license": "BSD-3-Clause", "dependencies": { "charenc": "0.0.2", "crypt": "0.0.2", @@ -40195,23 +39916,31 @@ "dev": true }, "axios": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/axios/-/axios-0.27.2.tgz", - "integrity": "sha512-t+yRIyySRTp/wua5xEr+z1q60QmLq8ABsS5O9Me1AsE5dfKqgnCFzwiCZZ/cGNd1lq4/7akDWMxdhVlucjmnOQ==", + "version": "0.34.0", + "resolved": "https://registry.npmjs.org/axios/-/axios-0.34.0.tgz", + "integrity": "sha512-CkOmqy7BaT4VC9+wRUmSM3LVwCkKK3UYc7koEqIHWRpOTJypwdNctaVOgnOjhHP3599Ubq2K8KqYwfC7c8NdPQ==", "requires": { - "follow-redirects": "^1.14.9", - "form-data": "^4.0.0" + "follow-redirects": "^1.15.4", + "form-data": "^4.0.4", + "proxy-from-env": "^1.1.0" }, "dependencies": { "form-data": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", - "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.6.tgz", + "integrity": "sha512-vKatAh4SlVfgbv+YtmhiRjhEMJsYpsG1Y2rMQtR+SVSbytsSD1YGzDIcrAJmdFec88u/+VoGmxnl+80gL1tRCQ==", "requires": { "asynckit": "^0.4.0", "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" + "es-set-tostringtag": "^2.1.0", + "hasown": "^2.0.4", + "mime-types": "^2.1.35" } + }, + "proxy-from-env": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==" } } }, @@ -43539,24 +43268,23 @@ } }, "druxt": { - "version": "0.22.0", - "resolved": "https://registry.npmjs.org/druxt/-/druxt-0.22.0.tgz", - "integrity": "sha512-2q6GCAxEFSZbgFRt5zcz/Pp1xatkyPN8n2tc51+ESPceihr+buATuMdtR/KBEpsgDiUaHOWFMxFYW3mM6XP6IA==", + "version": "0.25.0", + "resolved": "https://registry.npmjs.org/druxt/-/druxt-0.25.0.tgz", + "integrity": "sha512-EEevKpqLCKZVRV+LNvi+PpPI3F2RP5BYE3a28DsuYiH2sBXeLTRC8t0bDuy3bXpvlWih2r/Wn5+IngLfytSZpA==", "requires": { "@nuxtjs/axios": "^5.13.6", "@nuxtjs/proxy": "^2.1.0", - "@vue/devtools-api": "^6.5.0", + "@vue/devtools-api": "^6.6.4", "chalk": "^4.1.2", - "core-js": "^3.31.0", + "consola": "^2.15.3", + "core-js": "^3.50.0", "deepmerge": "^4.3.1", - "drupal-jsonapi-params": "^2.2.0", - "express-rate-limit": "^6.7.0", - "launch-editor": "^2.6.0", + "drupal-jsonapi-params": "^2.3.2", + "express-rate-limit": "^7.5.1", + "launch-editor": "^2.14.1", "md5": "^2.3.0", "querystring": "^0.2.1", - "scule": "^0.3.2", - "vue": "^2.7.14", - "vuex": "^3.6.2" + "scule": "^0.3.2" }, "dependencies": { "scule": { @@ -43567,333 +43295,106 @@ } }, "druxt-auth": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/druxt-auth/-/druxt-auth-0.4.0.tgz", - "integrity": "sha512-WwDj36JLTJvgzkGL5aQQBPA6Ja0FqsxLDx0qLeq72rKLRw+ZkMHUYjG9JQvLH06xyfJr+1co1Ax57bdd1xPbVA==", + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/druxt-auth/-/druxt-auth-0.5.1.tgz", + "integrity": "sha512-wZ9xImioLjeQ6lnuQmFoqdvFmGyxdbRSnNNLBj2+aeI9MPUx9636lu97/j4EeJIZRGR7WG96cjqTyTe+eYU52Q==", "requires": { - "@nuxtjs/auth-next": "^5.0.0-1667386184.dfbbb54" + "@nuxtjs/auth-next": "^5.0.0-1667386184.dfbbb54", + "http-proxy-middleware": "^1.0.6" } }, "druxt-blocks": { - "version": "0.17.3", - "resolved": "https://registry.npmjs.org/druxt-blocks/-/druxt-blocks-0.17.3.tgz", - "integrity": "sha512-O3dMItSmJS3XEXjTOT85AJ43dSwuVqrk6L3ay7GwruLBDZ+yhyDGPNibSxOMBlHhK7A8VhnEHgZn8l/NNpXC6Q==", - "requires": { - "axios": "0.27.2", - "drupal-jsonapi-params": "^2.2.0", - "druxt": "^0.23.0", - "druxt-entity": "^0.28.1", - "druxt-router": "^0.30.0", - "vue": "^2.7.14", - "vuex": "^3.6.2" - }, - "dependencies": { - "druxt": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/druxt/-/druxt-0.23.0.tgz", - "integrity": "sha512-KPgLBJnubhaCiFyX4+Cekn58BZuD0lxMPu7476PnlfxuGXNP1XVm8WN16DrjJMRoUpZsLVZqIEGzCWjQrQ9naw==", - "requires": { - "@nuxtjs/axios": "^5.13.6", - "@nuxtjs/proxy": "^2.1.0", - "@vue/devtools-api": "^6.5.0", - "chalk": "^4.1.2", - "core-js": "^3.31.0", - "deepmerge": "^4.3.1", - "drupal-jsonapi-params": "^2.2.0", - "express-rate-limit": "^6.7.0", - "launch-editor": "^2.6.0", - "md5": "^2.3.0", - "querystring": "^0.2.1", - "scule": "^0.3.2", - "vue": "^2.7.14", - "vuex": "^3.6.2" - } - }, - "druxt-router": { - "version": "0.30.0", - "resolved": "https://registry.npmjs.org/druxt-router/-/druxt-router-0.30.0.tgz", - "integrity": "sha512-MuvQFwEi/Yq+UrNX0a7tKUUKBeU9VVJzjt86rDVU1yAlJexrrpMRQJSYkW/sFZKAp7OAS6irb0hMSZWe2H9EKg==", - "requires": { - "druxt": "^0.23.0", - "url-parse": "^1.5.10", - "vue": "^2.7.14", - "vuex": "^3.6.2" - } - }, - "scule": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/scule/-/scule-0.3.2.tgz", - "integrity": "sha512-zIvPdjOH8fv8CgrPT5eqtxHQXmPNnV/vHJYffZhE43KZkvULvpCTvOt1HPlFaCZx287INL9qaqrZg34e8NgI4g==" - } + "version": "0.18.0", + "resolved": "https://registry.npmjs.org/druxt-blocks/-/druxt-blocks-0.18.0.tgz", + "integrity": "sha512-qeOm8kfiS78a/6AaOnreao7zay3gEJDdL1IQD3WHLf+F2oBcN12o/2qp/dssYZriqtGCR5KP+NA09TMJW9HDsA==", + "requires": { + "axios": "0.34.0", + "drupal-jsonapi-params": "^2.3.2", + "druxt": "^0.25.0" } }, "druxt-breadcrumb": { - "version": "0.17.2", - "resolved": "https://registry.npmjs.org/druxt-breadcrumb/-/druxt-breadcrumb-0.17.2.tgz", - "integrity": "sha512-aDXlvasWEa5v8/EVWrrC4qAi4bPmDsjdiDmKR3nuCRM4fkTyw1wEGFeu8d5raaQQj70umR1hrtcAhGyq3BnstQ==", + "version": "0.18.0", + "resolved": "https://registry.npmjs.org/druxt-breadcrumb/-/druxt-breadcrumb-0.18.0.tgz", + "integrity": "sha512-xquJskZP/aTdmdCIEsPoZozQqfUAULIORUksqZgB8YCa0ZeucEfyTxKLmqRKed4m5Bg4cyeY+GtJR3rbLVKvSQ==", "requires": { - "druxt": "^0.23.0", - "druxt-blocks": "^0.17.3", - "druxt-router": "^0.30.0", - "vue": "^2.7.14", - "vuex": "^3.6.2" - }, - "dependencies": { - "druxt": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/druxt/-/druxt-0.23.0.tgz", - "integrity": "sha512-KPgLBJnubhaCiFyX4+Cekn58BZuD0lxMPu7476PnlfxuGXNP1XVm8WN16DrjJMRoUpZsLVZqIEGzCWjQrQ9naw==", - "requires": { - "@nuxtjs/axios": "^5.13.6", - "@nuxtjs/proxy": "^2.1.0", - "@vue/devtools-api": "^6.5.0", - "chalk": "^4.1.2", - "core-js": "^3.31.0", - "deepmerge": "^4.3.1", - "drupal-jsonapi-params": "^2.2.0", - "express-rate-limit": "^6.7.0", - "launch-editor": "^2.6.0", - "md5": "^2.3.0", - "querystring": "^0.2.1", - "scule": "^0.3.2", - "vue": "^2.7.14", - "vuex": "^3.6.2" - } - }, - "druxt-router": { - "version": "0.30.0", - "resolved": "https://registry.npmjs.org/druxt-router/-/druxt-router-0.30.0.tgz", - "integrity": "sha512-MuvQFwEi/Yq+UrNX0a7tKUUKBeU9VVJzjt86rDVU1yAlJexrrpMRQJSYkW/sFZKAp7OAS6irb0hMSZWe2H9EKg==", - "requires": { - "druxt": "^0.23.0", - "url-parse": "^1.5.10", - "vue": "^2.7.14", - "vuex": "^3.6.2" - } - }, - "scule": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/scule/-/scule-0.3.2.tgz", - "integrity": "sha512-zIvPdjOH8fv8CgrPT5eqtxHQXmPNnV/vHJYffZhE43KZkvULvpCTvOt1HPlFaCZx287INL9qaqrZg34e8NgI4g==" - } + "druxt": "^0.25.0", + "druxt-blocks": "^0.18.0", + "druxt-router": "^0.32.0" } }, "druxt-entity": { - "version": "0.28.1", - "resolved": "https://registry.npmjs.org/druxt-entity/-/druxt-entity-0.28.1.tgz", - "integrity": "sha512-CQf/ZYuPP1XmN1o+2t2Qzs0zmzAXS3faYyeDronBlX8ckMARjVp71Oe/fz9pQLP0bAcUnAO6F4H9XxGYAbFRMg==", + "version": "0.29.0", + "resolved": "https://registry.npmjs.org/druxt-entity/-/druxt-entity-0.29.0.tgz", + "integrity": "sha512-I09QIRa7DiInuoBqLQxps+n4KXQteNnDSftD7gB2aIlwfmTj8yZJgxDp1XHXn//BnjBOB6plJHVMOq9brT8Jow==", "requires": { "deepmerge": "^4.3.1", - "drupal-jsonapi-params": "^2.2.0", - "druxt": "^0.23.0", - "druxt-router": "^0.30.0", - "druxt-schema": "^0.11.3" - }, - "dependencies": { - "druxt": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/druxt/-/druxt-0.23.0.tgz", - "integrity": "sha512-KPgLBJnubhaCiFyX4+Cekn58BZuD0lxMPu7476PnlfxuGXNP1XVm8WN16DrjJMRoUpZsLVZqIEGzCWjQrQ9naw==", - "requires": { - "@nuxtjs/axios": "^5.13.6", - "@nuxtjs/proxy": "^2.1.0", - "@vue/devtools-api": "^6.5.0", - "chalk": "^4.1.2", - "core-js": "^3.31.0", - "deepmerge": "^4.3.1", - "drupal-jsonapi-params": "^2.2.0", - "express-rate-limit": "^6.7.0", - "launch-editor": "^2.6.0", - "md5": "^2.3.0", - "querystring": "^0.2.1", - "scule": "^0.3.2", - "vue": "^2.7.14", - "vuex": "^3.6.2" - } - }, - "druxt-router": { - "version": "0.30.0", - "resolved": "https://registry.npmjs.org/druxt-router/-/druxt-router-0.30.0.tgz", - "integrity": "sha512-MuvQFwEi/Yq+UrNX0a7tKUUKBeU9VVJzjt86rDVU1yAlJexrrpMRQJSYkW/sFZKAp7OAS6irb0hMSZWe2H9EKg==", - "requires": { - "druxt": "^0.23.0", - "url-parse": "^1.5.10", - "vue": "^2.7.14", - "vuex": "^3.6.2" - } - }, - "scule": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/scule/-/scule-0.3.2.tgz", - "integrity": "sha512-zIvPdjOH8fv8CgrPT5eqtxHQXmPNnV/vHJYffZhE43KZkvULvpCTvOt1HPlFaCZx287INL9qaqrZg34e8NgI4g==" - } + "drupal-jsonapi-params": "^2.3.2", + "druxt": "^0.25.0", + "druxt-router": "^0.32.0", + "druxt-schema": "^0.12.0" } }, "druxt-menu": { - "version": "0.21.0", - "resolved": "https://registry.npmjs.org/druxt-menu/-/druxt-menu-0.21.0.tgz", - "integrity": "sha512-hTlH3XGsJdTQPhQ6g/FuztPZfPlOZBcaWLms9wxkFj+RLudcsd4qG4JPqMyOxabQu280/Q0TX+4XG1Rrlt8WiQ==", + "version": "0.22.0", + "resolved": "https://registry.npmjs.org/druxt-menu/-/druxt-menu-0.22.0.tgz", + "integrity": "sha512-sTcTbqzIuKCiFSyLLruZHVzSdaByH0PBvAMViMkCcQ9IH3gJsUwQ9rrL22pGR4S19TOcb5UVACD98A1tPhXUxg==", "requires": { "deepmerge": "^4.3.1", - "drupal-jsonapi-params": "^2.2.0", - "druxt": "^0.24.0", - "druxt-blocks": "^0.17.1", - "vue": "^2.7.14", - "vuex": "^3.6.2" - }, - "dependencies": { - "druxt": { - "version": "0.24.0", - "resolved": "https://registry.npmjs.org/druxt/-/druxt-0.24.0.tgz", - "integrity": "sha512-JG2m1ieQJ/dfEodd4253UnjTqtOWjXdirHF8/HNQb0FLwjy4uQkFvyo9SSIBkIDdomMEaGiAszjyc0PYVf8QYg==", - "requires": { - "@nuxtjs/axios": "^5.13.6", - "@nuxtjs/proxy": "^2.1.0", - "@vue/devtools-api": "^6.5.0", - "chalk": "^4.1.2", - "core-js": "^3.31.0", - "deepmerge": "^4.3.1", - "drupal-jsonapi-params": "^2.2.0", - "express-rate-limit": "^6.7.0", - "launch-editor": "^2.6.0", - "md5": "^2.3.0", - "querystring": "^0.2.1", - "scule": "^0.3.2", - "vue": "^2.7.14", - "vuex": "^3.6.2" - } - }, - "scule": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/scule/-/scule-0.3.2.tgz", - "integrity": "sha512-zIvPdjOH8fv8CgrPT5eqtxHQXmPNnV/vHJYffZhE43KZkvULvpCTvOt1HPlFaCZx287INL9qaqrZg34e8NgI4g==" - } + "drupal-jsonapi-params": "^2.3.2", + "druxt": "^0.25.0", + "druxt-blocks": "^0.18.0" } }, "druxt-router": { - "version": "0.29.1", - "resolved": "https://registry.npmjs.org/druxt-router/-/druxt-router-0.29.1.tgz", - "integrity": "sha512-qNIKimi5EO9BlnfZLiIN8eHQxYyngprcDQRsPo8nlXrN2/20Iy6tHd8Gs2Jt3J0U+v+bnB+TnSweZTwXdBaH3w==", + "version": "0.32.0", + "resolved": "https://registry.npmjs.org/druxt-router/-/druxt-router-0.32.0.tgz", + "integrity": "sha512-Kn7FltLHwnf/2o/+iK2aTnMvvFquA9AfkDXYP/Rv1XY7/tLkb8TK/rpDVVEliF4VcG36eDJU2eCTdTHyEpQwTA==", "requires": { - "druxt": "^0.22.0", - "url-parse": "^1.5.10", - "vue": "^2.7.14", - "vuex": "^3.6.2" + "drupal-jsonapi-params": "^2.3.2", + "druxt": "^0.25.0", + "url-parse": "^1.5.10" } }, "druxt-schema": { - "version": "0.11.3", - "resolved": "https://registry.npmjs.org/druxt-schema/-/druxt-schema-0.11.3.tgz", - "integrity": "sha512-aObNabCWNQP0bSelVvBRc+eXOP/Tyyc9saZnsNJNGk31M6CFYc5d4Eo9D85f5srgPCpFRzxvkBnN7XUPHiAL6A==", + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/druxt-schema/-/druxt-schema-0.12.0.tgz", + "integrity": "sha512-X08cAn+6L74xMX3ZriEIiJgp53pdZhVtJTsO54vBaepy8XsY0++JpAngxTyyJ/F1KyMYXJbEF54L7ntmkoe2ZA==", "requires": { "consola": "^2.15.3", - "drupal-jsonapi-params": "^2.2.0", - "druxt": "^0.23.0", - "vue": "^2.7.14", - "vuex": "^3.6.2" - }, - "dependencies": { - "druxt": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/druxt/-/druxt-0.23.0.tgz", - "integrity": "sha512-KPgLBJnubhaCiFyX4+Cekn58BZuD0lxMPu7476PnlfxuGXNP1XVm8WN16DrjJMRoUpZsLVZqIEGzCWjQrQ9naw==", - "requires": { - "@nuxtjs/axios": "^5.13.6", - "@nuxtjs/proxy": "^2.1.0", - "@vue/devtools-api": "^6.5.0", - "chalk": "^4.1.2", - "core-js": "^3.31.0", - "deepmerge": "^4.3.1", - "drupal-jsonapi-params": "^2.2.0", - "express-rate-limit": "^6.7.0", - "launch-editor": "^2.6.0", - "md5": "^2.3.0", - "querystring": "^0.2.1", - "scule": "^0.3.2", - "vue": "^2.7.14", - "vuex": "^3.6.2" - } - }, - "scule": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/scule/-/scule-0.3.2.tgz", - "integrity": "sha512-zIvPdjOH8fv8CgrPT5eqtxHQXmPNnV/vHJYffZhE43KZkvULvpCTvOt1HPlFaCZx287INL9qaqrZg34e8NgI4g==" - } + "drupal-jsonapi-params": "^2.3.2", + "druxt": "^0.25.0" } }, "druxt-site": { - "version": "0.14.3", - "resolved": "https://registry.npmjs.org/druxt-site/-/druxt-site-0.14.3.tgz", - "integrity": "sha512-rQBzxf56maLH8SUA0fSqGd+Sfi9xoSu/Yo7JwrE8XlgFZTs8f/YLduWkcRBS8hLPUdCpfNlqvV1u5pV1FSlZzg==", - "requires": { - "drupal-jsonapi-params": "^2.2.0", - "druxt": "^0.22.0", - "druxt-blocks": "^0.17.1", - "druxt-breadcrumb": "^0.17.1", - "druxt-entity": "^0.28.0", - "druxt-menu": "^0.21.0", - "druxt-router": "^0.29.1", - "druxt-schema": "^0.11.2", - "druxt-views": "^0.22.0", - "md5": "^2.3.0", - "vue": "^2.7.14", - "vuex": "^3.6.2" + "version": "0.15.0", + "resolved": "https://registry.npmjs.org/druxt-site/-/druxt-site-0.15.0.tgz", + "integrity": "sha512-Oj7nWi+g+XuMfMTZ9qteWQHUChZITwMqBK1xOzYQlnh2e80qRXDmKUFXiESpFj/Kjwt0BainarbVBZpViqquyQ==", + "requires": { + "drupal-jsonapi-params": "^2.3.2", + "druxt": "^0.25.0", + "druxt-blocks": "^0.18.0", + "druxt-breadcrumb": "^0.18.0", + "druxt-entity": "^0.29.0", + "druxt-menu": "^0.22.0", + "druxt-router": "^0.32.0", + "druxt-schema": "^0.12.0", + "druxt-views": "^0.23.0" } }, "druxt-views": { - "version": "0.22.2", - "resolved": "https://registry.npmjs.org/druxt-views/-/druxt-views-0.22.2.tgz", - "integrity": "sha512-/nYW+RtPBeHXgcr+mk0J3XR31yeLbmgso2ByoMDfgEaU4qR98/e1G7MR9MapqffuxEDZ7xzYbCZXGMxwXV8Ynw==", + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/druxt-views/-/druxt-views-0.23.0.tgz", + "integrity": "sha512-yipt2VFk1E9yhRodlsDUllzGaN48F6OMN7qAroBw/t48XKJWAI74rJ9FizAXEjih7yYztCkJNy9RsgJEPQ8kwQ==", "requires": { - "axios": "0.27.2", + "axios": "0.34.0", "deepmerge": "^4.3.1", - "drupal-jsonapi-params": "^2.2.0", - "druxt": "^0.23.0", - "druxt-blocks": "^0.17.3", - "druxt-entity": "^0.28.1", - "druxt-router": "^0.30.0", - "md5": "^2.3.0", - "vue": "^2.7.14", - "vuex": "^3.6.2" - }, - "dependencies": { - "druxt": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/druxt/-/druxt-0.23.0.tgz", - "integrity": "sha512-KPgLBJnubhaCiFyX4+Cekn58BZuD0lxMPu7476PnlfxuGXNP1XVm8WN16DrjJMRoUpZsLVZqIEGzCWjQrQ9naw==", - "requires": { - "@nuxtjs/axios": "^5.13.6", - "@nuxtjs/proxy": "^2.1.0", - "@vue/devtools-api": "^6.5.0", - "chalk": "^4.1.2", - "core-js": "^3.31.0", - "deepmerge": "^4.3.1", - "drupal-jsonapi-params": "^2.2.0", - "express-rate-limit": "^6.7.0", - "launch-editor": "^2.6.0", - "md5": "^2.3.0", - "querystring": "^0.2.1", - "scule": "^0.3.2", - "vue": "^2.7.14", - "vuex": "^3.6.2" - } - }, - "druxt-router": { - "version": "0.30.0", - "resolved": "https://registry.npmjs.org/druxt-router/-/druxt-router-0.30.0.tgz", - "integrity": "sha512-MuvQFwEi/Yq+UrNX0a7tKUUKBeU9VVJzjt86rDVU1yAlJexrrpMRQJSYkW/sFZKAp7OAS6irb0hMSZWe2H9EKg==", - "requires": { - "druxt": "^0.23.0", - "url-parse": "^1.5.10", - "vue": "^2.7.14", - "vuex": "^3.6.2" - } - }, - "scule": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/scule/-/scule-0.3.2.tgz", - "integrity": "sha512-zIvPdjOH8fv8CgrPT5eqtxHQXmPNnV/vHJYffZhE43KZkvULvpCTvOt1HPlFaCZx287INL9qaqrZg34e8NgI4g==" - } + "drupal-jsonapi-params": "^2.3.2", + "druxt": "^0.25.0", + "druxt-blocks": "^0.18.0", + "druxt-entity": "^0.29.0", + "druxt-router": "^0.32.0", + "md5": "^2.3.0" } }, "dunder-proto": { @@ -44173,7 +43674,6 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", - "dev": true, "requires": { "es-errors": "^1.3.0", "get-intrinsic": "^1.2.6", @@ -45084,9 +44584,9 @@ } }, "express-rate-limit": { - "version": "6.11.2", - "resolved": "https://registry.npmjs.org/express-rate-limit/-/express-rate-limit-6.11.2.tgz", - "integrity": "sha512-a7uwwfNTh1U60ssiIkuLFWHt4hAC5yxlLGU2VP0X4YNlyEDZAqF4tK3GD3NSitVBrCQmQ0++0uOyFOgC2y4DDw==", + "version": "7.5.1", + "resolved": "https://registry.npmjs.org/express-rate-limit/-/express-rate-limit-7.5.1.tgz", + "integrity": "sha512-7iN8iPMDzOMHPUYllBEsQdWVB6fPDMPqwjBaFrgr4Jgr/+okjvzAy+UHlYYL/Vs0OsOrMkwS6PJDkFlJwoxUnw==", "requires": {} }, "extend": { @@ -49107,18 +48607,18 @@ } }, "launch-editor": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/launch-editor/-/launch-editor-2.6.0.tgz", - "integrity": "sha512-JpDCcQnyAAzZZaZ7vEiSqL690w7dAEyLao+KC96zBplnYbJS7TYNjvM3M7y3dGz+v7aIsJk3hllWuc0kWAjyRQ==", + "version": "2.14.2", + "resolved": "https://registry.npmjs.org/launch-editor/-/launch-editor-2.14.2.tgz", + "integrity": "sha512-NHJEb30MGBCkmZXLZwz25t37QR4aY03ZzPYUJXOJaOa92uWwExI9SBQUuIznBYc1xkD7cJNGX7oc3Nl3sq2kQQ==", "requires": { - "picocolors": "^1.0.0", - "shell-quote": "^1.7.3" + "picocolors": "^1.1.1", + "shell-quote": "^1.10.0" }, "dependencies": { "shell-quote": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.7.4.tgz", - "integrity": "sha512-8o/QEhSSRb1a5i7TFR0iM4G16Z0vYB2OQVs4G3aAFXjn3T6yEx8AZxy1PgDF7I00LZHYA3WxaSYIf5e5sAX8Rw==" + "version": "1.12.0", + "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.12.0.tgz", + "integrity": "sha512-PcByqNyT/38F2kDNi006HAMRJaULuBzq/FOsw3qdZvX/GA9W/jamDaRskgHjubHiftXK5sIFxLNkvrXUwcof6Q==" } } }, diff --git a/nuxt/package.json b/nuxt/package.json index bca1c321..37470f74 100644 --- a/nuxt/package.json +++ b/nuxt/package.json @@ -30,8 +30,8 @@ "dependencies": { "core-js": "3.50.0", "dotenv": "^17.4.2", - "druxt-auth": "^0.4.0", - "druxt-site": "^0.14.3", + "druxt-auth": "^0.5.1", + "druxt-site": "^0.15.0", "nuxt": "2.15.8", "vue-server-renderer": "^2.7.14", "vue-template-compiler": "^2.7.14"