diff --git a/.changeset/early-apricots-draw.md b/.changeset/early-apricots-draw.md new file mode 100644 index 0000000..3386a37 --- /dev/null +++ b/.changeset/early-apricots-draw.md @@ -0,0 +1,5 @@ +--- +"druxt-layout-paragraphs": minor +--- + +feat(#47): added support for Custom Layouts module diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 8083243..87f9918 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -13,7 +13,7 @@ jobs: strategy: matrix: - node-version: [12.x, 14.x, 16.x] + node-version: [16.x] # See supported Node.js release schedule at https://nodejs.org/en/about/releases/ steps: @@ -24,13 +24,13 @@ jobs: with: node-version: ${{ matrix.node-version }} - - run: npm i + - run: yarn - - run: npm run build + - run: yarn build - - run: npm run lint + - run: yarn lint - - run: npm test --reporters=jest-junit --runInBand + - run: yarn test --reporters=jest-junit --runInBand - name: Codecov uses: codecov/codecov-action@v3.1.0 diff --git a/.nvmrc b/.nvmrc new file mode 100644 index 0000000..53d0020 --- /dev/null +++ b/.nvmrc @@ -0,0 +1 @@ +v16.20.1 diff --git a/example/drupal/.ddev/config.yaml b/example/drupal/.ddev/config.yaml index 652dc7d..d94494f 100644 --- a/example/drupal/.ddev/config.yaml +++ b/example/drupal/.ddev/config.yaml @@ -1,7 +1,7 @@ name: druxt-layout-paragraphs-example type: drupal9 docroot: web -php_version: "7.4" +php_version: "8.1" webserver_type: nginx-fpm router_http_port: "80" router_https_port: "443" @@ -82,7 +82,7 @@ web_environment: [] # Please take care with this because it can cause great confusion. # upload_dir: custom/upload/dir -# would set the destination path for ddev import-files to /custom/upload/dir +# would set the destination path for ddev import-files to /custom/upload/dir # working_dir: # web: /var/www/html diff --git a/example/drupal/composer.json b/example/drupal/composer.json index 055a0b6..3a4ef00 100644 --- a/example/drupal/composer.json +++ b/example/drupal/composer.json @@ -7,16 +7,23 @@ "support": { "chat": "https://discord.druxtjs.org" }, - "repositories": [ - { - "type": "vcs", - "url": "https://github.com/realityloop/tome_drush" - }, - { + "repositories": { + "drupal": { "type": "composer", - "url": "https://packages.drupal.org/8" - } - ], + "url": "https://packages.drupal.org/8", + "exclude": [ + "drupal/layout_content" + ] + }, + "drupal/layout_content": { + "type": "git", + "url": "https://git.drupalcode.org/issue/layout_content-3288241.git" + }, + "drupal-tome/tome_drush": { + "type": "vcs", + "url": "https://github.com/realityloop/tome_drush" + } + }, "require": { "composer/installers": "2.1.1", "drupal-tome/tome_drush": "dev-feature/3-drush_11", @@ -25,6 +32,7 @@ "drupal/core-recommended": "9.3.14", "drupal/druxt": "1.1.1", "drupal/jsonapi_hypermedia": "^1.8", + "drupal/layout_content": "dev-3288241-layout_content-d10", "drupal/layout_paragraphs": "1.0.0", "drupal/tome": "1.7.0", "drush/drush": "11.0.9" diff --git a/example/drupal/config/core.entity_view_display.layout_content.custom_layout.default.yml b/example/drupal/config/core.entity_view_display.layout_content.custom_layout.default.yml new file mode 100644 index 0000000..4e73335 --- /dev/null +++ b/example/drupal/config/core.entity_view_display.layout_content.custom_layout.default.yml @@ -0,0 +1,17 @@ +uuid: 5f1147ed-e3e8-40c2-8b56-b59c8316473c +langcode: en +status: true +dependencies: + config: + - layout_content.type.custom_layout +id: layout_content.custom_layout.default +targetEntityType: layout_content +bundle: custom_layout +mode: default +content: + layout_regions: + settings: { } + third_party_settings: { } + weight: 0 + region: content +hidden: { } diff --git a/example/drupal/config/core.extension.yml b/example/drupal/config/core.extension.yml index fc089fe..b64a3e1 100644 --- a/example/drupal/config/core.extension.yml +++ b/example/drupal/config/core.extension.yml @@ -31,6 +31,8 @@ module: jsonapi_menu_items: 0 jsonapi_resources: 0 jsonapi_views: 0 + layout_builder: 0 + layout_content: 0 layout_discovery: 0 layout_paragraphs: 0 link: 0 diff --git a/example/drupal/config/layout_content.type.custom_layout.yml b/example/drupal/config/layout_content.type.custom_layout.yml new file mode 100644 index 0000000..862d650 --- /dev/null +++ b/example/drupal/config/layout_content.type.custom_layout.yml @@ -0,0 +1,10 @@ +uuid: abe4a023-8b46-4e58-9870-c9ead19ce6cf +langcode: en +status: true +dependencies: { } +id: custom_layout +label: 'Custom layout' +revision: 1 +layout: + - + content: content diff --git a/example/drupal/config/paragraphs.paragraphs_type.section.yml b/example/drupal/config/paragraphs.paragraphs_type.section.yml index a922990..e861bf0 100644 --- a/example/drupal/config/paragraphs.paragraphs_type.section.yml +++ b/example/drupal/config/paragraphs.paragraphs_type.section.yml @@ -18,3 +18,4 @@ behavior_plugins: layout_twocol_bricks: 'Two column bricks' layout_threecol_25_50_25: 'Three column 25/50/25' layout_threecol_33_34_33: 'Three column 33/34/33' + 'layout_content__custom_layout:custom_layout': 'Custom layout' diff --git a/example/drupal/config/paragraphs.paragraphs_type.text.yml b/example/drupal/config/paragraphs.paragraphs_type.text.yml index a207e09..e79d159 100644 --- a/example/drupal/config/paragraphs.paragraphs_type.text.yml +++ b/example/drupal/config/paragraphs.paragraphs_type.text.yml @@ -1,10 +1,15 @@ uuid: fcb7b2e5-821f-4bf2-9eff-22e289a4280c langcode: en status: true -dependencies: { } +dependencies: + module: + - layout_paragraphs id: text label: Text icon_uuid: null icon_default: null description: '' -behavior_plugins: { } +behavior_plugins: + layout_paragraphs: + enabled: false + available_layouts: { } diff --git a/example/drupal/content/meta/index.json b/example/drupal/content/meta/index.json index 5dfff3b..cd160b1 100644 --- a/example/drupal/content/meta/index.json +++ b/example/drupal/content/meta/index.json @@ -15,7 +15,11 @@ "paragraph.ec0b38e2-db75-4ab1-b441-e36c35dc7126", "paragraph.c489ea5c-3e9e-4acf-a650-6a8b0551037c", "paragraph.965b5df0-8f69-4920-a3f2-1d84b20b9eb0", - "paragraph.e7a4e78a-6409-47aa-8ce9-0ff468ce0872" + "paragraph.e7a4e78a-6409-47aa-8ce9-0ff468ce0872", + "paragraph.87d5e680-a388-4049-bd81-53501fc793eb", + "paragraph.3c881aaf-c532-4a77-8bd0-ab4fcea8f909" ], - "paragraph.e7a4e78a-6409-47aa-8ce9-0ff468ce0872": [] + "paragraph.e7a4e78a-6409-47aa-8ce9-0ff468ce0872": [], + "paragraph.87d5e680-a388-4049-bd81-53501fc793eb": [], + "paragraph.3c881aaf-c532-4a77-8bd0-ab4fcea8f909": [] } \ No newline at end of file diff --git a/example/drupal/content/node.7b21da83-e2ec-4801-9758-8696340e8f46.json b/example/drupal/content/node.7b21da83-e2ec-4801-9758-8696340e8f46.json index 0c230ca..55c4d8f 100644 --- a/example/drupal/content/node.7b21da83-e2ec-4801-9758-8696340e8f46.json +++ b/example/drupal/content/node.7b21da83-e2ec-4801-9758-8696340e8f46.json @@ -18,7 +18,7 @@ ], "revision_timestamp": [ { - "value": "2022-06-15T23:39:53+00:00", + "value": "2023-07-17T03:35:55+00:00", "format": "Y-m-d\\TH:i:sP" } ], @@ -53,7 +53,7 @@ ], "changed": [ { - "value": "2022-06-15T23:39:53+00:00", + "value": "2023-07-17T03:35:55+00:00", "format": "Y-m-d\\TH:i:sP" } ], @@ -109,6 +109,14 @@ { "target_type": "paragraph", "target_uuid": "e7a4e78a-6409-47aa-8ce9-0ff468ce0872" + }, + { + "target_type": "paragraph", + "target_uuid": "87d5e680-a388-4049-bd81-53501fc793eb" + }, + { + "target_type": "paragraph", + "target_uuid": "3c881aaf-c532-4a77-8bd0-ab4fcea8f909" } ] } \ No newline at end of file diff --git a/example/drupal/content/paragraph.3c881aaf-c532-4a77-8bd0-ab4fcea8f909.json b/example/drupal/content/paragraph.3c881aaf-c532-4a77-8bd0-ab4fcea8f909.json new file mode 100644 index 0000000..3e67355 --- /dev/null +++ b/example/drupal/content/paragraph.3c881aaf-c532-4a77-8bd0-ab4fcea8f909.json @@ -0,0 +1,58 @@ +{ + "uuid": [ + { + "value": "3c881aaf-c532-4a77-8bd0-ab4fcea8f909" + } + ], + "langcode": [ + { + "value": "en" + } + ], + "type": [ + { + "target_id": "text", + "target_type": "paragraphs_type", + "target_uuid": "fcb7b2e5-821f-4bf2-9eff-22e289a4280c" + } + ], + "status": [ + { + "value": true + } + ], + "created": [ + { + "value": "2023-07-17T03:35:50+00:00", + "format": "Y-m-d\\TH:i:sP" + } + ], + "behavior_settings": [ + { + "value": { + "layout_paragraphs": { + "region": "content", + "parent_uuid": "87d5e680-a388-4049-bd81-53501fc793eb", + "layout": "", + "config": [] + } + } + } + ], + "default_langcode": [ + { + "value": true + } + ], + "revision_translation_affected": [ + { + "value": true + } + ], + "field_text": [ + { + "value": "

Curabitur tincidunt erat non sollicitudin accumsan. In urna orci, tempor eu condimentum nec, commodo ut sem. In posuere lacus sit amet massa semper, et tincidunt mi euismod. Suspendisse egestas condimentum libero eget congue. Nunc mattis ac ligula vitae egestas. Nam sed vestibulum felis, et consectetur orci. In congue ornare felis vel convallis. Nam a molestie elit.<\/p>\r\n", + "format": "basic_html" + } + ] +} \ No newline at end of file diff --git a/example/drupal/content/paragraph.87d5e680-a388-4049-bd81-53501fc793eb.json b/example/drupal/content/paragraph.87d5e680-a388-4049-bd81-53501fc793eb.json new file mode 100644 index 0000000..d3e92cc --- /dev/null +++ b/example/drupal/content/paragraph.87d5e680-a388-4049-bd81-53501fc793eb.json @@ -0,0 +1,62 @@ +{ + "uuid": [ + { + "value": "87d5e680-a388-4049-bd81-53501fc793eb" + } + ], + "langcode": [ + { + "value": "en" + } + ], + "type": [ + { + "target_id": "section", + "target_type": "paragraphs_type", + "target_uuid": "da40476e-6c6d-4333-986d-d91742780c6e" + } + ], + "status": [ + { + "value": true + } + ], + "created": [ + { + "value": "2023-07-17T03:35:27+00:00", + "format": "Y-m-d\\TH:i:sP" + } + ], + "behavior_settings": [ + { + "value": { + "layout_paragraphs": { + "region": "", + "parent_uuid": "", + "layout": "layout_content__custom_layout:custom_layout", + "config": { + "label": "", + "layout_serialized": "O:42:\"Drupal\\layout_content\\Entity\\LayoutContent\":28:{s:15:\"\u0000*\u0000entityTypeId\";s:14:\"layout_content\";s:15:\"\u0000*\u0000enforceIsNew\";b:1;s:12:\"\u0000*\u0000typedData\";N;s:16:\"\u0000*\u0000cacheContexts\";a:0:{}s:12:\"\u0000*\u0000cacheTags\";a:0:{}s:14:\"\u0000*\u0000cacheMaxAge\";i:-1;s:14:\"\u0000*\u0000_serviceIds\";a:0:{}s:18:\"\u0000*\u0000_entityStorages\";a:0:{}s:9:\"\u0000*\u0000values\";a:13:{s:8:\"langcode\";a:1:{s:9:\"x-default\";a:1:{i:0;a:1:{s:5:\"value\";s:2:\"en\";}}}s:11:\"revision_id\";a:1:{s:9:\"x-default\";a:0:{}}s:2:\"id\";a:1:{s:9:\"x-default\";a:0:{}}s:4:\"uuid\";a:1:{s:9:\"x-default\";a:1:{i:0;a:1:{s:5:\"value\";s:36:\"a82948c8-91f7-4c6f-9739-c9eaf28daa84\";}}}s:4:\"type\";a:1:{s:9:\"x-default\";a:1:{i:0;a:1:{s:9:\"target_id\";s:13:\"custom_layout\";}}}s:16:\"revision_created\";a:1:{s:9:\"x-default\";a:1:{i:0;a:1:{s:5:\"value\";i:1689564928;}}}s:13:\"revision_user\";a:1:{s:9:\"x-default\";a:0:{}}s:12:\"revision_log\";a:1:{s:9:\"x-default\";a:0:{}}s:6:\"status\";a:1:{s:9:\"x-default\";a:1:{i:0;a:1:{s:5:\"value\";b:1;}}}s:7:\"changed\";a:1:{s:9:\"x-default\";a:1:{i:0;a:1:{s:5:\"value\";i:1689564928;}}}s:16:\"default_langcode\";a:1:{s:9:\"x-default\";a:1:{i:0;a:1:{s:5:\"value\";b:1;}}}s:16:\"revision_default\";a:1:{s:9:\"x-default\";a:0:{}}s:29:\"revision_translation_affected\";a:1:{s:9:\"x-default\";a:0:{}}}s:9:\"\u0000*\u0000fields\";a:0:{}s:19:\"\u0000*\u0000fieldDefinitions\";N;s:12:\"\u0000*\u0000languages\";N;s:14:\"\u0000*\u0000langcodeKey\";s:8:\"langcode\";s:21:\"\u0000*\u0000defaultLangcodeKey\";s:16:\"default_langcode\";s:17:\"\u0000*\u0000activeLangcode\";s:9:\"x-default\";s:18:\"\u0000*\u0000defaultLangcode\";s:2:\"en\";s:15:\"\u0000*\u0000translations\";a:1:{s:9:\"x-default\";a:1:{s:6:\"status\";i:2;}}s:24:\"\u0000*\u0000translationInitialize\";b:0;s:14:\"\u0000*\u0000newRevision\";b:1;s:20:\"\u0000*\u0000isDefaultRevision\";b:1;s:13:\"\u0000*\u0000entityKeys\";a:2:{s:6:\"bundle\";s:13:\"custom_layout\";s:8:\"revision\";N;}s:25:\"\u0000*\u0000translatableEntityKeys\";a:1:{s:8:\"langcode\";a:1:{s:9:\"x-default\";s:2:\"en\";}}s:12:\"\u0000*\u0000validated\";b:0;s:21:\"\u0000*\u0000validationRequired\";b:0;s:19:\"\u0000*\u0000loadedRevisionId\";N;s:33:\"\u0000*\u0000revisionTranslationAffectedKey\";s:29:\"revision_translation_affected\";s:37:\"\u0000*\u0000enforceRevisionTranslationAffected\";a:0:{}s:12:\"\u0000*\u0000isSyncing\";b:0;}", + "layout_revision_id": null, + "layout_uuid": null + } + } + } + } + ], + "default_langcode": [ + { + "value": true + } + ], + "revision_translation_affected": [ + { + "value": true + } + ], + "field_title": [ + { + "value": "Custom layout" + } + ] +} \ No newline at end of file diff --git a/example/drupal/content/paragraph.e7a4e78a-6409-47aa-8ce9-0ff468ce0872.json b/example/drupal/content/paragraph.e7a4e78a-6409-47aa-8ce9-0ff468ce0872.json index 9771253..10fc519 100644 --- a/example/drupal/content/paragraph.e7a4e78a-6409-47aa-8ce9-0ff468ce0872.json +++ b/example/drupal/content/paragraph.e7a4e78a-6409-47aa-8ce9-0ff468ce0872.json @@ -44,11 +44,7 @@ "value": true } ], - "revision_translation_affected": [ - { - "value": true - } - ], + "revision_translation_affected": [], "field_text": [ { "value": "

Aliquam blandit, elit eget feugiat efficitur, est turpis cursus augue, a fermentum quam nisl in ex. Aliquam rhoncus neque lectus, a convallis lacus ultricies vitae. Proin sed nisl sed tellus tincidunt efficitur. Integer sit amet ultricies mi, non dignissim nibh. Sed aliquet fringilla magna, sit amet porttitor libero scelerisque ut.<\/p>\r\n\r\n

Cras eget rutrum dolor, quis condimentum massa. In ullamcorper mi felis, vitae cursus felis ornare a. Donec gravida erat vel pretium dapibus. Mauris dui nulla, tincidunt at lacinia vel, feugiat imperdiet ligula. Nulla in justo a mi facilisis congue. Nunc nec turpis tortor. Aenean sollicitudin porttitor pulvinar. In sodales, arcu quis bibendum volutpat, urna lacus laoreet nisl, vel vulputate magna est nec purus. Vestibulum eget enim vel nulla sollicitudin vestibulum nec ac mauris.<\/p>\r\n\r\n

Nunc ex mauris, rhoncus a iaculis eget, bibendum nec nisl. Vestibulum auctor id justo a fermentum.<\/p>\r\n", diff --git a/example/nuxt/package.json b/example/nuxt/package.json index 7a5987b..2b5f019 100644 --- a/example/nuxt/package.json +++ b/example/nuxt/package.json @@ -8,6 +8,6 @@ "druxt": "latest", "druxt-entity": "latest", "druxt-layout-paragraphs": "link:../..", - "nuxt": "latest" + "nuxt": "2.x" } } diff --git a/example/nuxt/pages/index.vue b/example/nuxt/pages/index.vue index 511881d..7beebfd 100644 --- a/example/nuxt/pages/index.vue +++ b/example/nuxt/pages/index.vue @@ -1,7 +1,7 @@ diff --git a/package.json b/package.json index 1125f51..04c95a2 100644 --- a/package.json +++ b/package.json @@ -35,15 +35,16 @@ "@changesets/cli": "2.22.0", "@vue/test-utils": "1.3.0", "babel-core": "7.0.0-bridge.0", - "druxt": "0.19.2", - "druxt-entity": "^0.25.0", + "druxt": "0.22", + "druxt-entity": "0.28", "esbuild-jest": "0.5.0", "eslint": "8.16.0", "eslint-plugin-nuxt": "3.2.0", "jest": "27.5.1", + "jest-junit": "^16.0.0", "siroc": "0.16.0", "vue-jest": "3.0.7", - "vue-template-compiler": "2.6.14" + "vue-template-compiler": "2.7.14" }, "peerDependencies": {}, "publishConfig": { diff --git a/src/components/DruxtFieldLayoutParagraphs.vue b/src/components/DruxtFieldLayoutParagraphs.vue index 34fdbcd..a0ff246 100644 --- a/src/components/DruxtFieldLayoutParagraphs.vue +++ b/src/components/DruxtFieldLayoutParagraphs.vue @@ -5,11 +5,13 @@ :key="paragraph.uuid" :type="paragraph.type" :uuid="paragraph.id" + v-bind="{ ...$attrs }" > diff --git a/src/components/DruxtLayoutParagraph.vue b/src/components/DruxtLayoutParagraph.vue index 47f728e..a677c9b 100644 --- a/src/components/DruxtLayoutParagraph.vue +++ b/src/components/DruxtLayoutParagraph.vue @@ -67,7 +67,7 @@ export default { * @returns {ComponentOptions} */ componentOptions: ({ entity }) => [ - [(((((entity || {}).attributes || {}).behavior_settings || {}).layout_paragraphs || {}).layout || '').replace('layout_', '')], + [(((((entity || {}).attributes || {}).behavior_settings || {}).layout_paragraphs || {}).layout || '').replace('layout_', '').replace(':', '_')], ['default'], ], @@ -109,8 +109,9 @@ export default { // Create a slot for all available regions. regions.forEach((region) => { const children = this.children.filter((o) => o.attributes.behavior_settings.layout_paragraphs.region === region) - slots[region] = () => h('div', children.map((o) => h('DruxtEntity', + slots[region] = (attrs) => h('div', children.map((o) => h('DruxtEntity', { + attrs, props: { type: o.type, uuid: o.id @@ -121,7 +122,7 @@ export default { // If no default region, render all available region slots. if (!slots.default) { - slots.default = () => h('div', regions.map((region) => slots[region]())) + slots.default = (attrs) => h('div', regions.map((region) => slots[region](attrs))) } return slots diff --git a/yarn.lock b/yarn.lock index 2803570..592f558 100644 --- a/yarn.lock +++ b/yarn.lock @@ -411,6 +411,11 @@ resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.18.0.tgz#10a8d4e656bc01128d299a787aa006ce1a91e112" integrity sha512-AqDccGC+m5O/iUStSJy3DGRIUFu7WbY/CppZYwrEUB4N0tZlnI8CSTsgL7v5fHVFmUbRv2sd+yy27o8Ydt4MGg== +"@babel/parser@^7.18.4": + version "7.22.7" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.22.7.tgz#df8cf085ce92ddbdbf668a7f186ce848c9036cae" + integrity sha512-7NF8pOkHP5o2vpmGgNGcfAeCvOYhGLyA3Z4eBQkT1RJlWu47n63bCs93QfJ2hIAFCil7L5P2IWhs1oToVgrL0Q== + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.17.12": version "7.17.12" resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.17.12.tgz#1dca338caaefca368639c9ffb095afbd4d420b1e" @@ -1939,6 +1944,20 @@ dependencies: "@types/yargs-parser" "*" +"@vue/compiler-sfc@2.7.14": + version "2.7.14" + resolved "https://registry.yarnpkg.com/@vue/compiler-sfc/-/compiler-sfc-2.7.14.tgz#3446fd2fbb670d709277fc3ffa88efc5e10284fd" + integrity sha512-aNmNHyLPsw+sVvlQFQ2/8sjNuLtK54TC6cuKnVzAY93ks4ZBrvwQSnkkIh7bsbNhum5hJBS00wSDipQ937f5DA== + dependencies: + "@babel/parser" "^7.18.4" + postcss "^8.4.14" + source-map "^0.6.1" + +"@vue/devtools-api@^6.5.0": + version "6.5.0" + resolved "https://registry.yarnpkg.com/@vue/devtools-api/-/devtools-api-6.5.0.tgz#98b99425edee70b4c992692628fa1ea2c1e57d07" + integrity sha512-o9KfBeaBmCKl10usN4crU53fYtC1r7jJwdGKjPT24t348rHxgfpZ0xL3Xm/gLUYnc0oTp8LAmrxOeLyu6tbk2Q== + "@vue/test-utils@1.3.0": version "1.3.0" resolved "https://registry.yarnpkg.com/@vue/test-utils/-/test-utils-1.3.0.tgz#d563decdcd9c68a7bca151d4179a2bfd6d5c3e15" @@ -2765,10 +2784,10 @@ core-js@^2.4.0: resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.6.12.tgz#d9333dfa7b065e347cc5682219d6f690859cc2ec" integrity sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ== -core-js@^3.22.5: - version "3.22.6" - resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.22.6.tgz#294dd824b4cae2c24725a36baa4a791ed00bb0de" - integrity sha512-2IGcGH00z9I4twgNWU4uGCNEsBFG1s2JudVQrgSCoVhOfwoTwQjxC8aMo9exrpTMOxvobggEpaHnGMmQY4cfBQ== +core-js@^3.31.0: + version "3.31.1" + resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.31.1.tgz#f2b0eea9be9da0def2c5fece71064a7e5d687653" + integrity sha512-2sKLtfq1eFST7l7v62zaqXacPc7uG8ZAya8ogijLhTtaKNcpzpB4TMoTw2Si+8GYKRwFPMMtUT0263QFWFfqyQ== cross-spawn@^5.1.0: version "5.1.0" @@ -2831,6 +2850,11 @@ cssstyle@^2.3.0: dependencies: cssom "~0.3.6" +csstype@^3.1.0: + version "3.1.2" + resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.1.2.tgz#1d4bf9d572f11c14031f0436e1c10bc1f571f50b" + integrity sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ== + csv-generate@^3.4.3: version "3.4.3" resolved "https://registry.yarnpkg.com/csv-generate/-/csv-generate-3.4.3.tgz#bc42d943b45aea52afa896874291da4b9108ffff" @@ -2930,6 +2954,11 @@ deepmerge@^4.2.2: resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.2.2.tgz#44d2ea3679b8f4d4ffba33f03d865fc1e7bf4955" integrity sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg== +deepmerge@^4.3.1: + version "4.3.1" + resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.3.1.tgz#44b5f2147cd3b00d4b56137685966f26fd25dd4a" + integrity sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A== + defaults@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/defaults/-/defaults-1.0.3.tgz#c656051e9817d9ff08ed881477f3fe4019f3ef7d" @@ -3017,81 +3046,66 @@ domexception@^2.0.1: dependencies: webidl-conversions "^5.0.0" -drupal-jsonapi-params@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/drupal-jsonapi-params/-/drupal-jsonapi-params-2.0.0.tgz#44432aa92fb031c148194bbf079a20ee3a4d088f" - integrity sha512-b6626S6r5YxyHNtVx/9X/oWOQjXwJi00AwTsIB8P7H9MU7CmgURE8zrAVrUWWoEHKTU1u2SWYDv2UZBnvf/P+Q== +drupal-jsonapi-params@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/drupal-jsonapi-params/-/drupal-jsonapi-params-2.2.0.tgz#11e13bd478d8fa885a5309644cd3f36af5551c6d" + integrity sha512-0IQiKBogl3ZR+XNO7ZTEd3TJaMfUlyUEJ1eotBXmmYs/JRVk8oADNZayULbnySnxfp9A9JHNI3TYwVYiHE0HrQ== dependencies: qs "^6.10.3" -druxt-entity@^0.25.0: - version "0.25.0" - resolved "https://registry.yarnpkg.com/druxt-entity/-/druxt-entity-0.25.0.tgz#f2692676f17de861dd47c777e9243b936c908bc4" - integrity sha512-G9NQVxPyUnDLAJU4TqyjDdHVwnTQ1DNbT2g0nqw5idgskNcwGb4TWpR9pm5Fi4yJs3UNpAZ3u5C3HmfqIsXfxw== +druxt-entity@0.28: + version "0.28.0" + resolved "https://registry.yarnpkg.com/druxt-entity/-/druxt-entity-0.28.0.tgz#b38993e19576afde94893e9a9468c9b417e62187" + integrity sha512-3UmGMvPB/JRS6o8NefraJz6FvEpsmtG0gOwsUEZUFHm0r64yquIdBV+Sz/cOx3z6sjup74eON5dEa8qnPktItg== dependencies: - deepmerge "^4.2.2" - drupal-jsonapi-params "^2.0.0" - druxt "^0.19.0" - druxt-router "^0.27.0" - druxt-schema "^0.10.4" + deepmerge "^4.3.1" + drupal-jsonapi-params "^2.2.0" + druxt "^0.22.0" + druxt-router "^0.29.1" + druxt-schema "^0.11.2" -druxt-router@^0.27.0: - version "0.27.1" - resolved "https://registry.yarnpkg.com/druxt-router/-/druxt-router-0.27.1.tgz#28c0bb54b84d72282e7f27cc34f05e2c9fa15a71" - integrity sha512-t1M36fNkxiHKc73K6ZeTzDTIhPMr9ML135tDSZnNf/8pGcAEGed0aAf2LYsZO96f7kIdnjrFQYJw0z0Fr68EBA== +druxt-router@^0.29.1: + version "0.29.1" + resolved "https://registry.yarnpkg.com/druxt-router/-/druxt-router-0.29.1.tgz#612c675dfd86e9cd7778886b6e169014885d298f" + integrity sha512-qNIKimi5EO9BlnfZLiIN8eHQxYyngprcDQRsPo8nlXrN2/20Iy6tHd8Gs2Jt3J0U+v+bnB+TnSweZTwXdBaH3w== dependencies: - druxt "^0.19.1" + druxt "^0.22.0" url-parse "^1.5.10" optionalDependencies: - vue "^2.6.14" + vue "^2.7.14" vuex "^3.6.2" -druxt-schema@^0.10.4: - version "0.10.4" - resolved "https://registry.yarnpkg.com/druxt-schema/-/druxt-schema-0.10.4.tgz#42bb3efe0d8eb769b2bcca9d2cde208aef7e49ea" - integrity sha512-2ps0EdqlwI/fOSccamQdV/ZsP+ym2eTflrFLmBS/67FiSne/+xdCDAKxWTD07+wHBJjN0wdCGip6kiY28cY4HA== +druxt-schema@^0.11.2: + version "0.11.2" + resolved "https://registry.yarnpkg.com/druxt-schema/-/druxt-schema-0.11.2.tgz#89c59438daa31d30470ca73aad8a6c34bcc19b4d" + integrity sha512-PbzfrF3VkgMZ6R42lbEQUV/oH4HC0NC1XQj0HzmwLA12gczyZKK8vXPhYZanNdmjNPSdk7KEZyAub7VXhIEpUw== dependencies: consola "^2.15.3" - drupal-jsonapi-params "^2.0.0" - druxt "^0.19.0" - optionalDependencies: - vue "^2.6.14" - vuex "^3.6.2" - -druxt@0.19.2: - version "0.19.2" - resolved "https://registry.yarnpkg.com/druxt/-/druxt-0.19.2.tgz#842604d0b2cd2f739dfab8fc4af3b1c249ebb232" - integrity sha512-h/N5F9rEkyA3mOjF9TsLZLByGqOevWkcwKw5jy0NHUEg62n2mK3sse0k5sPuHEunYYgm8UFBHucC8cAJ8GDa1w== - dependencies: - "@nuxtjs/axios" "^5.13.6" - "@nuxtjs/proxy" "^2.1.0" - chalk "^4.1.2" - deepmerge "^4.2.2" - drupal-jsonapi-params "^2.0.0" - md5 "^2.3.0" - querystring "^0.2.1" - scule "^0.2.1" + drupal-jsonapi-params "^2.2.0" + druxt "^0.22.0" optionalDependencies: - core-js "^3.22.5" - vue "^2.6.14" + vue "^2.7.14" vuex "^3.6.2" -druxt@^0.19.0, druxt@^0.19.1: - version "0.19.1" - resolved "https://registry.yarnpkg.com/druxt/-/druxt-0.19.1.tgz#6defa6232aeb0f8049e1e31ce175a526a07d2e82" - integrity sha512-KjlNZYPxuLqvqGJZK4trFcK0DqLQ/bkqiUrSTX3clJbBeXz/eZgJ1miYhGt6TdozIB3Bo0E0hI/XnfX1zrhvEA== +druxt@0.22, druxt@^0.22.0: + version "0.22.0" + resolved "https://registry.yarnpkg.com/druxt/-/druxt-0.22.0.tgz#3a3e4032c28829c8f4febc6f2aac370ddece3085" + integrity sha512-2q6GCAxEFSZbgFRt5zcz/Pp1xatkyPN8n2tc51+ESPceihr+buATuMdtR/KBEpsgDiUaHOWFMxFYW3mM6XP6IA== dependencies: "@nuxtjs/axios" "^5.13.6" "@nuxtjs/proxy" "^2.1.0" + "@vue/devtools-api" "^6.5.0" chalk "^4.1.2" - deepmerge "^4.2.2" - drupal-jsonapi-params "^2.0.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.2.1" + scule "^0.3.2" optionalDependencies: - core-js "^3.22.5" - vue "^2.6.14" + core-js "^3.31.0" + vue "^2.7.14" vuex "^3.6.2" editorconfig@^0.15.3: @@ -3507,6 +3521,11 @@ expect@^27.5.1: jest-matcher-utils "^27.5.1" jest-message-util "^27.5.1" +express-rate-limit@^6.7.0: + version "6.7.1" + resolved "https://registry.yarnpkg.com/express-rate-limit/-/express-rate-limit-6.7.1.tgz#ca93de8eaa25878b539d478948fc94592742e526" + integrity sha512-eH4VgI64Nowd2vC5Xylx0lLYovWIp2gRFtTklWDbhSDydGAPQUjvr1B7aQ2/ZADrAi6bJ51qSizKIXWAZ1WCQw== + extend-shallow@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f" @@ -3934,7 +3953,7 @@ has@^1.0.3: dependencies: function-bind "^1.1.1" -he@^1.1.0: +he@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f" integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw== @@ -4533,6 +4552,16 @@ jest-jasmine2@^27.5.1: pretty-format "^27.5.1" throat "^6.0.1" +jest-junit@^16.0.0: + version "16.0.0" + resolved "https://registry.yarnpkg.com/jest-junit/-/jest-junit-16.0.0.tgz#d838e8c561cf9fdd7eb54f63020777eee4136785" + integrity sha512-A94mmw6NfJab4Fg/BlvVOUXzXgF0XIH6EmTgJ5NDPp4xoKq0Kr7sErb+4Xs9nZvu58pJojz5RFGpqnZYJTrRfQ== + dependencies: + mkdirp "^1.0.4" + strip-ansi "^6.0.1" + uuid "^8.3.2" + xml "^1.0.1" + jest-leak-detector@^27.5.1: version "27.5.1" resolved "https://registry.yarnpkg.com/jest-leak-detector/-/jest-leak-detector-27.5.1.tgz#6ec9d54c3579dd6e3e66d70e3498adf80fde3fb8" @@ -4959,6 +4988,14 @@ kleur@^3.0.3: resolved "https://registry.yarnpkg.com/kleur/-/kleur-3.0.3.tgz#a79c9ecc86ee1ce3fa6206d1216c501f147fc07e" integrity sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w== +launch-editor@^2.6.0: + version "2.6.0" + resolved "https://registry.yarnpkg.com/launch-editor/-/launch-editor-2.6.0.tgz#4c0c1a6ac126c572bd9ff9a30da1d2cae66defd7" + integrity sha512-JpDCcQnyAAzZZaZ7vEiSqL690w7dAEyLao+KC96zBplnYbJS7TYNjvM3M7y3dGz+v7aIsJk3hllWuc0kWAjyRQ== + dependencies: + picocolors "^1.0.0" + shell-quote "^1.7.3" + leven@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/leven/-/leven-3.1.0.tgz#77891de834064cccba82ae7842bb6b14a13ed7f2" @@ -5213,6 +5250,11 @@ mixme@^0.5.1: resolved "https://registry.yarnpkg.com/mixme/-/mixme-0.5.4.tgz#8cb3bd0cd32a513c161bf1ca99d143f0bcf2eff3" integrity sha512-3KYa4m4Vlqx98GPdOHghxSdNtTvcP8E0kkaJ5Dlh+h2DRzF7zpuVVcA8B0QpKd11YJeP9QQ7ASkKzOeu195Wzw== +mkdirp@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" + integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== + mkdist@^0.3.3: version "0.3.10" resolved "https://registry.yarnpkg.com/mkdist/-/mkdist-0.3.10.tgz#44154c4ced16706763dfa8f79cdf84b396bc6b9d" @@ -5241,6 +5283,11 @@ ms@2.1.2: resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== +nanoid@^3.3.6: + version "3.3.6" + resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.6.tgz#443380c856d6e9f9824267d960b4236ad583ea4c" + integrity sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA== + nanomatch@^1.2.9: version "1.2.13" resolved "https://registry.yarnpkg.com/nanomatch/-/nanomatch-1.2.13.tgz#b87a8aa4fc0de8fe6be88895b38983ff265bd119" @@ -5589,6 +5636,15 @@ posix-character-classes@^0.1.0: resolved "https://registry.yarnpkg.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab" integrity sha1-AerA/jta9xoqbAL+q7jB/vfgDqs= +postcss@^8.4.14: + version "8.4.26" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.26.tgz#1bc62ab19f8e1e5463d98cf74af39702a00a9e94" + integrity sha512-jrXHFF8iTloAenySjM/ob3gSj7pCu0Ji49hnjqzsgSRa50hkWCKD0HQ+gMNJkW38jBI68MpAAg7ZWwHwX8NMMw== + dependencies: + nanoid "^3.3.6" + picocolors "^1.0.0" + source-map-js "^1.0.2" + preferred-pm@^3.0.0: version "3.0.3" resolved "https://registry.yarnpkg.com/preferred-pm/-/preferred-pm-3.0.3.tgz#1b6338000371e3edbce52ef2e4f65eb2e73586d6" @@ -5962,10 +6018,10 @@ saxes@^5.0.1: dependencies: xmlchars "^2.2.0" -scule@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/scule/-/scule-0.2.1.tgz#0c1dc847b18e07219ae9a3832f2f83224e2079dc" - integrity sha512-M9gnWtn3J0W+UhJOHmBxBTwv8mZCan5i1Himp60t6vvZcor0wr+IM0URKmIglsWJ7bRujNAVVN77fp+uZaWoKg== +scule@^0.3.2: + version "0.3.2" + resolved "https://registry.yarnpkg.com/scule/-/scule-0.3.2.tgz#472445cecd8357165a94a067f78cee40e700b596" + integrity sha512-zIvPdjOH8fv8CgrPT5eqtxHQXmPNnV/vHJYffZhE43KZkvULvpCTvOt1HPlFaCZx287INL9qaqrZg34e8NgI4g== "semver@2 || 3 || 4 || 5", semver@^5.4.1, semver@^5.5.0, semver@^5.6.0: version "5.7.1" @@ -6028,6 +6084,11 @@ shebang-regex@^3.0.0: resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== +shell-quote@^1.7.3: + version "1.8.1" + resolved "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.8.1.tgz#6dbf4db75515ad5bac63b4f1894c3a154c766680" + integrity sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA== + side-channel@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.4.tgz#efce5c8fdc104ee751b25c58d4290011fa5ea2cf" @@ -6144,6 +6205,11 @@ sort-package-json@^1.50.0: is-plain-obj "2.1.0" sort-object-keys "^1.1.3" +source-map-js@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.0.2.tgz#adbc361d9c62df380125e7f161f71c826f1e490c" + integrity sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw== + source-map-resolve@^0.5.0, source-map-resolve@^0.5.2: version "0.5.3" resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.5.3.tgz#190866bece7553e1f8f267a2ee82c606b5509a1a" @@ -6634,6 +6700,11 @@ use@^3.1.0: resolved "https://registry.yarnpkg.com/use/-/use-3.1.1.tgz#d50c8cac79a19fbc20f2911f56eb973f4e10070f" integrity sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ== +uuid@^8.3.2: + version "8.3.2" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2" + integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== + v8-compile-cache@^2.0.3, v8-compile-cache@^2.3.0: version "2.3.0" resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz#2de19618c66dc247dcfb6f99338035d8245a2cee" @@ -6686,23 +6757,26 @@ vue-jest@3.0.7: tsconfig "^7.0.0" vue-template-es2015-compiler "^1.6.0" -vue-template-compiler@2.6.14: - version "2.6.14" - resolved "https://registry.yarnpkg.com/vue-template-compiler/-/vue-template-compiler-2.6.14.tgz#a2f0e7d985670d42c9c9ee0d044fed7690f4f763" - integrity sha512-ODQS1SyMbjKoO1JBJZojSw6FE4qnh9rIpUZn2EUT86FKizx9uH5z6uXiIrm4/Nb/gwxTi/o17ZDEGWAXHvtC7g== +vue-template-compiler@2.7.14: + version "2.7.14" + resolved "https://registry.yarnpkg.com/vue-template-compiler/-/vue-template-compiler-2.7.14.tgz#4545b7dfb88090744c1577ae5ac3f964e61634b1" + integrity sha512-zyA5Y3ArvVG0NacJDkkzJuPQDF8RFeRlzV2vLeSnhSpieO6LK2OVbdLPi5MPPs09Ii+gMO8nY4S3iKQxBxDmWQ== dependencies: de-indent "^1.0.2" - he "^1.1.0" + he "^1.2.0" vue-template-es2015-compiler@^1.6.0: version "1.9.1" resolved "https://registry.yarnpkg.com/vue-template-es2015-compiler/-/vue-template-es2015-compiler-1.9.1.tgz#1ee3bc9a16ecbf5118be334bb15f9c46f82f5825" integrity sha512-4gDntzrifFnCEvyoO8PqyJDmguXgVPxKiIxrBKjIowvL9l+N66196+72XVYR8BBf1Uv1Fgt3bGevJ+sEmxfZzw== -vue@^2.6.14: - version "2.6.14" - resolved "https://registry.yarnpkg.com/vue/-/vue-2.6.14.tgz#e51aa5250250d569a3fbad3a8a5a687d6036e235" - integrity sha512-x2284lgYvjOMj3Za7kqzRcUSxBboHqtgRE2zlos1qWaOye5yUmHn42LB1250NJBLRwEcdrB0JRwyPTEPhfQjiQ== +vue@^2.7.14: + version "2.7.14" + resolved "https://registry.yarnpkg.com/vue/-/vue-2.7.14.tgz#3743dcd248fd3a34d421ae456b864a0246bafb17" + integrity sha512-b2qkFyOM0kwqWFuQmgd4o+uHGU7T+2z3T+WQp8UBjADfEv2n4FEMffzBmCKNP0IGzOEEfYjvtcC62xaSKeQDrQ== + dependencies: + "@vue/compiler-sfc" "2.7.14" + csstype "^3.1.0" vuex@^3.6.2: version "3.6.2" @@ -6843,6 +6917,11 @@ xml-name-validator@^3.0.0: resolved "https://registry.yarnpkg.com/xml-name-validator/-/xml-name-validator-3.0.0.tgz#6ae73e06de4d8c6e47f9fb181f78d648ad457c6a" integrity sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw== +xml@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/xml/-/xml-1.0.1.tgz#78ba72020029c5bc87b8a81a3cfcd74b4a2fc1e5" + integrity sha512-huCv9IH9Tcf95zuYCsQraZtWnJvBtLVE0QHMOs8bWyZAFZNDcYjsPq1nEx8jKA9y+Beo9v+7OBPRisQTjinQMw== + xmlchars@^2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/xmlchars/-/xmlchars-2.2.0.tgz#060fe1bcb7f9c76fe2a17db86a9bc3ab894210cb"