├── src ├── index.ts └── types.d.ts ├── .nvmrc ├── apps ├── drupal-js-sdk-server │ ├── patches │ │ └── .gitkeep │ ├── web │ │ ├── .gitignore │ │ ├── .eslintrc.json │ │ ├── INSTALL.txt │ │ ├── .eslintignore │ │ ├── sites │ │ │ └── README.txt │ │ └── index.php │ ├── config │ │ └── sync │ │ │ ├── language │ │ │ └── es │ │ │ │ ├── user.role.author.yml │ │ │ │ ├── user.role.editor.yml │ │ │ │ ├── language.entity.en.yml │ │ │ │ ├── language.entity.es.yml │ │ │ │ ├── user.settings.yml │ │ │ │ ├── image.style.wide.yml │ │ │ │ ├── search.page.help_search.yml │ │ │ │ ├── search.page.node_search.yml │ │ │ │ ├── search.page.user_search.yml │ │ │ │ ├── core.date_format.html_month.yml │ │ │ │ ├── core.date_format.html_time.yml │ │ │ │ ├── core.date_format.html_year.yml │ │ │ │ ├── core.entity_view_mode.node.rss.yml │ │ │ │ ├── filter.format.basic_html.yml │ │ │ │ ├── filter.format.full_html.yml │ │ │ │ ├── image.style.large.yml │ │ │ │ ├── image.style.medium.yml │ │ │ │ ├── language.entity.und.yml │ │ │ │ ├── language.entity.zxx.yml │ │ │ │ ├── responsive_image.styles.wide.yml │ │ │ │ ├── shortcut.set.default.yml │ │ │ │ ├── user.role.administrator.yml │ │ │ │ ├── user.role.anonymous.yml │ │ │ │ ├── core.date_format.html_date.yml │ │ │ │ ├── core.date_format.html_week.yml │ │ │ │ ├── core.entity_view_mode.media.square.yml │ │ │ │ ├── core.entity_view_mode.node.card.yml │ │ │ │ ├── core.entity_view_mode.node.teaser.yml │ │ │ │ ├── core.entity_view_mode.user.compact.yml │ │ │ │ ├── field.field.node.article.field_body.yml │ │ │ │ ├── field.field.node.page.field_body.yml │ │ │ │ ├── filter.format.plain_text.yml │ │ │ │ ├── image.style.max_325x325.yml │ │ │ │ ├── image.style.max_650x650.yml │ │ │ │ ├── image.style.square_large.yml │ │ │ │ ├── image.style.square_medium.yml │ │ │ │ ├── image.style.square_small.yml │ │ │ │ ├── image.style.thumbnail.yml │ │ │ │ ├── responsive_image.styles.hero.yml │ │ │ │ ├── responsive_image.styles.narrow.yml │ │ │ │ ├── responsive_image.styles.square.yml │ │ │ │ ├── block.block.claro_help.yml │ │ │ │ ├── block.block.umami_help.yml │ │ │ │ ├── core.date_format.html_datetime.yml │ │ │ │ ├── core.date_format.long.yml │ │ │ │ ├── core.date_format.short.yml │ │ │ │ ├── core.entity_form_mode.user.register.yml │ │ │ │ ├── field.field.media.image.field_media_image.yml │ │ │ │ ├── filter.format.restricted_html.yml │ │ │ │ ├── image.style.large_21_9.yml │ │ │ │ ├── image.style.max_1300x1300.yml │ │ │ │ ├── image.style.max_2600x2600.yml │ │ │ │ ├── image.style.medium_21_9.yml │ │ │ │ ├── image.style.medium_8_7.yml │ │ │ │ ├── image.style.small_21_9.yml │ │ │ │ ├── responsive_image.styles.3_2_image.yml │ │ │ │ ├── system.action.media_save_action.yml │ │ │ │ ├── user.role.authenticated.yml │ │ │ │ ├── core.date_format.medium.yml │ │ │ │ ├── core.entity_view_mode.block_content.full.yml │ │ │ │ ├── core.entity_view_mode.media.full.yml │ │ │ │ ├── core.entity_view_mode.media.medium_8_7.yml │ │ │ │ ├── core.entity_view_mode.node.card_common.yml │ │ │ │ ├── core.entity_view_mode.node.full.yml │ │ │ │ ├── core.entity_view_mode.user.full.yml │ │ │ │ ├── field.field.block_content.basic.field_body.yml │ │ │ │ ├── field.field.node.page.layout_builder__layout.yml │ │ │ │ ├── field.field.node.recipe.field_difficulty.yml │ │ │ │ ├── field.field.node.recipe.layout_builder__layout.yml │ │ │ │ ├── image.style.large_21_9_2x.yml │ │ │ │ ├── image.style.large_3_2_2x.yml │ │ │ │ ├── image.style.large_3_2_768x512.yml │ │ │ │ ├── image.style.medium_3_2_2x.yml │ │ │ │ ├── image.style.medium_3_2_600x400.yml │ │ │ │ ├── system.action.media_delete_action.yml │ │ │ │ ├── system.action.media_publish_action.yml │ │ │ │ ├── system.action.node_delete_action.yml │ │ │ │ ├── system.action.node_save_action.yml │ │ │ │ ├── block.block.umami_local_tasks.yml │ │ │ │ ├── core.date_format.fallback.yml │ │ │ │ ├── core.date_format.html_yearless_date.yml │ │ │ │ ├── field.field.block_content.banner_block.field_title.yml │ │ │ │ ├── field.field.media.document.field_media_document.yml │ │ │ │ ├── field.field.node.article.layout_builder__layout.yml │ │ │ │ ├── responsive_image.styles.hero_or_banner.yml │ │ │ │ ├── system.action.media_unpublish_action.yml │ │ │ │ ├── system.action.node_make_sticky_action.yml │ │ │ │ ├── system.action.node_publish_action.yml │ │ │ │ ├── block.block.claro_messages.yml │ │ │ │ ├── block.block.umami_branding.yml │ │ │ │ ├── block.block.umami_messages.yml │ │ │ │ ├── core.entity_view_mode.media.responsive_3x2.yml │ │ │ │ ├── core.entity_view_mode.node.search_index.yml │ │ │ │ ├── field.field.block_content.banner_block.field_summary.yml │ │ │ │ ├── field.field.node.recipe.field_recipe_instruction.yml │ │ │ │ ├── image.style.scale_crop_7_3_large.yml │ │ │ │ ├── block.block.claro_page_title.yml │ │ │ │ ├── block.block.umami_main_menu.yml │ │ │ │ ├── block.block.umami_page_title.yml │ │ │ │ ├── core.base_field_override.node.recipe.title.yml │ │ │ │ ├── core.date_format.umami_dates.yml │ │ │ │ ├── core.entity_form_mode.media.media_library.yml │ │ │ │ ├── core.entity_view_mode.media.media_library.yml │ │ │ │ ├── field.field.block_content.disclaimer_block.field_copyright.yml │ │ │ │ ├── field.field.media.audio.field_media_audio_file.yml │ │ │ │ ├── field.field.media.video.field_media_video_file.yml │ │ │ │ ├── image.style.media_library.yml │ │ │ │ ├── system.action.node_make_unsticky_action.yml │ │ │ │ ├── block.block.umami_languageswitcher.yml │ │ │ │ ├── field.field.media.remote_video.field_media_oembed_video.yml │ │ │ │ ├── field.field.node.recipe.field_number_of_servings.yml │ │ │ │ ├── field.field.node.recipe.field_recipe_category.yml │ │ │ │ ├── system.action.node_unpublish_action.yml │ │ │ │ ├── block.block.claro_content.yml │ │ │ │ ├── block.block.claro_primary_local_tasks.yml │ │ │ │ ├── block.block.claro_secondary_local_tasks.yml │ │ │ │ ├── block.block.umami_account_menu.yml │ │ │ │ ├── block.block.umami_banner_recipes.yml │ │ │ │ ├── block.block.umami_content.yml │ │ │ │ ├── block.block.umami_search.yml │ │ │ │ ├── core.entity_view_mode.media.scale_crop_7_3_large.yml │ │ │ │ ├── core.entity_view_mode.node.card_common_alt.yml │ │ │ │ ├── core.entity_view_mode.taxonomy_term.full.yml │ │ │ │ ├── field.field.block_content.footer_promo_block.field_summary.yml │ │ │ │ ├── field.field.block_content.footer_promo_block.field_title.yml │ │ │ │ ├── field.field.node.article.field_media_image.yml │ │ │ │ ├── field.field.node.recipe.field_media_image.yml │ │ │ │ ├── node.type.recipe.yml │ │ │ │ ├── system.action.taxonomy_term_publish_action.yml │ │ │ │ ├── block.block.claro_breadcrumbs.yml │ │ │ │ ├── block.block.umami_breadcrumbs.yml │ │ │ │ ├── block.block.umami_disclaimer.yml │ │ │ │ ├── block.block.umami_footer_promo.yml │ │ │ │ ├── field.field.block_content.banner_block.field_content_link.yml │ │ │ │ ├── field.field.block_content.footer_promo_block.field_content_link.yml │ │ │ │ ├── media.type.audio.yml │ │ │ │ ├── media.type.video.yml │ │ │ │ ├── system.action.node_promote_action.yml │ │ │ │ ├── system.action.node_unpromote_action.yml │ │ │ │ ├── system.action.taxonomy_term_unpublish_action.yml │ │ │ │ ├── system.action.user_block_user_action.yml │ │ │ │ ├── block.block.claro_local_actions.yml │ │ │ │ ├── block.block.umami_banner_home.yml │ │ │ │ ├── block.block.umami_footer.yml │ │ │ │ ├── block.block.umami_views_block__articles_aside_block_1.yml │ │ │ │ ├── block.block.umami_views_block__recipe_collections_block.yml │ │ │ │ ├── field.field.user.user.user_picture.yml │ │ │ │ ├── system.action.user_unblock_user_action.yml │ │ │ │ ├── system.menu.admin.yml │ │ │ │ ├── system.menu.footer.yml │ │ │ │ ├── block.block.claro_help_search.yml │ │ │ │ ├── core.entity_view_mode.node.search_result.yml │ │ │ │ ├── field.field.block_content.banner_block.field_media_image.yml │ │ │ │ ├── field.field.block_content.disclaimer_block.field_disclaimer.yml │ │ │ │ ├── system.action.user_cancel_user_action.yml │ │ │ │ ├── system.menu.main.yml │ │ │ │ ├── contact.form.feedback.yml │ │ │ │ ├── contact.form.personal.yml │ │ │ │ ├── field.field.block_content.footer_promo_block.field_media_image.yml │ │ │ │ ├── field.field.node.recipe.field_cooking_time.yml │ │ │ │ ├── block_content.type.basic.yml │ │ │ │ ├── media.type.document.yml │ │ │ │ ├── media.type.image.yml │ │ │ │ ├── field.field.node.recipe.field_preparation_time.yml │ │ │ │ ├── media.type.remote_video.yml │ │ │ │ ├── field.field.node.recipe.field_summary.yml │ │ │ │ ├── system.menu.tools.yml │ │ │ │ ├── system.menu.account.yml │ │ │ │ ├── system.maintenance.yml │ │ │ │ ├── taxonomy.vocabulary.tags.yml │ │ │ │ ├── taxonomy.vocabulary.recipe_category.yml │ │ │ │ ├── core.base_field_override.node.page.promote.yml │ │ │ │ ├── field.field.node.recipe.field_ingredients.yml │ │ │ │ ├── node.type.page.yml │ │ │ │ ├── field.storage.node.field_difficulty.yml │ │ │ │ ├── field.field.node.article.field_tags.yml │ │ │ │ ├── field.field.node.recipe.field_tags.yml │ │ │ │ ├── node.type.article.yml │ │ │ │ ├── block_content.type.disclaimer_block.yml │ │ │ │ ├── block_content.type.footer_promo_block.yml │ │ │ │ ├── block_content.type.banner_block.yml │ │ │ │ ├── workflows.workflow.editorial.yml │ │ │ │ ├── views.view.recipe_collections.yml │ │ │ │ └── core.entity_view_display.node.recipe.full.yml │ │ │ ├── claro.settings.yml │ │ │ ├── system.image.yml │ │ │ ├── dblog.settings.yml │ │ │ ├── field.settings.yml │ │ │ ├── node.settings.yml │ │ │ ├── system.image.gd.yml │ │ │ ├── system.logging.yml │ │ │ ├── automated_cron.settings.yml │ │ │ ├── field_ui.settings.yml │ │ │ ├── system.rss.yml │ │ │ ├── media_library.settings.yml │ │ │ ├── system.feature_flags.yml │ │ │ ├── system.theme.yml │ │ │ ├── text.settings.yml │ │ │ ├── menu_ui.settings.yml │ │ │ ├── system.advisories.yml │ │ │ ├── system.diff.yml │ │ │ ├── announcements_feed.settings.yml │ │ │ ├── filter.settings.yml │ │ │ ├── jsonapi.settings.yml │ │ │ ├── system.file.yml │ │ │ ├── taxonomy.settings.yml │ │ │ ├── user.flood.yml │ │ │ ├── system.cron.yml │ │ │ ├── contact.settings.yml │ │ │ ├── image.settings.yml │ │ │ ├── system.maintenance.yml │ │ │ ├── shortcut.set.default.yml │ │ │ ├── media.settings.yml │ │ │ ├── system.date.yml │ │ │ ├── core.menu.static_menu_link_overrides.yml │ │ │ ├── system.mail.yml │ │ │ ├── core.date_format.html_date.yml │ │ │ ├── core.date_format.html_month.yml │ │ │ ├── core.date_format.html_week.yml │ │ │ ├── core.date_format.html_year.yml │ │ │ ├── language.entity.en.yml │ │ │ ├── language.entity.es.yml │ │ │ ├── core.date_format.html_time.yml │ │ │ ├── language.entity.und.yml │ │ │ ├── core.date_format.long.yml │ │ │ ├── core.date_format.short.yml │ │ │ ├── core.date_format.umami_dates.yml │ │ │ ├── language.entity.zxx.yml │ │ │ ├── system.menu.footer.yml │ │ │ ├── system.menu.main.yml │ │ │ ├── core.date_format.medium.yml │ │ │ ├── system.menu.admin.yml │ │ │ ├── core.date_format.fallback.yml │ │ │ ├── language.mappings.yml │ │ │ ├── language.negotiation.yml │ │ │ ├── system.menu.tools.yml │ │ │ ├── core.date_format.html_datetime.yml │ │ │ ├── core.date_format.html_yearless_date.yml │ │ │ ├── update.settings.yml │ │ │ ├── user.role.administrator.yml │ │ │ ├── system.menu.account.yml │ │ │ ├── block_content.type.basic.yml │ │ │ ├── core.entity_view_mode.node.rss.yml │ │ │ ├── core.entity_view_mode.node.card.yml │ │ │ ├── core.entity_view_mode.node.teaser.yml │ │ │ ├── core.entity_view_mode.user.compact.yml │ │ │ ├── search.page.help_search.yml │ │ │ ├── core.entity_form_mode.user.register.yml │ │ │ ├── core.entity_view_mode.media.square.yml │ │ │ ├── core.entity_view_mode.node.full.yml │ │ │ ├── core.entity_view_mode.user.full.yml │ │ │ ├── search.page.user_search.yml │ │ │ ├── core.entity_view_mode.media.full.yml │ │ │ ├── taxonomy.vocabulary.tags.yml │ │ │ ├── core.entity_view_mode.media.medium_8_7.yml │ │ │ ├── core.entity_view_mode.node.card_common.yml │ │ │ ├── core.entity_view_mode.node.search_index.yml │ │ │ ├── block_content.type.disclaimer_block.yml │ │ │ ├── contact.form.personal.yml │ │ │ ├── search.page.node_search.yml │ │ │ ├── system.action.media_save_action.yml │ │ │ ├── system.action.node_save_action.yml │ │ │ ├── core.entity_view_mode.block_content.full.yml │ │ │ ├── core.entity_view_mode.media.responsive_3x2.yml │ │ │ ├── core.entity_view_mode.node.card_common_alt.yml │ │ │ ├── system.action.node_delete_action.yml │ │ │ ├── system.action.media_delete_action.yml │ │ │ ├── system.action.node_publish_action.yml │ │ │ ├── contact.form.feedback.yml │ │ │ ├── core.entity_view_mode.node.search_result.yml │ │ │ ├── core.entity_view_mode.taxonomy_term.full.yml │ │ │ ├── system.action.media_publish_action.yml │ │ │ ├── system.action.node_make_sticky_action.yml │ │ │ ├── system.action.node_promote_action.yml │ │ │ ├── core.entity_view_mode.media.scale_crop_7_3_large.yml │ │ │ ├── rest.resource.entity.menu.yml │ │ │ ├── rest.resource.user_registration.yml │ │ │ ├── system.action.media_unpublish_action.yml │ │ │ ├── system.action.node_unpromote_action.yml │ │ │ ├── system.action.node_unpublish_action.yml │ │ │ ├── system.action.user_add_role_action.author.yml │ │ │ ├── system.action.user_add_role_action.editor.yml │ │ │ ├── system.action.user_block_user_action.yml │ │ │ ├── taxonomy.vocabulary.recipe_category.yml │ │ │ ├── block_content.type.footer_promo_block.yml │ │ │ ├── system.action.node_make_unsticky_action.yml │ │ │ ├── system.action.user_unblock_user_action.yml │ │ │ ├── system.site.yml │ │ │ ├── system.action.user_cancel_user_action.yml │ │ │ ├── system.action.user_remove_role_action.author.yml │ │ │ ├── system.action.user_remove_role_action.editor.yml │ │ │ ├── language.content_settings.path_alias.path_alias.yml │ │ │ ├── node.type.page.yml │ │ │ ├── rest.resource.entity.contact_message.yml │ │ │ ├── rest.resource.entity.user.yml │ │ │ ├── system.action.taxonomy_term_publish_action.yml │ │ │ ├── system.action.user_add_role_action.administrator.yml │ │ │ ├── core.entity_view_mode.media.media_library.yml │ │ │ ├── core.entity_form_mode.media.media_library.yml │ │ │ ├── node.type.article.yml │ │ │ ├── system.action.taxonomy_term_unpublish_action.yml │ │ │ ├── block_content.type.banner_block.yml │ │ │ ├── rest.resource.entity.file.yml │ │ │ ├── rest.resource.entity.node.yml │ │ │ ├── system.action.user_remove_role_action.administrator.yml │ │ │ ├── rest.resource.entity.media.yml │ │ │ ├── search.settings.yml │ │ │ ├── media.type.image.yml │ │ │ ├── system.theme.global.yml │ │ │ ├── file.settings.yml │ │ │ ├── media.type.audio.yml │ │ │ ├── media.type.video.yml │ │ │ ├── rest.resource.entity.taxonomy_term.yml │ │ │ ├── media.type.document.yml │ │ │ ├── node.type.recipe.yml │ │ │ ├── block.block.claro_help.yml │ │ │ ├── block.block.claro_page_title.yml │ │ │ ├── block.block.umami_help.yml │ │ │ ├── language.content_settings.node.page.yml │ │ │ ├── field.storage.node.body.yml │ │ │ ├── language.content_settings.media.image.yml │ │ │ ├── language.content_settings.node.recipe.yml │ │ │ ├── block.block.claro_local_actions.yml │ │ │ ├── field.storage.node.field_body.yml │ │ │ ├── language.content_settings.node.article.yml │ │ │ ├── block.block.claro_content.yml │ │ │ ├── block.block.umami_content.yml │ │ │ ├── block.block.umami_local_tasks.yml │ │ │ ├── field.storage.node.field_summary.yml │ │ │ ├── core.base_field_override.node.recipe.title.yml │ │ │ ├── block.block.claro_breadcrumbs.yml │ │ │ ├── block.block.claro_messages.yml │ │ │ ├── block.block.umami_messages.yml │ │ │ ├── field.storage.block_content.body.yml │ │ │ ├── language.content_settings.block_content.basic.yml │ │ │ ├── language.content_settings.taxonomy_term.tags.yml │ │ │ ├── user.settings.yml │ │ │ ├── block.block.umami_search.yml │ │ │ ├── field.storage.block_content.field_body.yml │ │ │ ├── block.block.claro_primary_local_tasks.yml │ │ │ ├── field.storage.node.field_recipe_instruction.yml │ │ │ ├── field.storage.node.field_tags.yml │ │ │ ├── field.storage.node.field_cooking_time.yml │ │ │ ├── block.block.claro_secondary_local_tasks.yml │ │ │ ├── field.storage.block_content.field_copyright.yml │ │ │ ├── field.storage.node.field_media_image.yml │ │ │ ├── field.storage.block_content.field_content_link.yml │ │ │ ├── field.storage.block_content.field_disclaimer.yml │ │ │ ├── field.storage.block_content.field_summary.yml │ │ │ ├── field.storage.node.field_preparation_time.yml │ │ │ ├── language.content_settings.block_content.banner_block.yml │ │ │ ├── field.storage.node.layout_builder__layout.yml │ │ │ ├── system.performance.yml │ │ │ ├── field.storage.node.field_number_of_servings.yml │ │ │ ├── locale.settings.yml │ │ │ ├── block.block.umami_languageswitcher.yml │ │ │ ├── field.storage.node.field_ingredients.yml │ │ │ ├── language.content_settings.block_content.disclaimer_block.yml │ │ │ ├── language.content_settings.taxonomy_term.recipe_category.yml │ │ │ ├── field.storage.node.field_recipe_category.yml │ │ │ ├── language.content_settings.block_content.footer_promo_block.yml │ │ │ ├── field.storage.block_content.field_media_image.yml │ │ │ ├── user.role.anonymous.yml │ │ │ ├── core.base_field_override.node.page.promote.yml │ │ │ ├── field.storage.block_content.field_title.yml │ │ │ ├── field.storage.media.field_media_oembed_video.yml │ │ │ ├── block.block.umami_branding.yml │ │ │ ├── field.field.node.page.field_body.yml │ │ │ ├── field.field.node.article.field_body.yml │ │ │ └── media.type.remote_video.yml │ ├── .ddev │ │ ├── addon-metadata │ │ │ └── notification-server │ │ │ │ └── manifest.yaml │ │ ├── commands │ │ │ └── redis │ │ │ │ ├── redis-flush │ │ │ │ └── redis-cli │ │ ├── redis │ │ │ └── redis.conf │ │ └── docker-compose.redis.yaml │ ├── recipes │ │ └── README.txt │ └── .editorconfig └── demo-svelte-spa │ ├── src │ ├── app.css │ ├── vite-env.d.ts │ ├── assets │ │ └── shibin.jpg │ ├── lib │ │ ├── Counter.svelte │ │ └── components │ │ │ └── SectionHeader.svelte │ └── main.js │ ├── postcss.config.cjs │ ├── vite.config.js │ ├── tailwind.config.cjs │ ├── svelte.config.js │ ├── .gitignore │ └── index.html ├── packages ├── auth │ ├── test-build.js │ ├── src │ │ ├── index.ts │ │ └── types.d.ts │ ├── .eslintignore │ ├── .gitignore │ ├── tsconfig.eslint.json │ ├── tsconfig copy.json │ ├── tsconfig.json │ ├── jestconfig.json │ └── .eslintrc ├── xhr │ ├── test-build.js │ ├── .eslintignore │ ├── src │ │ ├── index.ts │ │ ├── types.d.ts │ │ └── __tests__ │ │ │ ├── FetchClientErrorScenarios.test.ts │ │ │ └── FetchClientResponseErrors.test.ts │ ├── .gitignore │ ├── typedoc.json │ ├── tsconfig.eslint.json │ ├── tsconfig.json │ ├── jestconfig.json │ └── .eslintrc ├── interfaces │ ├── test-build.js │ ├── .eslintignore │ ├── typedoc.json │ ├── .gitignore │ ├── tsconfig.eslint.json │ ├── src │ │ ├── session.ts │ │ ├── types.d.ts │ │ ├── error.ts │ │ ├── index.ts │ │ ├── core.ts │ │ └── __tests__ │ │ │ └── error.test.ts │ ├── tsconfig.json │ ├── jestconfig.json │ └── .eslintrc ├── jsonapi │ ├── src │ │ └── index.ts │ ├── tsconfig.json │ └── jestconfig.json ├── menu │ ├── src │ │ ├── index.ts │ │ └── types.d.ts │ ├── .eslintignore │ ├── typedoc.json │ ├── test-build.js │ ├── .gitignore │ ├── tsconfig.eslint.json │ ├── tsconfig.json │ ├── jestconfig.json │ └── .eslintrc ├── role │ ├── src │ │ ├── index.ts │ │ ├── types.d.ts │ │ ├── __tests__ │ │ │ └── Defaults.test.ts │ │ └── DrupalRole.ts │ ├── .eslintignore │ ├── typedoc.json │ ├── .gitignore │ ├── tsconfig.eslint.json │ ├── tsconfig.json │ ├── test-build.js │ ├── jestconfig.json │ ├── .eslintrc │ └── README.md ├── core │ ├── .eslintignore │ ├── src │ │ ├── index.ts │ │ ├── types.d.ts │ │ └── Config.ts │ ├── .gitignore │ ├── tsconfig.eslint.json │ ├── tsconfig.json │ ├── jestconfig.json │ ├── test-build.js │ └── .eslintrc ├── error │ ├── .eslintignore │ ├── src │ │ ├── index.ts │ │ ├── types.d.ts │ │ └── __tests__ │ │ │ └── DrupalError.test.ts │ ├── typedoc.json │ ├── .gitignore │ ├── tsconfig.eslint.json │ ├── tsconfig.json │ ├── test-build.js │ ├── jestconfig.json │ └── .eslintrc ├── settings │ ├── .eslintignore │ ├── src │ │ ├── index.ts │ │ ├── types.d.ts │ │ ├── DrupalSettings.ts │ │ └── __tests__ │ │ │ └── Defaults.test.ts │ ├── typedoc.json │ ├── .gitignore │ ├── tsconfig.eslint.json │ ├── tsconfig.json │ ├── test-build.js │ ├── jestconfig.json │ ├── README.md │ └── .eslintrc ├── storage │ ├── .eslintignore │ ├── .gitignore │ ├── typedoc.json │ ├── tsconfig.eslint.json │ ├── src │ │ ├── index.ts │ │ └── types.d.ts │ ├── tsconfig.json │ ├── test-build.js │ ├── jestconfig.json │ └── .eslintrc ├── drupal-js-sdk │ ├── .eslintignore │ ├── .gitignore │ ├── tsconfig.eslint.json │ ├── src │ │ └── types.d.ts │ ├── tsconfig.json │ ├── jestconfig.json │ ├── test-build.js │ └── .eslintrc └── entity │ ├── src │ └── index.ts │ ├── tsconfig.json │ └── jestconfig.json ├── docs └── modules │ ├── base │ ├── core.md │ ├── xhr.md │ ├── error.md │ ├── storage.md │ └── interfaces.md │ └── feature │ ├── auth.md │ ├── menu.md │ ├── role.md │ ├── entity.md │ ├── jsonapi.md │ └── settings.md ├── .husky └── commit-msg ├── commitlint.config.js ├── docker-compose.yml ├── .tools └── scripts │ ├── copy.sh │ └── replay.sh ├── tsconfig.eslint.json ├── .changeset ├── config.json ├── jsonapi-listpage-support.md ├── interfaces-pagination-types.md ├── xhr-fetch-binding-and-identity.md ├── interfaces-core-getsessionservice.md ├── menu-typed-linkset-and-tree.md ├── entity-relations-and-pagination-facade.md ├── README.md ├── docs-unify-imports-and-facade.md ├── core-default-session.md ├── fluent-entity-builder.md └── typing-tighten-entity-jsonapi.md ├── .prettierrc.json ├── codecov.yml └── tsconfig.json /src/index.ts: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.nvmrc: -------------------------------------------------------------------------------- 1 | v24.6.0 2 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/patches/.gitkeep: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /packages/auth/test-build.js: -------------------------------------------------------------------------------- 1 | process.exit(0); 2 | -------------------------------------------------------------------------------- /packages/xhr/test-build.js: -------------------------------------------------------------------------------- 1 | process.exit(0); 2 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/web/.gitignore: -------------------------------------------------------------------------------- 1 | /autoload.php -------------------------------------------------------------------------------- /docs/modules/base/core.md: -------------------------------------------------------------------------------- 1 | ../../../packages/core/README.md -------------------------------------------------------------------------------- /docs/modules/base/xhr.md: -------------------------------------------------------------------------------- 1 | ../../../packages/xhr/README.md -------------------------------------------------------------------------------- /packages/interfaces/test-build.js: -------------------------------------------------------------------------------- 1 | process.exit(0); 2 | -------------------------------------------------------------------------------- /docs/modules/base/error.md: -------------------------------------------------------------------------------- 1 | ../../../packages/error/README.md -------------------------------------------------------------------------------- /docs/modules/base/storage.md: -------------------------------------------------------------------------------- 1 | ../../../packages/storage/README.md -------------------------------------------------------------------------------- /docs/modules/feature/auth.md: -------------------------------------------------------------------------------- 1 | ../../../packages/auth/README.md -------------------------------------------------------------------------------- /docs/modules/feature/menu.md: -------------------------------------------------------------------------------- 1 | ../../../packages/menu/README.md -------------------------------------------------------------------------------- /docs/modules/feature/role.md: -------------------------------------------------------------------------------- 1 | ../../../packages/role/README.md -------------------------------------------------------------------------------- /docs/modules/feature/entity.md: -------------------------------------------------------------------------------- 1 | ../../../packages/entity/README.md -------------------------------------------------------------------------------- /docs/modules/feature/jsonapi.md: -------------------------------------------------------------------------------- 1 | ../../../packages/jsonapi/README.md -------------------------------------------------------------------------------- /docs/modules/feature/settings.md: -------------------------------------------------------------------------------- 1 | ../../../packages/settings/README.md -------------------------------------------------------------------------------- /docs/modules/base/interfaces.md: -------------------------------------------------------------------------------- 1 | ../../../packages/interfaces/README.md -------------------------------------------------------------------------------- /packages/auth/src/index.ts: -------------------------------------------------------------------------------- 1 | export { DrupalAuth } from "./DrupalAuth"; 2 | -------------------------------------------------------------------------------- /packages/jsonapi/src/index.ts: -------------------------------------------------------------------------------- 1 | export * from "./JsonApiEntityAdapter"; 2 | -------------------------------------------------------------------------------- /packages/menu/src/index.ts: -------------------------------------------------------------------------------- 1 | export { DrupalMenu } from "./DrupalMenu"; 2 | -------------------------------------------------------------------------------- /packages/role/src/index.ts: -------------------------------------------------------------------------------- 1 | export { DrupalRole } from "./DrupalRole"; 2 | -------------------------------------------------------------------------------- /packages/xhr/.eslintignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | dist 3 | docs 4 | lib 5 | site -------------------------------------------------------------------------------- /packages/auth/.eslintignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | dist 3 | docs 4 | lib 5 | site -------------------------------------------------------------------------------- /packages/core/.eslintignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | dist 3 | docs 4 | lib 5 | site -------------------------------------------------------------------------------- /packages/error/.eslintignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | dist 3 | docs 4 | lib 5 | site -------------------------------------------------------------------------------- /packages/error/src/index.ts: -------------------------------------------------------------------------------- 1 | export { DrupalError } from "./DrupalError"; 2 | -------------------------------------------------------------------------------- /packages/menu/.eslintignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | dist 3 | docs 4 | lib 5 | site -------------------------------------------------------------------------------- /packages/role/.eslintignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | dist 3 | docs 4 | lib 5 | site -------------------------------------------------------------------------------- /packages/settings/.eslintignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | dist 3 | docs 4 | lib 5 | site -------------------------------------------------------------------------------- /packages/storage/.eslintignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | dist 3 | docs 4 | lib 5 | site -------------------------------------------------------------------------------- /packages/drupal-js-sdk/.eslintignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | dist 3 | docs 4 | lib 5 | site -------------------------------------------------------------------------------- /packages/interfaces/.eslintignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | dist 3 | docs 4 | lib 5 | site -------------------------------------------------------------------------------- /packages/menu/typedoc.json: -------------------------------------------------------------------------------- 1 | { 2 | "entryPoints": ["./src/DrupalMenu.ts"] 3 | } 4 | -------------------------------------------------------------------------------- /packages/role/typedoc.json: -------------------------------------------------------------------------------- 1 | { 2 | "entryPoints": ["./src/DrupalRole.ts"] 3 | } 4 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/language/es/user.role.author.yml: -------------------------------------------------------------------------------- 1 | label: Autor 2 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/language/es/user.role.editor.yml: -------------------------------------------------------------------------------- 1 | label: Editor 2 | -------------------------------------------------------------------------------- /packages/error/typedoc.json: -------------------------------------------------------------------------------- 1 | { 2 | "entryPoints": ["./src/DrupalError.ts"] 3 | } 4 | -------------------------------------------------------------------------------- /packages/interfaces/typedoc.json: -------------------------------------------------------------------------------- 1 | { 2 | "entryPoints": ["./src/index.ts"] 3 | } 4 | -------------------------------------------------------------------------------- /packages/settings/src/index.ts: -------------------------------------------------------------------------------- 1 | export { DrupalSettings } from "./DrupalSettings"; 2 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/language/es/language.entity.en.yml: -------------------------------------------------------------------------------- 1 | label: Inglés 2 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/language/es/language.entity.es.yml: -------------------------------------------------------------------------------- 1 | label: Español 2 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/language/es/user.settings.yml: -------------------------------------------------------------------------------- 1 | anonymous: Anónimo 2 | -------------------------------------------------------------------------------- /packages/settings/typedoc.json: -------------------------------------------------------------------------------- 1 | { 2 | "entryPoints": ["./src/DrupalSettings.ts"] 3 | } 4 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/language/es/image.style.wide.yml: -------------------------------------------------------------------------------- 1 | label: 'Ancho (1090)' 2 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/language/es/search.page.help_search.yml: -------------------------------------------------------------------------------- 1 | label: Ayuda 2 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/language/es/search.page.node_search.yml: -------------------------------------------------------------------------------- 1 | label: Contenido 2 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/language/es/search.page.user_search.yml: -------------------------------------------------------------------------------- 1 | label: Usuarios 2 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/web/.eslintrc.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "./core/.eslintrc.json" 3 | } 4 | -------------------------------------------------------------------------------- /packages/menu/test-build.js: -------------------------------------------------------------------------------- 1 | import { DrupalMenu } from "./dist/index.js"; 2 | process.exit(0); 3 | -------------------------------------------------------------------------------- /packages/xhr/src/index.ts: -------------------------------------------------------------------------------- 1 | export * from "./FetchClient"; 2 | export * from "./AxiosClient"; 3 | -------------------------------------------------------------------------------- /apps/demo-svelte-spa/src/app.css: -------------------------------------------------------------------------------- 1 | @tailwind base; 2 | @tailwind components; 3 | @tailwind utilities; 4 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/language/es/core.date_format.html_month.yml: -------------------------------------------------------------------------------- 1 | label: 'Mes HTML' 2 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/language/es/core.date_format.html_time.yml: -------------------------------------------------------------------------------- 1 | label: 'Hora HTML' 2 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/language/es/core.date_format.html_year.yml: -------------------------------------------------------------------------------- 1 | label: 'Año HTML' 2 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/language/es/core.entity_view_mode.node.rss.yml: -------------------------------------------------------------------------------- 1 | label: RSS 2 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/language/es/filter.format.basic_html.yml: -------------------------------------------------------------------------------- 1 | name: 'HTML básico' 2 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/language/es/filter.format.full_html.yml: -------------------------------------------------------------------------------- 1 | name: 'HTML completo' 2 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/language/es/image.style.large.yml: -------------------------------------------------------------------------------- 1 | label: 'Grande (480×480)' 2 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/language/es/image.style.medium.yml: -------------------------------------------------------------------------------- 1 | label: 'Medio (220×220)' 2 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/language/es/language.entity.und.yml: -------------------------------------------------------------------------------- 1 | label: 'Sin especificar' 2 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/language/es/language.entity.zxx.yml: -------------------------------------------------------------------------------- 1 | label: 'No aplicable' 2 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/language/es/responsive_image.styles.wide.yml: -------------------------------------------------------------------------------- 1 | label: Ancho 2 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/language/es/shortcut.set.default.yml: -------------------------------------------------------------------------------- 1 | label: 'Por defecto' 2 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/language/es/user.role.administrator.yml: -------------------------------------------------------------------------------- 1 | label: Administrador 2 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/language/es/user.role.anonymous.yml: -------------------------------------------------------------------------------- 1 | label: 'Usuario anónimo' 2 | -------------------------------------------------------------------------------- /packages/core/src/index.ts: -------------------------------------------------------------------------------- 1 | export { Core } from "./Core"; 2 | export { Drupal } from "./Drupal"; 3 | -------------------------------------------------------------------------------- /.husky/commit-msg: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | . "$(dirname "$0")/_/husky.sh" 3 | 4 | npx --no -- commitlint --edit "" 5 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/language/es/core.date_format.html_date.yml: -------------------------------------------------------------------------------- 1 | label: 'Fecha HTML' 2 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/language/es/core.date_format.html_week.yml: -------------------------------------------------------------------------------- 1 | label: 'Semana HTML' 2 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/language/es/core.entity_view_mode.media.square.yml: -------------------------------------------------------------------------------- 1 | label: Cuadrado 2 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/language/es/core.entity_view_mode.node.card.yml: -------------------------------------------------------------------------------- 1 | label: Tarjeta 2 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/language/es/core.entity_view_mode.node.teaser.yml: -------------------------------------------------------------------------------- 1 | label: Resumen 2 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/language/es/core.entity_view_mode.user.compact.yml: -------------------------------------------------------------------------------- 1 | label: Compacto 2 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/language/es/field.field.node.article.field_body.yml: -------------------------------------------------------------------------------- 1 | label: Cuerpo 2 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/language/es/field.field.node.page.field_body.yml: -------------------------------------------------------------------------------- 1 | label: Cuerpo 2 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/language/es/filter.format.plain_text.yml: -------------------------------------------------------------------------------- 1 | name: 'Texto sin formato' 2 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/language/es/image.style.max_325x325.yml: -------------------------------------------------------------------------------- 1 | label: 'Máximo 325x325' 2 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/language/es/image.style.max_650x650.yml: -------------------------------------------------------------------------------- 1 | label: 'Máximo 650x650' 2 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/language/es/image.style.square_large.yml: -------------------------------------------------------------------------------- 1 | label: 'Cuadrado Grande' 2 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/language/es/image.style.square_medium.yml: -------------------------------------------------------------------------------- 1 | label: 'Cuadrado Medio' 2 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/language/es/image.style.square_small.yml: -------------------------------------------------------------------------------- 1 | label: 'Cuadrado Pequeño' 2 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/language/es/image.style.thumbnail.yml: -------------------------------------------------------------------------------- 1 | label: 'Miniatura (100×100)' 2 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/language/es/responsive_image.styles.hero.yml: -------------------------------------------------------------------------------- 1 | label: Encabezado 2 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/language/es/responsive_image.styles.narrow.yml: -------------------------------------------------------------------------------- 1 | label: Estrecho 2 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/language/es/responsive_image.styles.square.yml: -------------------------------------------------------------------------------- 1 | label: Cuadrado 2 | -------------------------------------------------------------------------------- /packages/xhr/.gitignore: -------------------------------------------------------------------------------- 1 | /dist 2 | /node_modules 3 | /coverage 4 | /coverage.lcov 5 | /yarn-error.log 6 | /api -------------------------------------------------------------------------------- /packages/xhr/typedoc.json: -------------------------------------------------------------------------------- 1 | { 2 | "entryPoints": ["./src/AxiosClient.ts", "./src/FetchClient.ts"] 3 | } 4 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/language/es/block.block.claro_help.yml: -------------------------------------------------------------------------------- 1 | settings: 2 | label: Ayuda 3 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/language/es/block.block.umami_help.yml: -------------------------------------------------------------------------------- 1 | settings: 2 | label: Ayuda 3 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/language/es/core.date_format.html_datetime.yml: -------------------------------------------------------------------------------- 1 | label: 'HTML Datetime' 2 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/language/es/core.date_format.long.yml: -------------------------------------------------------------------------------- 1 | label: 'Fecha larga por defecto' 2 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/language/es/core.date_format.short.yml: -------------------------------------------------------------------------------- 1 | label: 'Fecha corta por defecto' 2 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/language/es/core.entity_form_mode.user.register.yml: -------------------------------------------------------------------------------- 1 | label: Registro 2 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/language/es/field.field.media.image.field_media_image.yml: -------------------------------------------------------------------------------- 1 | label: Imagen 2 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/language/es/filter.format.restricted_html.yml: -------------------------------------------------------------------------------- 1 | name: 'HTML Restringido' 2 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/language/es/image.style.large_21_9.yml: -------------------------------------------------------------------------------- 1 | label: 'Largo 21:9 (1440x620)' 2 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/language/es/image.style.max_1300x1300.yml: -------------------------------------------------------------------------------- 1 | label: 'Máximo 1300x1300' 2 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/language/es/image.style.max_2600x2600.yml: -------------------------------------------------------------------------------- 1 | label: 'Máximo 2600x2600' 2 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/language/es/image.style.medium_21_9.yml: -------------------------------------------------------------------------------- 1 | label: 'Medio 21:9 (1024x440)' 2 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/language/es/image.style.medium_8_7.yml: -------------------------------------------------------------------------------- 1 | label: 'Medio 8:7 (266x236)' 2 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/language/es/image.style.small_21_9.yml: -------------------------------------------------------------------------------- 1 | label: 'Pequeño 21:9 (768x330)' 2 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/language/es/responsive_image.styles.3_2_image.yml: -------------------------------------------------------------------------------- 1 | label: '3:2 Imagen' 2 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/language/es/system.action.media_save_action.yml: -------------------------------------------------------------------------------- 1 | label: 'Guardar medio' 2 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/language/es/user.role.authenticated.yml: -------------------------------------------------------------------------------- 1 | label: 'Usuario autenticado' 2 | -------------------------------------------------------------------------------- /packages/auth/.gitignore: -------------------------------------------------------------------------------- 1 | /dist 2 | /node_modules 3 | /coverage 4 | /coverage.lcov 5 | /yarn-error.log 6 | /api -------------------------------------------------------------------------------- /packages/core/.gitignore: -------------------------------------------------------------------------------- 1 | /dist 2 | /node_modules 3 | /coverage 4 | /coverage.lcov 5 | /yarn-error.log 6 | /api -------------------------------------------------------------------------------- /packages/drupal-js-sdk/.gitignore: -------------------------------------------------------------------------------- 1 | /dist 2 | /node_modules 3 | /coverage 4 | /coverage.lcov 5 | /yarn-error.log -------------------------------------------------------------------------------- /packages/error/.gitignore: -------------------------------------------------------------------------------- 1 | /dist 2 | /node_modules 3 | /coverage 4 | /coverage.lcov 5 | /yarn-error.log 6 | /api -------------------------------------------------------------------------------- /packages/menu/.gitignore: -------------------------------------------------------------------------------- 1 | /dist 2 | /node_modules 3 | /coverage 4 | /coverage.lcov 5 | /yarn-error.log 6 | /api -------------------------------------------------------------------------------- /packages/role/.gitignore: -------------------------------------------------------------------------------- 1 | /dist 2 | /node_modules 3 | /coverage 4 | /coverage.lcov 5 | /yarn-error.log 6 | /api -------------------------------------------------------------------------------- /packages/settings/.gitignore: -------------------------------------------------------------------------------- 1 | /dist 2 | /node_modules 3 | /coverage 4 | /coverage.lcov 5 | /yarn-error.log 6 | /api -------------------------------------------------------------------------------- /packages/storage/.gitignore: -------------------------------------------------------------------------------- 1 | /dist 2 | /node_modules 3 | /coverage 4 | /coverage.lcov 5 | /yarn-error.log 6 | /api -------------------------------------------------------------------------------- /apps/demo-svelte-spa/src/vite-env.d.ts: -------------------------------------------------------------------------------- 1 | /// 2 | /// 3 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/language/es/core.date_format.medium.yml: -------------------------------------------------------------------------------- 1 | label: 'Fecha mediana por defecto' 2 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/language/es/core.entity_view_mode.block_content.full.yml: -------------------------------------------------------------------------------- 1 | label: Completo 2 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/language/es/core.entity_view_mode.media.full.yml: -------------------------------------------------------------------------------- 1 | label: 'Contenido completo' 2 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/language/es/core.entity_view_mode.media.medium_8_7.yml: -------------------------------------------------------------------------------- 1 | label: 'Medio 8:7' 2 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/language/es/core.entity_view_mode.node.card_common.yml: -------------------------------------------------------------------------------- 1 | label: 'Carta común' 2 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/language/es/core.entity_view_mode.node.full.yml: -------------------------------------------------------------------------------- 1 | label: 'Contenido completo' 2 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/language/es/core.entity_view_mode.user.full.yml: -------------------------------------------------------------------------------- 1 | label: 'Cuenta de usuario' 2 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/language/es/field.field.block_content.basic.field_body.yml: -------------------------------------------------------------------------------- 1 | label: Cuerpo 2 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/language/es/field.field.node.page.layout_builder__layout.yml: -------------------------------------------------------------------------------- 1 | label: Diseño 2 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/language/es/field.field.node.recipe.field_difficulty.yml: -------------------------------------------------------------------------------- 1 | label: Dificultad 2 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/language/es/field.field.node.recipe.layout_builder__layout.yml: -------------------------------------------------------------------------------- 1 | label: Diseño 2 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/language/es/image.style.large_21_9_2x.yml: -------------------------------------------------------------------------------- 1 | label: 'Largo 21:9 2x (2880x1240)' 2 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/language/es/image.style.large_3_2_2x.yml: -------------------------------------------------------------------------------- 1 | label: 'Largo 3:2 2x (1536x1024)' 2 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/language/es/image.style.large_3_2_768x512.yml: -------------------------------------------------------------------------------- 1 | label: 'Largo 3:2 (768x512)' 2 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/language/es/image.style.medium_3_2_2x.yml: -------------------------------------------------------------------------------- 1 | label: 'Medio 3:2 2x (1200x800)' 2 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/language/es/image.style.medium_3_2_600x400.yml: -------------------------------------------------------------------------------- 1 | label: 'Medio 3:2 (600x400)' 2 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/language/es/system.action.media_delete_action.yml: -------------------------------------------------------------------------------- 1 | label: 'Eliminar medios' 2 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/language/es/system.action.media_publish_action.yml: -------------------------------------------------------------------------------- 1 | label: 'Publicar medio' 2 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/language/es/system.action.node_delete_action.yml: -------------------------------------------------------------------------------- 1 | label: 'Eliminar contenido' 2 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/language/es/system.action.node_save_action.yml: -------------------------------------------------------------------------------- 1 | label: 'Guardar contenido' 2 | -------------------------------------------------------------------------------- /packages/interfaces/.gitignore: -------------------------------------------------------------------------------- 1 | /dist 2 | /node_modules 3 | /coverage 4 | /coverage.lcov 5 | /yarn-error.log 6 | /api -------------------------------------------------------------------------------- /packages/storage/typedoc.json: -------------------------------------------------------------------------------- 1 | { 2 | "entryPoints": ["./src/StorageInMemory.ts", "./src/StorageInWeb.ts"] 3 | } 4 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/language/es/block.block.umami_local_tasks.yml: -------------------------------------------------------------------------------- 1 | settings: 2 | label: Pestañas 3 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/language/es/core.date_format.fallback.yml: -------------------------------------------------------------------------------- 1 | label: 'Formato de fecha de respaldo' 2 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/language/es/core.date_format.html_yearless_date.yml: -------------------------------------------------------------------------------- 1 | label: 'Fecha anual HTML' 2 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/language/es/field.field.block_content.banner_block.field_title.yml: -------------------------------------------------------------------------------- 1 | label: Título 2 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/language/es/field.field.media.document.field_media_document.yml: -------------------------------------------------------------------------------- 1 | label: Documento 2 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/language/es/field.field.node.article.layout_builder__layout.yml: -------------------------------------------------------------------------------- 1 | label: Diseño 2 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/language/es/responsive_image.styles.hero_or_banner.yml: -------------------------------------------------------------------------------- 1 | label: 'Receta de cocina' 2 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/language/es/system.action.media_unpublish_action.yml: -------------------------------------------------------------------------------- 1 | label: 'Medio no publicado' 2 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/language/es/system.action.node_make_sticky_action.yml: -------------------------------------------------------------------------------- 1 | label: 'Fijar contenido' 2 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/language/es/system.action.node_publish_action.yml: -------------------------------------------------------------------------------- 1 | label: 'Publicar contenido' 2 | -------------------------------------------------------------------------------- /src/types.d.ts: -------------------------------------------------------------------------------- 1 | declare namespace NodeJS { 2 | export interface Process { 3 | envType: string 4 | } 5 | } -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/claro.settings.yml: -------------------------------------------------------------------------------- 1 | third_party_settings: 2 | shortcut: 3 | module_link: true 4 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/language/es/block.block.claro_messages.yml: -------------------------------------------------------------------------------- 1 | settings: 2 | label: 'Mensajes de estado' 3 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/language/es/block.block.umami_branding.yml: -------------------------------------------------------------------------------- 1 | settings: 2 | label: 'Marca del sitio' 3 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/language/es/block.block.umami_messages.yml: -------------------------------------------------------------------------------- 1 | settings: 2 | label: 'Mensajes de estado' 3 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/language/es/core.entity_view_mode.media.responsive_3x2.yml: -------------------------------------------------------------------------------- 1 | label: 'Responsive 3x2' 2 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/language/es/core.entity_view_mode.node.search_index.yml: -------------------------------------------------------------------------------- 1 | label: 'Índice de búsqueda' 2 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/language/es/field.field.block_content.banner_block.field_summary.yml: -------------------------------------------------------------------------------- 1 | label: Resumen 2 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/language/es/field.field.node.recipe.field_recipe_instruction.yml: -------------------------------------------------------------------------------- 1 | label: Instrucciones 2 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/language/es/image.style.scale_crop_7_3_large.yml: -------------------------------------------------------------------------------- 1 | label: 'Escala recortada 7:3 largo' 2 | -------------------------------------------------------------------------------- /packages/auth/tsconfig.eslint.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { "strict": true }, 3 | "include": ["**/src/**/*.ts"] 4 | } 5 | -------------------------------------------------------------------------------- /packages/core/tsconfig.eslint.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { "strict": true }, 3 | "include": ["**/src/**/*.ts"] 4 | } 5 | -------------------------------------------------------------------------------- /packages/error/tsconfig.eslint.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { "strict": true }, 3 | "include": ["**/src/**/*.ts"] 4 | } 5 | -------------------------------------------------------------------------------- /packages/menu/tsconfig.eslint.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { "strict": true }, 3 | "include": ["**/src/**/*.ts"] 4 | } 5 | -------------------------------------------------------------------------------- /packages/role/tsconfig.eslint.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { "strict": true }, 3 | "include": ["**/src/**/*.ts"] 4 | } 5 | -------------------------------------------------------------------------------- /packages/xhr/tsconfig.eslint.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { "strict": true }, 3 | "include": ["**/src/**/*.ts"] 4 | } 5 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/language/es/block.block.claro_page_title.yml: -------------------------------------------------------------------------------- 1 | settings: 2 | label: 'Título de la página' 3 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/language/es/block.block.umami_main_menu.yml: -------------------------------------------------------------------------------- 1 | settings: 2 | label: 'Navegación principal' 3 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/language/es/block.block.umami_page_title.yml: -------------------------------------------------------------------------------- 1 | settings: 2 | label: 'Título de la página' 3 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/language/es/core.base_field_override.node.recipe.title.yml: -------------------------------------------------------------------------------- 1 | label: 'Nombre de la receta' 2 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/language/es/core.date_format.umami_dates.yml: -------------------------------------------------------------------------------- 1 | label: 'Fechas Umami' 2 | pattern: 'jS F Y' 3 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/language/es/core.entity_form_mode.media.media_library.yml: -------------------------------------------------------------------------------- 1 | label: 'Biblioteca de medios' 2 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/language/es/core.entity_view_mode.media.media_library.yml: -------------------------------------------------------------------------------- 1 | label: 'Biblioteca de medios' 2 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/language/es/field.field.block_content.disclaimer_block.field_copyright.yml: -------------------------------------------------------------------------------- 1 | label: Copyright 2 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/language/es/field.field.media.audio.field_media_audio_file.yml: -------------------------------------------------------------------------------- 1 | label: 'Archivo de audio' 2 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/language/es/field.field.media.video.field_media_video_file.yml: -------------------------------------------------------------------------------- 1 | label: 'Archivo de vídeo' 2 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/language/es/image.style.media_library.yml: -------------------------------------------------------------------------------- 1 | label: 'Miniatura de Media Library (220×220)' 2 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/language/es/system.action.node_make_unsticky_action.yml: -------------------------------------------------------------------------------- 1 | label: 'Des fijar el contenido' 2 | -------------------------------------------------------------------------------- /packages/auth/src/types.d.ts: -------------------------------------------------------------------------------- 1 | declare namespace NodeJS { 2 | export interface Process { 3 | envType: string 4 | } 5 | } -------------------------------------------------------------------------------- /packages/core/src/types.d.ts: -------------------------------------------------------------------------------- 1 | declare namespace NodeJS { 2 | export interface Process { 3 | envType: string 4 | } 5 | } -------------------------------------------------------------------------------- /packages/interfaces/tsconfig.eslint.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { "strict": true }, 3 | "include": ["**/src/**/*.ts"] 4 | } 5 | -------------------------------------------------------------------------------- /packages/menu/src/types.d.ts: -------------------------------------------------------------------------------- 1 | declare namespace NodeJS { 2 | export interface Process { 3 | envType: string 4 | } 5 | } -------------------------------------------------------------------------------- /packages/role/src/types.d.ts: -------------------------------------------------------------------------------- 1 | declare namespace NodeJS { 2 | export interface Process { 3 | envType: string 4 | } 5 | } -------------------------------------------------------------------------------- /packages/settings/tsconfig.eslint.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { "strict": true }, 3 | "include": ["**/src/**/*.ts"] 4 | } 5 | -------------------------------------------------------------------------------- /packages/storage/tsconfig.eslint.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { "strict": true }, 3 | "include": ["**/src/**/*.ts"] 4 | } 5 | -------------------------------------------------------------------------------- /packages/xhr/src/types.d.ts: -------------------------------------------------------------------------------- 1 | declare namespace NodeJS { 2 | export interface Process { 3 | envType: string 4 | } 5 | } -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/language/es/block.block.umami_languageswitcher.yml: -------------------------------------------------------------------------------- 1 | settings: 2 | label: 'Alternador de idioma' 3 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/language/es/field.field.media.remote_video.field_media_oembed_video.yml: -------------------------------------------------------------------------------- 1 | label: 'URL del vídeo' 2 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/language/es/field.field.node.recipe.field_number_of_servings.yml: -------------------------------------------------------------------------------- 1 | label: 'Cantidad de porciones' 2 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/language/es/field.field.node.recipe.field_recipe_category.yml: -------------------------------------------------------------------------------- 1 | label: 'Categoría de la receta' 2 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/language/es/system.action.node_unpublish_action.yml: -------------------------------------------------------------------------------- 1 | label: 'Anular la publicación del contenido' 2 | -------------------------------------------------------------------------------- /packages/drupal-js-sdk/tsconfig.eslint.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { "strict": true }, 3 | "include": ["**/src/**/*.ts"] 4 | } 5 | -------------------------------------------------------------------------------- /packages/error/src/types.d.ts: -------------------------------------------------------------------------------- 1 | declare namespace NodeJS { 2 | export interface Process { 3 | envType: string 4 | } 5 | } -------------------------------------------------------------------------------- /packages/settings/src/types.d.ts: -------------------------------------------------------------------------------- 1 | declare namespace NodeJS { 2 | export interface Process { 3 | envType: string 4 | } 5 | } -------------------------------------------------------------------------------- /packages/storage/src/index.ts: -------------------------------------------------------------------------------- 1 | export { StorageInMemory } from "./StorageInMemory"; 2 | export { StorageInWeb } from "./StorageInWeb"; 3 | -------------------------------------------------------------------------------- /packages/storage/src/types.d.ts: -------------------------------------------------------------------------------- 1 | declare namespace NodeJS { 2 | export interface Process { 3 | envType: string 4 | } 5 | } -------------------------------------------------------------------------------- /apps/demo-svelte-spa/src/assets/shibin.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/d34dman/drupal-js-sdk/HEAD/apps/demo-svelte-spa/src/assets/shibin.jpg -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/language/es/block.block.claro_content.yml: -------------------------------------------------------------------------------- 1 | settings: 2 | label: 'Contenido principal de la página' 3 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/language/es/block.block.claro_primary_local_tasks.yml: -------------------------------------------------------------------------------- 1 | settings: 2 | label: 'Solapas principales' 3 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/language/es/block.block.claro_secondary_local_tasks.yml: -------------------------------------------------------------------------------- 1 | settings: 2 | label: 'Solapas secundarias' 3 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/language/es/block.block.umami_account_menu.yml: -------------------------------------------------------------------------------- 1 | settings: 2 | label: 'Menú de cuenta de usuario' 3 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/language/es/block.block.umami_banner_recipes.yml: -------------------------------------------------------------------------------- 1 | settings: 2 | label: 'Publicidad de recetas Umami' 3 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/language/es/block.block.umami_content.yml: -------------------------------------------------------------------------------- 1 | settings: 2 | label: 'Contenido principal de la página' 3 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/language/es/block.block.umami_search.yml: -------------------------------------------------------------------------------- 1 | settings: 2 | label: Buscar 3 | label_display: visible 4 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/language/es/core.entity_view_mode.media.scale_crop_7_3_large.yml: -------------------------------------------------------------------------------- 1 | label: 'Escala recortada 7:3 largo' 2 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/language/es/core.entity_view_mode.node.card_common_alt.yml: -------------------------------------------------------------------------------- 1 | label: 'Alternativa común de la tarjeta' 2 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/language/es/core.entity_view_mode.taxonomy_term.full.yml: -------------------------------------------------------------------------------- 1 | label: 'Página de términos de taxonomía' 2 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/language/es/field.field.block_content.footer_promo_block.field_summary.yml: -------------------------------------------------------------------------------- 1 | label: 'Texto promocional' 2 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/language/es/field.field.block_content.footer_promo_block.field_title.yml: -------------------------------------------------------------------------------- 1 | label: 'Título promocional' 2 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/language/es/field.field.node.article.field_media_image.yml: -------------------------------------------------------------------------------- 1 | label: 'Imagen del contenido multimedia' 2 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/language/es/field.field.node.recipe.field_media_image.yml: -------------------------------------------------------------------------------- 1 | label: 'Imagen del contenido multimedia' 2 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/language/es/node.type.recipe.yml: -------------------------------------------------------------------------------- 1 | name: Receta 2 | description: 'Agregue una nueva receta al sitio.' 3 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/language/es/system.action.taxonomy_term_publish_action.yml: -------------------------------------------------------------------------------- 1 | label: 'Publicar término de taxonomía' 2 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/web/INSTALL.txt: -------------------------------------------------------------------------------- 1 | 2 | Read core/INSTALL.txt for detailed installation instructions for your Drupal 3 | website. 4 | -------------------------------------------------------------------------------- /packages/drupal-js-sdk/src/types.d.ts: -------------------------------------------------------------------------------- 1 | declare namespace NodeJS { 2 | export interface Process { 3 | envType: string 4 | } 5 | } -------------------------------------------------------------------------------- /packages/interfaces/src/session.ts: -------------------------------------------------------------------------------- 1 | import { StorageInterface } from "./storage"; 2 | 3 | export type SessionInterface = StorageInterface; 4 | -------------------------------------------------------------------------------- /packages/interfaces/src/types.d.ts: -------------------------------------------------------------------------------- 1 | declare namespace NodeJS { 2 | export interface Process { 3 | envType: string 4 | } 5 | } -------------------------------------------------------------------------------- /apps/demo-svelte-spa/postcss.config.cjs: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | plugins: { 3 | tailwindcss: {}, 4 | autoprefixer: {}, 5 | }, 6 | }; 7 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/language/es/block.block.claro_breadcrumbs.yml: -------------------------------------------------------------------------------- 1 | settings: 2 | label: 'Enlaces de ayuda a la navegación' 3 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/language/es/block.block.umami_breadcrumbs.yml: -------------------------------------------------------------------------------- 1 | settings: 2 | label: 'Enlaces de ayuda a la navegación' 3 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/language/es/block.block.umami_disclaimer.yml: -------------------------------------------------------------------------------- 1 | settings: 2 | label: 'Descargo de responsabilidad Umami' 3 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/language/es/block.block.umami_footer_promo.yml: -------------------------------------------------------------------------------- 1 | settings: 2 | label: 'Promoción de pie de página Umami' 3 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/language/es/field.field.block_content.banner_block.field_content_link.yml: -------------------------------------------------------------------------------- 1 | label: 'Enlace de Contenido' 2 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/language/es/field.field.block_content.footer_promo_block.field_content_link.yml: -------------------------------------------------------------------------------- 1 | label: 'Enlace saber más' 2 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/language/es/media.type.audio.yml: -------------------------------------------------------------------------------- 1 | label: Audio 2 | description: 'Un archivo de audio alojado localmente.' 3 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/language/es/media.type.video.yml: -------------------------------------------------------------------------------- 1 | label: Vídeo 2 | description: 'Un archivo de vídeo alojado localmente.' 3 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/language/es/system.action.node_promote_action.yml: -------------------------------------------------------------------------------- 1 | label: 'Promocionar contenido a la página de inicio' 2 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/language/es/system.action.node_unpromote_action.yml: -------------------------------------------------------------------------------- 1 | label: 'Eliminar contenido de la página de inicio' 2 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/language/es/system.action.taxonomy_term_unpublish_action.yml: -------------------------------------------------------------------------------- 1 | label: 'Despublicar término de taxonomía' 2 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/language/es/system.action.user_block_user_action.yml: -------------------------------------------------------------------------------- 1 | label: 'Bloquear al usuario o usuarios seleccionados' 2 | -------------------------------------------------------------------------------- /packages/interfaces/src/error.ts: -------------------------------------------------------------------------------- 1 | export interface DrupalErrorInterface extends Error { 2 | code: number; 3 | getErrorCode(): number; 4 | } 5 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/language/es/block.block.claro_local_actions.yml: -------------------------------------------------------------------------------- 1 | settings: 2 | label: 'Acciones principales de administración' 3 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/language/es/block.block.umami_banner_home.yml: -------------------------------------------------------------------------------- 1 | settings: 2 | label: 'Banner de la página de inicio de Umami' 3 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/language/es/block.block.umami_footer.yml: -------------------------------------------------------------------------------- 1 | settings: 2 | label: 'Dinos qué piensas' 3 | label_display: '1' 4 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/language/es/block.block.umami_views_block__articles_aside_block_1.yml: -------------------------------------------------------------------------------- 1 | settings: 2 | label_display: visible 3 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/language/es/block.block.umami_views_block__recipe_collections_block.yml: -------------------------------------------------------------------------------- 1 | settings: 2 | label_display: visible 3 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/language/es/field.field.user.user.user_picture.yml: -------------------------------------------------------------------------------- 1 | label: Imagen 2 | description: 'Su cara o foto virtual.' 3 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/language/es/system.action.user_unblock_user_action.yml: -------------------------------------------------------------------------------- 1 | label: 'Desbloquear al usuario o usuarios seleccionados' 2 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/language/es/system.menu.admin.yml: -------------------------------------------------------------------------------- 1 | label: Administración 2 | description: 'Enlaces de tareas administrativas' 3 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/language/es/system.menu.footer.yml: -------------------------------------------------------------------------------- 1 | label: 'Pie de página' 2 | description: 'Enlaces de información del sitio' 3 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/system.image.yml: -------------------------------------------------------------------------------- 1 | _core: 2 | default_config_hash: durWHaKeBaq4d9Wpi4RqwADj1OufDepcnJuhVLmKN24 3 | toolkit: gd 4 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/dblog.settings.yml: -------------------------------------------------------------------------------- 1 | _core: 2 | default_config_hash: e883aGsrt1wFrsydlYU584PZONCSfRy0DtkZ9KzHb58 3 | row_limit: 1000 4 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/language/es/block.block.claro_help_search.yml: -------------------------------------------------------------------------------- 1 | settings: 2 | label: 'Buscar ayuda' 3 | label_display: visible 4 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/language/es/core.entity_view_mode.node.search_result.yml: -------------------------------------------------------------------------------- 1 | label: 'Destacar la entrada de los resultados de búsqueda' 2 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/language/es/field.field.block_content.banner_block.field_media_image.yml: -------------------------------------------------------------------------------- 1 | label: 'Imagen del contenido multimedia' 2 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/language/es/field.field.block_content.disclaimer_block.field_disclaimer.yml: -------------------------------------------------------------------------------- 1 | label: 'Descargo de responsabilidad' 2 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/language/es/system.action.user_cancel_user_action.yml: -------------------------------------------------------------------------------- 1 | label: 'Cancelar la(s) cuenta(s) de usuario seleccionada(s)' 2 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/language/es/system.menu.main.yml: -------------------------------------------------------------------------------- 1 | label: 'Navegación principal' 2 | description: 'Enlaces de secciones del sitio' 3 | -------------------------------------------------------------------------------- /packages/xhr/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../../tsconfig.json", 3 | "exclude": ["node_modules", "**/__tests__/*"], 4 | "include": ["./src"] 5 | } 6 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/field.settings.yml: -------------------------------------------------------------------------------- 1 | _core: 2 | default_config_hash: nJk0TAQBzlNo52ehiHI7bIEPLGi0BYqZvPdEn7Chfu0 3 | purge_batch_size: 50 4 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/language/es/contact.form.feedback.yml: -------------------------------------------------------------------------------- 1 | label: 'Comentarios sobre el sitio web' 2 | message: 'Su mensaje ha sido enviado.' 3 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/language/es/contact.form.personal.yml: -------------------------------------------------------------------------------- 1 | label: 'Formulario de contacto personal' 2 | message: 'Su mensaje ha sido enviado.' 3 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/language/es/field.field.block_content.footer_promo_block.field_media_image.yml: -------------------------------------------------------------------------------- 1 | label: 'Imagen del contenido multimedia' 2 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/node.settings.yml: -------------------------------------------------------------------------------- 1 | _core: 2 | default_config_hash: W0cgFPhPJ3gAdqm06-az48BLf5MVcoZVS0HdByoofi0 3 | use_admin_theme: true 4 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/system.image.gd.yml: -------------------------------------------------------------------------------- 1 | _core: 2 | default_config_hash: eNXaHfkJJUThHeF0nvkoXyPLRrKYGxgHRjORvT4F5rQ 3 | jpeg_quality: 75 4 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/system.logging.yml: -------------------------------------------------------------------------------- 1 | _core: 2 | default_config_hash: u3-njszl92FaxjrCMiq0yDcjAfcdx72w1zT1O9dx6aA 3 | error_level: hide 4 | -------------------------------------------------------------------------------- /packages/core/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../../tsconfig.json", 3 | "exclude": ["node_modules", "**/__tests__/*"], 4 | "include": ["./src"] 5 | } 6 | -------------------------------------------------------------------------------- /packages/error/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../../tsconfig.json", 3 | "exclude": ["node_modules", "**/__tests__/*"], 4 | "include": ["./src"] 5 | } 6 | -------------------------------------------------------------------------------- /packages/menu/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../../tsconfig.json", 3 | "exclude": ["node_modules", "**/__tests__/*"], 4 | "include": ["./src"] 5 | } 6 | -------------------------------------------------------------------------------- /packages/role/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../../tsconfig.json", 3 | "exclude": ["node_modules", "**/__tests__/*"], 4 | "include": ["./src"] 5 | } 6 | -------------------------------------------------------------------------------- /packages/settings/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../../tsconfig.json", 3 | "exclude": ["node_modules", "**/__tests__/*"], 4 | "include": ["./src"] 5 | } 6 | -------------------------------------------------------------------------------- /packages/storage/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../../tsconfig.json", 3 | "exclude": ["node_modules", "**/__tests__/*"], 4 | "include": ["./src"] 5 | } 6 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/automated_cron.settings.yml: -------------------------------------------------------------------------------- 1 | _core: 2 | default_config_hash: fUksROt4FfkAU9BV4hV2XvhTBSS2nTNrZS4U7S-tKrs 3 | interval: 10800 4 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/field_ui.settings.yml: -------------------------------------------------------------------------------- 1 | _core: 2 | default_config_hash: Q1nMi90W6YQxKzZAgJQw7Ag9U4JrsEUwkomF0lhvbIM 3 | field_prefix: field_ 4 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/language/es/field.field.node.recipe.field_cooking_time.yml: -------------------------------------------------------------------------------- 1 | label: 'Tiempo de cocción' 2 | settings: 3 | suffix: ' minutos' 4 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/system.rss.yml: -------------------------------------------------------------------------------- 1 | _core: 2 | default_config_hash: MIpNzlG4gPunfS7vTCwUPum6QH3GUsEBMj-qS631Jw0 3 | items: 4 | view_mode: rss 5 | -------------------------------------------------------------------------------- /packages/auth/tsconfig copy.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../../tsconfig.json", 3 | "exclude": ["node_modules", "**/__tests__/*"], 4 | "include": ["./src"] 5 | } 6 | -------------------------------------------------------------------------------- /packages/drupal-js-sdk/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../../tsconfig.json", 3 | "exclude": ["node_modules", "**/__tests__/*"], 4 | "include": ["./src"] 5 | } 6 | -------------------------------------------------------------------------------- /packages/interfaces/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../../tsconfig.json", 3 | "exclude": ["node_modules", "**/__tests__/*"], 4 | "include": ["./src"] 5 | } 6 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/language/es/block_content.type.basic.yml: -------------------------------------------------------------------------------- 1 | label: 'Bloque básico' 2 | description: 'Un bloque básico contiene un título y un cuerpo.' 3 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/language/es/media.type.document.yml: -------------------------------------------------------------------------------- 1 | label: Documento 2 | description: 'Un archivo o documento subido, como por ejemplo un PDF.' 3 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/language/es/media.type.image.yml: -------------------------------------------------------------------------------- 1 | label: Imagen 2 | description: 'Utilice imágenes locales para elementos multimedia reutilizables.' 3 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/media_library.settings.yml: -------------------------------------------------------------------------------- 1 | _core: 2 | default_config_hash: _3gQsCnZELUjUUqHk8SSh8bXnx7TZwN95vctAeVJG60 3 | advanced_ui: false 4 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/system.feature_flags.yml: -------------------------------------------------------------------------------- 1 | _core: 2 | default_config_hash: ZYyVj1FtPGV40Cf65YDVTUIc7YgLH6trXlotuevfs2I 3 | linkset_endpoint: false 4 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/system.theme.yml: -------------------------------------------------------------------------------- 1 | _core: 2 | default_config_hash: HwRJ3RS78PHVXIV5hK_ngVwryqaOz_b3mGBFwZnuhb4 3 | admin: claro 4 | default: umami 5 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/text.settings.yml: -------------------------------------------------------------------------------- 1 | _core: 2 | default_config_hash: Bkewb77RBOK3_aXMPsp8p87gbc03NvmC5gBLzPl7hVA 3 | default_summary_length: 600 4 | -------------------------------------------------------------------------------- /packages/entity/src/index.ts: -------------------------------------------------------------------------------- 1 | export * from "./EntityLoader"; 2 | export * from "./EntityService"; 3 | export * from "./DrupalEntity"; 4 | export * from "./FluentEntity"; 5 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/language/es/field.field.node.recipe.field_preparation_time.yml: -------------------------------------------------------------------------------- 1 | label: 'Tiempo de preparación' 2 | settings: 3 | suffix: ' minutos' 4 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/language/es/media.type.remote_video.yml: -------------------------------------------------------------------------------- 1 | label: 'Video remoto' 2 | description: 'Un video almacenado remotamente en Youtube o Vimeo.' 3 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/menu_ui.settings.yml: -------------------------------------------------------------------------------- 1 | _core: 2 | default_config_hash: SqMarzIjxC3F8dZo9FEOxfqDKD_sdW1tbcFTV1BA2zU 3 | override_parent_selector: false 4 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/language/es/field.field.node.recipe.field_summary.yml: -------------------------------------------------------------------------------- 1 | label: Resumen 2 | description: 'Proporciona una breve descripción de esta receta.' 3 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/language/es/system.menu.tools.yml: -------------------------------------------------------------------------------- 1 | label: Herramientas 2 | description: 'Enlaces de herramientas de usuario. Los suelen añadir los módulos' 3 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/system.advisories.yml: -------------------------------------------------------------------------------- 1 | _core: 2 | default_config_hash: x0FuQ_7Cg81mSDQwG028_Z0CjH3R9ib5IDlHeV2BbAo 3 | enabled: true 4 | interval_hours: 6 5 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/language/es/system.menu.account.yml: -------------------------------------------------------------------------------- 1 | label: 'Menú de cuenta de usuario' 2 | description: 'Enlaces relacionados con la cuenta del usuario activo' 3 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/language/es/system.maintenance.yml: -------------------------------------------------------------------------------- 1 | message: '@site está en mantenimiento en estos momentos. Pronto estaremos de regreso. Gracias por su paciencia.' 2 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/language/es/taxonomy.vocabulary.tags.yml: -------------------------------------------------------------------------------- 1 | name: Etiquetas 2 | description: 'Utilice etiquetas para agrupar artículos sobre temas similares en categorías.' 3 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/system.diff.yml: -------------------------------------------------------------------------------- 1 | _core: 2 | default_config_hash: 1WanmaEhxW_vM8_5Ktsdntj8MaO9UBHXg0lN603PsWM 3 | context: 4 | lines_leading: 2 5 | lines_trailing: 2 6 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/language/es/taxonomy.vocabulary.recipe_category.yml: -------------------------------------------------------------------------------- 1 | name: 'Categoría de la receta' 2 | description: 'Utilice esta taxonomía para agrupar recetas del mismo tipo.' 3 | -------------------------------------------------------------------------------- /commitlint.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | extends: ["@commitlint/config-conventional"], 3 | plugins: ["workspace-scopes"], 4 | rules: { 5 | "scope-enum": [2, "always", []], 6 | }, 7 | }; 8 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/announcements_feed.settings.yml: -------------------------------------------------------------------------------- 1 | _core: 2 | default_config_hash: 0G5pZBcxbg8ONYzNLd1RJIsvuFFewm9htnS4I-ABKJ8 3 | max_age: 86400 4 | cron_interval: 21600 5 | limit: 10 6 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/filter.settings.yml: -------------------------------------------------------------------------------- 1 | _core: 2 | default_config_hash: FiPjM3WdB__ruFA7B6TLwni_UcZbmek5G4b2dxQItxA 3 | fallback_format: plain_text 4 | always_show_fallback_choice: false 5 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/language/es/core.base_field_override.node.page.promote.yml: -------------------------------------------------------------------------------- 1 | label: 'Promocionado a la página principal' 2 | settings: 3 | on_label: Activado 4 | off_label: Desactivado 5 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/language/es/field.field.node.recipe.field_ingredients.yml: -------------------------------------------------------------------------------- 1 | label: Ingredientes 2 | description: 'Enumere los ingredientes requeridos para esta receta, uno por artículo.' 3 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/language/es/node.type.page.yml: -------------------------------------------------------------------------------- 1 | name: 'Página básica' 2 | description: "Utilice páginas básicas para el contenido estático, por ejemplo la página 'Sobre nosotros'." 3 | -------------------------------------------------------------------------------- /packages/auth/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../../tsconfig.json", 3 | "compilerOptions": { 4 | "outDir": "./dist" 5 | }, 6 | "exclude": ["node_modules", "**/__tests__/*"], 7 | "include": ["./src"] 8 | } 9 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/jsonapi.settings.yml: -------------------------------------------------------------------------------- 1 | _core: 2 | default_config_hash: bbhVQEgCMWzCNQ9nBMR-PZeax3Tkujtue1HA7CE5574 3 | read_only: false 4 | maintenance_header_retry_seconds: 5 | min: 5 6 | max: 10 7 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/language/es/field.storage.node.field_difficulty.yml: -------------------------------------------------------------------------------- 1 | settings: 2 | allowed_values: 3 | - 4 | label: Fácil 5 | - 6 | label: Medio 7 | - 8 | label: Díficil 9 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/web/.eslintignore: -------------------------------------------------------------------------------- 1 | core/**/* 2 | vendor/**/* 3 | sites/**/files/**/* 4 | libraries/**/* 5 | sites/**/libraries/**/* 6 | profiles/**/libraries/**/* 7 | **/js_test_files/**/* 8 | **/node_modules/**/* 9 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/language/es/field.field.node.article.field_tags.yml: -------------------------------------------------------------------------------- 1 | label: Etiquetas 2 | description: 'Especifique una lista separada por comas. Por ejemplo: Vegetariano, Brownies de chocolate, Aperitivos' 3 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/language/es/field.field.node.recipe.field_tags.yml: -------------------------------------------------------------------------------- 1 | label: Etiquetas 2 | description: 'Especifique una lista separada por comas. Por ejemplo: Vegetariano, Brownies de chocolate, Aperitivos' 3 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/language/es/node.type.article.yml: -------------------------------------------------------------------------------- 1 | name: Artículo 2 | description: 'Use los artículos para contenido que tenga relevancia temporal como las noticias o las publicaciones en blogs.' 3 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/system.file.yml: -------------------------------------------------------------------------------- 1 | _core: 2 | default_config_hash: mguGHCYb9Dw5EcpfjwoShGV1Vjkbz3QuPRCLfxiye-g 3 | allow_insecure_uploads: false 4 | default_scheme: public 5 | temporary_maximum_age: 21600 6 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/taxonomy.settings.yml: -------------------------------------------------------------------------------- 1 | _core: 2 | default_config_hash: zKpaWT6cJc1tVQQaTqatGELaCqU_oyRym6zTl27Yias 3 | maintain_index_table: true 4 | override_selector: false 5 | terms_per_page_admin: 100 6 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/user.flood.yml: -------------------------------------------------------------------------------- 1 | _core: 2 | default_config_hash: UYfMzeP1S8jKm9PSvxf7nQNe8DsNS-3bc2WSNNXBQWs 3 | uid_only: false 4 | ip_limit: 50 5 | ip_window: 3600 6 | user_limit: 5 7 | user_window: 21600 8 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/system.cron.yml: -------------------------------------------------------------------------------- 1 | _core: 2 | default_config_hash: f3yToH8v8EaBZU0NFFw2qR8ogSCuWVmQaN0hpYR1BD8 3 | threshold: 4 | requirements_warning: 172800 5 | requirements_error: 1209600 6 | logging: true 7 | -------------------------------------------------------------------------------- /docker-compose.yml: -------------------------------------------------------------------------------- 1 | services: 2 | mkdocs: 3 | container_name: mkdocs 4 | image: squidfunk/mkdocs-material 5 | restart: always 6 | ports: 7 | - "5535:8000" 8 | volumes: 9 | - "${PWD}:/docs" 10 | -------------------------------------------------------------------------------- /packages/interfaces/src/index.ts: -------------------------------------------------------------------------------- 1 | export * from "./xhr"; 2 | export * from "./client"; 3 | export * from "./core"; 4 | export * from "./error"; 5 | export * from "./session"; 6 | export * from "./storage"; 7 | export * from "./entity"; 8 | -------------------------------------------------------------------------------- /packages/storage/test-build.js: -------------------------------------------------------------------------------- 1 | import { StorageInMemory } from "./dist/index.js"; 2 | 3 | const storage = new StorageInMemory({}); 4 | 5 | if (storage) { 6 | process.exit(0); 7 | } else { 8 | process.exit(1); 9 | } 10 | -------------------------------------------------------------------------------- /apps/demo-svelte-spa/src/lib/Counter.svelte: -------------------------------------------------------------------------------- 1 | 7 | 8 | 11 | -------------------------------------------------------------------------------- /apps/demo-svelte-spa/vite.config.js: -------------------------------------------------------------------------------- 1 | import { defineConfig } from "vite"; 2 | import { svelte } from "@sveltejs/vite-plugin-svelte"; 3 | 4 | // https://vite.dev/config/ 5 | export default defineConfig({ 6 | plugins: [svelte()], 7 | }); 8 | -------------------------------------------------------------------------------- /packages/role/test-build.js: -------------------------------------------------------------------------------- 1 | import { DrupalRole } from "./dist/index.js"; 2 | 3 | const foo = new DrupalRole(DrupalRole.CACHE_MISS, "Test"); 4 | 5 | if (foo) { 6 | process.exit(0); 7 | } else { 8 | process.exit(1); 9 | } 10 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/contact.settings.yml: -------------------------------------------------------------------------------- 1 | _core: 2 | default_config_hash: U69DBeuvXuNVOC15rVNaBjDPK2fWFbo9v4takdYSSO8 3 | default_form: feedback 4 | flood: 5 | limit: 5 6 | interval: 3600 7 | user_default_enabled: true 8 | -------------------------------------------------------------------------------- /packages/error/test-build.js: -------------------------------------------------------------------------------- 1 | import { DrupalError } from "./dist/index.js"; 2 | 3 | const error = new DrupalError(DrupalError.CACHE_MISS, "Test"); 4 | 5 | if (error) { 6 | process.exit(0); 7 | } else { 8 | process.exit(1); 9 | } 10 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/image.settings.yml: -------------------------------------------------------------------------------- 1 | _core: 2 | default_config_hash: k-yDFHbqNfpe-Srg4sdCSqaosCl2D8uwyEY5esF8gEw 3 | preview_image: core/modules/image/sample.png 4 | allow_insecure_derivatives: false 5 | suppress_itok_output: false 6 | -------------------------------------------------------------------------------- /packages/settings/test-build.js: -------------------------------------------------------------------------------- 1 | import { DrupalSettings } from "./dist/index.js"; 2 | 3 | const foo = new DrupalSettings(DrupalSettings.CACHE_MISS, "Test"); 4 | 5 | if (foo) { 6 | process.exit(0); 7 | } else { 8 | process.exit(1); 9 | } 10 | -------------------------------------------------------------------------------- /apps/demo-svelte-spa/src/main.js: -------------------------------------------------------------------------------- 1 | import { mount } from "svelte"; 2 | 3 | import "./app.css"; 4 | import App from "./App.svelte"; 5 | 6 | const app = mount(App, { 7 | target: document.getElementById("app"), 8 | }); 9 | 10 | export default app; 11 | -------------------------------------------------------------------------------- /apps/demo-svelte-spa/tailwind.config.cjs: -------------------------------------------------------------------------------- 1 | /** @type {import('tailwindcss').Config} */ 2 | module.exports = { 3 | content: ["./index.html", "./src/**/*.{svelte,js,ts}"], 4 | theme: { 5 | extend: {}, 6 | }, 7 | plugins: [require("daisyui")], 8 | }; 9 | -------------------------------------------------------------------------------- /packages/entity/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../../tsconfig.json", 3 | "compilerOptions": { 4 | "rootDir": "./src", 5 | "outDir": "./dist" 6 | }, 7 | "include": ["src"], 8 | "exclude": ["node_modules", "**/__tests__/*"] 9 | } 10 | -------------------------------------------------------------------------------- /packages/jsonapi/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../../tsconfig.json", 3 | "compilerOptions": { 4 | "rootDir": "./src", 5 | "outDir": "./dist" 6 | }, 7 | "include": ["src"], 8 | "exclude": ["node_modules", "**/__tests__/*"] 9 | } 10 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/system.maintenance.yml: -------------------------------------------------------------------------------- 1 | _core: 2 | default_config_hash: 1SNdA25INsV5YjlgAJtfC-6AM8VcWe_00xneMLb2yFg 3 | langcode: en 4 | message: '@site is currently under maintenance. We should be back shortly. Thank you for your patience.' 5 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/language/es/block_content.type.disclaimer_block.yml: -------------------------------------------------------------------------------- 1 | label: 'Bloque de descargo de responsabilidad' 2 | description: 'Un bloque de descargo de responsabilidad que contiene el descargo de responsabilidad y el texto de copyright.' 3 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/language/es/block_content.type.footer_promo_block.yml: -------------------------------------------------------------------------------- 1 | label: 'Bloque de promoción de pie de página' 2 | description: 'Un bloque de promoción de pie de página que contiene un título, un texto de promoción y un vínculo de "saber más".' 3 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/shortcut.set.default.yml: -------------------------------------------------------------------------------- 1 | uuid: 770e833f-d0a3-4037-967d-29b676666766 2 | langcode: en 3 | status: true 4 | dependencies: { } 5 | _core: 6 | default_config_hash: U5VlGjd_SfV0Qm_EfnaynOfc549cNscFAx48JfYoMRI 7 | id: default 8 | label: Default 9 | -------------------------------------------------------------------------------- /packages/xhr/jestconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "transform": { 3 | "^.+\\.(t|j)sx?$": "ts-jest" 4 | }, 5 | "testRegex": "(/__tests__/.*|(\\.|/)(test|spec))\\.(jsx?|tsx?)$", 6 | "moduleFileExtensions": ["ts", "tsx", "js", "jsx", "json", "node"], 7 | "collectCoverage": true 8 | } 9 | -------------------------------------------------------------------------------- /packages/auth/jestconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "transform": { 3 | "^.+\\.(t|j)sx?$": "ts-jest" 4 | }, 5 | "testRegex": "(/__tests__/.*|(\\.|/)(test|spec))\\.(jsx?|tsx?)$", 6 | "moduleFileExtensions": ["ts", "tsx", "js", "jsx", "json", "node"], 7 | "collectCoverage": true 8 | } 9 | -------------------------------------------------------------------------------- /packages/core/jestconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "transform": { 3 | "^.+\\.(t|j)sx?$": "ts-jest" 4 | }, 5 | "testRegex": "(/__tests__/.*|(\\.|/)(test|spec))\\.(jsx?|tsx?)$", 6 | "moduleFileExtensions": ["ts", "tsx", "js", "jsx", "json", "node"], 7 | "collectCoverage": true 8 | } 9 | -------------------------------------------------------------------------------- /packages/error/jestconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "transform": { 3 | "^.+\\.(t|j)sx?$": "ts-jest" 4 | }, 5 | "testRegex": "(/__tests__/.*|(\\.|/)(test|spec))\\.(jsx?|tsx?)$", 6 | "moduleFileExtensions": ["ts", "tsx", "js", "jsx", "json", "node"], 7 | "collectCoverage": true 8 | } 9 | -------------------------------------------------------------------------------- /packages/jsonapi/jestconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "transform": { 3 | "^.+\\.(t|j)sx?$": "ts-jest" 4 | }, 5 | "testRegex": "(/__tests__/.*|(\\.|/)(test|spec))\\.(jsx?|tsx?)$", 6 | "moduleFileExtensions": ["ts", "tsx", "js", "jsx", "json", "node"], 7 | "collectCoverage": true 8 | } 9 | -------------------------------------------------------------------------------- /packages/menu/jestconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "transform": { 3 | "^.+\\.(t|j)sx?$": "ts-jest" 4 | }, 5 | "testRegex": "(/__tests__/.*|(\\.|/)(test|spec))\\.(jsx?|tsx?)$", 6 | "moduleFileExtensions": ["ts", "tsx", "js", "jsx", "json", "node"], 7 | "collectCoverage": true 8 | } 9 | -------------------------------------------------------------------------------- /packages/role/jestconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "transform": { 3 | "^.+\\.(t|j)sx?$": "ts-jest" 4 | }, 5 | "testRegex": "(/__tests__/.*|(\\.|/)(test|spec))\\.(jsx?|tsx?)$", 6 | "moduleFileExtensions": ["ts", "tsx", "js", "jsx", "json", "node"], 7 | "collectCoverage": true 8 | } 9 | -------------------------------------------------------------------------------- /packages/settings/jestconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "transform": { 3 | "^.+\\.(t|j)sx?$": "ts-jest" 4 | }, 5 | "testRegex": "(/__tests__/.*|(\\.|/)(test|spec))\\.(jsx?|tsx?)$", 6 | "moduleFileExtensions": ["ts", "tsx", "js", "jsx", "json", "node"], 7 | "collectCoverage": true 8 | } 9 | -------------------------------------------------------------------------------- /packages/storage/jestconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "transform": { 3 | "^.+\\.(t|j)sx?$": "ts-jest" 4 | }, 5 | "testRegex": "(/__tests__/.*|(\\.|/)(test|spec))\\.(jsx?|tsx?)$", 6 | "moduleFileExtensions": ["ts", "tsx", "js", "jsx", "json", "node"], 7 | "collectCoverage": true 8 | } 9 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/language/es/block_content.type.banner_block.yml: -------------------------------------------------------------------------------- 1 | label: 'Bloque promocional' 2 | description: 'Un bloque de banner contiene un título, resumen, enlace al contenido y una imagen de fondo. La imagen de fondo se escala para llenar el ancho del navegador.' 3 | -------------------------------------------------------------------------------- /packages/core/test-build.js: -------------------------------------------------------------------------------- 1 | import { Drupal } from "./dist/index.js"; 2 | 3 | const config = { 4 | baseURL: "http://www.example.com", 5 | }; 6 | 7 | const drupal = new Drupal(config); 8 | 9 | if (drupal) { 10 | process.exit(0); 11 | } else { 12 | process.exit(1); 13 | } 14 | -------------------------------------------------------------------------------- /packages/drupal-js-sdk/jestconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "transform": { 3 | "^.+\\.(t|j)sx?$": "ts-jest" 4 | }, 5 | "testRegex": "(/__tests__/.*|(\\.|/)(test|spec))\\.(jsx?|tsx?)$", 6 | "moduleFileExtensions": ["ts", "tsx", "js", "jsx", "json", "node"], 7 | "collectCoverage": true 8 | } 9 | -------------------------------------------------------------------------------- /packages/interfaces/jestconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "transform": { 3 | "^.+\\.(t|j)sx?$": "ts-jest" 4 | }, 5 | "testRegex": "(/__tests__/.*|(\\.|/)(test|spec))\\.(jsx?|tsx?)$", 6 | "moduleFileExtensions": ["ts", "tsx", "js", "jsx", "json", "node"], 7 | "collectCoverage": true 8 | } 9 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/media.settings.yml: -------------------------------------------------------------------------------- 1 | _core: 2 | default_config_hash: WCFqLQAxMw1weToDJEhfnW1Z-iOF7cqMdL8X7YTFxBA 3 | icon_base_uri: 'public://media-icons/generic' 4 | iframe_domain: null 5 | oembed_providers_url: 'https://oembed.com/providers.json' 6 | standalone_url: false 7 | -------------------------------------------------------------------------------- /packages/drupal-js-sdk/test-build.js: -------------------------------------------------------------------------------- 1 | import { Drupal } from "./dist/index.js"; 2 | 3 | const config = { 4 | baseURL: "http://www.example.com", 5 | }; 6 | 7 | const drupal = new Drupal(config); 8 | 9 | if (drupal) { 10 | process.exit(0); 11 | } else { 12 | process.exit(1); 13 | } 14 | -------------------------------------------------------------------------------- /packages/error/src/__tests__/DrupalError.test.ts: -------------------------------------------------------------------------------- 1 | import { DrupalError } from ".."; 2 | 3 | test("Drupal initialize", () => { 4 | const error = new DrupalError(42, "Solution"); 5 | expect(error.toString()).toBe("DrupalError: 42 Solution"); 6 | expect(error.getErrorCode()).toBe(42); 7 | }); 8 | -------------------------------------------------------------------------------- /.tools/scripts/copy.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # Helper script to copy a file from root to all packages. 4 | declare -a packages=(auth core drupal-js-sdk error interfaces menu role settings storage xhr) 5 | 6 | for pkg in "${packages[@]}" 7 | do 8 | cp "${1}" "./packages/${pkg}/${1}" 9 | done 10 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/system.date.yml: -------------------------------------------------------------------------------- 1 | _core: 2 | default_config_hash: IVsFTD1mvR2NGBP_1myt9kFIFmGepH4PyaN5aQBYpno 3 | first_day: 0 4 | country: 5 | default: null 6 | timezone: 7 | default: Europe/Berlin 8 | user: 9 | configurable: true 10 | default: 0 11 | warn: false 12 | -------------------------------------------------------------------------------- /tsconfig.eslint.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "./tsconfig.json", 3 | "compilerOptions": { 4 | "allowJs": true 5 | }, 6 | "include": ["src/**/*", "packages/**/src/**/*", "apps/**/src/**/*", "*.ts", "*.js"], 7 | "exclude": ["node_modules", "**/dist/**", "**/coverage/**", "apps/drupal-js-sdk-server/**"] 8 | } 9 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/core.menu.static_menu_link_overrides.yml: -------------------------------------------------------------------------------- 1 | _core: 2 | default_config_hash: CXhei_vpaZk-3f_Mj2cH0YmpK-ZpKHoSzVA3yZrDq0g 3 | definitions: 4 | contact__site_page: 5 | menu_name: footer 6 | parent: '' 7 | weight: 0 8 | expanded: false 9 | enabled: true 10 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/system.mail.yml: -------------------------------------------------------------------------------- 1 | _core: 2 | default_config_hash: 5PvD9swkqWUeHkabdvbJ2SQqdhrzjkCT21wtD4BLfk4 3 | interface: 4 | default: php_mail 5 | mailer_dsn: 6 | scheme: sendmail 7 | host: default 8 | user: null 9 | password: null 10 | port: null 11 | options: { } 12 | -------------------------------------------------------------------------------- /.changeset/config.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://unpkg.com/@changesets/config@1.7.0/schema.json", 3 | "changelog": "@changesets/cli/changelog", 4 | "commit": false, 5 | "fixed": [], 6 | "linked": [], 7 | "access": "public", 8 | "baseBranch": "main", 9 | "updateInternalDependencies": "patch", 10 | "ignore": [] 11 | } -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/core.date_format.html_date.yml: -------------------------------------------------------------------------------- 1 | uuid: 7aaebfd6-4b78-4b90-bff2-5616f286345f 2 | langcode: en 3 | status: true 4 | dependencies: { } 5 | _core: 6 | default_config_hash: EOQltUQPmgc6UQ2rcJ4Xi_leCEJj5ui0TR-12duS-Tk 7 | id: html_date 8 | label: 'HTML Date' 9 | locked: true 10 | pattern: Y-m-d 11 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/core.date_format.html_month.yml: -------------------------------------------------------------------------------- 1 | uuid: 84c10fd7-712d-4aa4-88a7-49bbfdb499ac 2 | langcode: en 3 | status: true 4 | dependencies: { } 5 | _core: 6 | default_config_hash: Z7KuCUwM_WdTNvLcoltuX3_8d-s-8FZkTN6KgNwF0eM 7 | id: html_month 8 | label: 'HTML Month' 9 | locked: true 10 | pattern: Y-m 11 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/core.date_format.html_week.yml: -------------------------------------------------------------------------------- 1 | uuid: 7c3ef212-be4a-42dd-becf-73675c402e43 2 | langcode: en 3 | status: true 4 | dependencies: { } 5 | _core: 6 | default_config_hash: wKD4WsoV_wFgv2vgI4mcAAFSIzrye17ykzdwrnApkfY 7 | id: html_week 8 | label: 'HTML Week' 9 | locked: true 10 | pattern: Y-\WW 11 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/core.date_format.html_year.yml: -------------------------------------------------------------------------------- 1 | uuid: d1a6a539-bc85-44d7-84c9-9740122d46ba 2 | langcode: en 3 | status: true 4 | dependencies: { } 5 | _core: 6 | default_config_hash: OjekiQuX9RbVQ2_8jOHBL94RgYLePqX7wpfNGgcQzrk 7 | id: html_year 8 | label: 'HTML Year' 9 | locked: true 10 | pattern: 'Y' 11 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/language.entity.en.yml: -------------------------------------------------------------------------------- 1 | uuid: 27621ea6-c88f-4d08-8352-ef1d093d0db3 2 | langcode: en 3 | status: true 4 | dependencies: { } 5 | _core: 6 | default_config_hash: lBXDpdDPXQtrfTJQhr6MjRJJEEyYSoRJ0acdvHLsWeA 7 | id: en 8 | label: English 9 | direction: ltr 10 | weight: 0 11 | locked: false 12 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/language.entity.es.yml: -------------------------------------------------------------------------------- 1 | uuid: 5eb5d04a-d8a5-49d5-83ab-417165894307 2 | langcode: en 3 | status: true 4 | dependencies: { } 5 | _core: 6 | default_config_hash: zMB9ry6srBzolYME_HGgBkzGve1qBlnsQ8C3wT6CQxs 7 | id: es 8 | label: Spanish 9 | direction: ltr 10 | weight: 1 11 | locked: false 12 | -------------------------------------------------------------------------------- /.tools/scripts/replay.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # Helper script to copy a file from root to all packages. 4 | declare -a packages=(auth core drupal-js-sdk error interfaces menu role settings storage xhr) 5 | 6 | for pkg in "${packages[@]}" 7 | do 8 | mv "./packages/${pkg}/test-build.js" "./packages/${pkg}/test-build.cjs" 9 | done 10 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/core.date_format.html_time.yml: -------------------------------------------------------------------------------- 1 | uuid: 59a914ba-9b5a-419c-9fcb-cf1e19796a1b 2 | langcode: en 3 | status: true 4 | dependencies: { } 5 | _core: 6 | default_config_hash: M7yqicYkU36hRy5p9drAaGBBihhUD1OyujFrAaQ93ZE 7 | id: html_time 8 | label: 'HTML Time' 9 | locked: true 10 | pattern: 'H:i:s' 11 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/language.entity.und.yml: -------------------------------------------------------------------------------- 1 | uuid: 33f29f40-61e7-4c94-aade-148144d1bdd5 2 | langcode: en 3 | status: true 4 | dependencies: { } 5 | _core: 6 | default_config_hash: eNX6lLCKDaY83nCMh20My---y03KbiFlv802DKCCpvg 7 | id: und 8 | label: 'Not specified' 9 | direction: ltr 10 | weight: 2 11 | locked: true 12 | -------------------------------------------------------------------------------- /packages/settings/src/DrupalSettings.ts: -------------------------------------------------------------------------------- 1 | import { DrupalError } from "@drupal-js-sdk/error"; 2 | export class DrupalSettings { 3 | public get(key: string): any { 4 | if (key) { 5 | // @TODO Implment get. 6 | } 7 | throw new DrupalError(DrupalError.MISSING_IMPLEMENTATION_ERROR, "Not Implemented"); 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/core.date_format.long.yml: -------------------------------------------------------------------------------- 1 | uuid: 89b58b79-33b0-4c6e-a698-f12a5f21e5b5 2 | langcode: en 3 | status: true 4 | dependencies: { } 5 | _core: 6 | default_config_hash: 5B4_r5Vd0_9UaJwtAC5yFCm9-k8NNvp1xiQNhFFkknU 7 | id: long 8 | label: 'Default long date' 9 | locked: false 10 | pattern: 'l, j F Y - H:i' 11 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/core.date_format.short.yml: -------------------------------------------------------------------------------- 1 | uuid: 443d9510-3f7f-40dc-a69e-60c6e112f9f5 2 | langcode: en 3 | status: true 4 | dependencies: { } 5 | _core: 6 | default_config_hash: SAeixlV7Djy_Ggv_1P95TiqD4KUihA5icvU521tA84Y 7 | id: short 8 | label: 'Default short date' 9 | locked: false 10 | pattern: 'j M Y - H:i' 11 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/core.date_format.umami_dates.yml: -------------------------------------------------------------------------------- 1 | uuid: ff2558a8-0e43-43ba-b418-a02e5ab84fb5 2 | langcode: en 3 | status: true 4 | dependencies: { } 5 | _core: 6 | default_config_hash: z8N89KekZ75jFUeGfDm10tYPfCSpiil6GkH__1bcJyQ 7 | id: umami_dates 8 | label: 'Umami dates' 9 | locked: false 10 | pattern: 'jS F Y' 11 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/language.entity.zxx.yml: -------------------------------------------------------------------------------- 1 | uuid: 221d95d1-9e89-4286-8c3e-0c0c8d71f7d2 2 | langcode: en 3 | status: true 4 | dependencies: { } 5 | _core: 6 | default_config_hash: 35CefWbnzaiytcg3acexxz_GTvuwIjYd_ZTcmmR-tXA 7 | id: zxx 8 | label: 'Not applicable' 9 | direction: ltr 10 | weight: 3 11 | locked: true 12 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/system.menu.footer.yml: -------------------------------------------------------------------------------- 1 | uuid: f7e28d3c-bf32-419c-96db-62b3c65f012e 2 | langcode: en 3 | status: true 4 | dependencies: { } 5 | _core: 6 | default_config_hash: 7yrlW5z9zdg2eBucB2GPqXKSMQfH9lSRSO4DbWF7AFc 7 | id: footer 8 | label: Footer 9 | description: 'Site information links' 10 | locked: true 11 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/system.menu.main.yml: -------------------------------------------------------------------------------- 1 | uuid: bda6d998-d680-42c6-89f1-38492bbb3d0b 2 | langcode: en 3 | status: true 4 | dependencies: { } 5 | _core: 6 | default_config_hash: Q2Ra3jfoIVk0f3SjxJX61byRQFVBAbpzYDQOiY-kno8 7 | id: main 8 | label: 'Main navigation' 9 | description: 'Site section links' 10 | locked: true 11 | -------------------------------------------------------------------------------- /packages/role/src/__tests__/Defaults.test.ts: -------------------------------------------------------------------------------- 1 | import { DrupalRole } from ".."; 2 | import { DrupalError } from "@drupal-js-sdk/error"; 3 | 4 | test("Drupal Role : Test for un-implemented thing to throw", () => { 5 | const role = new DrupalRole(); 6 | expect(() => { 7 | role.hasRole("foo"); 8 | }).toThrow(DrupalError); 9 | }); 10 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/core.date_format.medium.yml: -------------------------------------------------------------------------------- 1 | uuid: 7dbb71ad-30c5-415c-8132-9f4b3f24382d 2 | langcode: en 3 | status: true 4 | dependencies: { } 5 | _core: 6 | default_config_hash: q7pDV2d9qFh1IVqvymOxUUYGSziZDeg961wURC0cSLs 7 | id: medium 8 | label: 'Default medium date' 9 | locked: false 10 | pattern: 'D, j M Y - H:i' 11 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/system.menu.admin.yml: -------------------------------------------------------------------------------- 1 | uuid: 38a0086d-0fa9-4db2-b70a-2fddd869d1e9 2 | langcode: en 3 | status: true 4 | dependencies: { } 5 | _core: 6 | default_config_hash: sapEi2YDGoI9yQIT_WgIV2vUdQ6DScH0V3fAyTadAL0 7 | id: admin 8 | label: Administration 9 | description: 'Administrative task links' 10 | locked: true 11 | -------------------------------------------------------------------------------- /packages/role/src/DrupalRole.ts: -------------------------------------------------------------------------------- 1 | import { DrupalError } from "@drupal-js-sdk/error"; 2 | 3 | export class DrupalRole { 4 | public hasRole(role: string): boolean { 5 | if (role) { 6 | // @TODO Implement role check. 7 | } 8 | throw new DrupalError(DrupalError.MISSING_IMPLEMENTATION_ERROR, "Not Implemented"); 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /.changeset/jsonapi-listpage-support.md: -------------------------------------------------------------------------------- 1 | --- 2 | "@drupal-js-sdk/jsonapi": minor 3 | --- 4 | 5 | Implement structured pagination via `listPage()`. 6 | 7 | - New `listPage(options?)` parses JSON:API `meta`/`links` and returns `{ items, page }` 8 | - Respects existing query params and typing 9 | 10 | Non-breaking; `list()` remains unchanged. 11 | 12 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/core.date_format.fallback.yml: -------------------------------------------------------------------------------- 1 | uuid: 96273612-4afe-4e08-873e-0aac94b48d2b 2 | langcode: en 3 | status: true 4 | dependencies: { } 5 | _core: 6 | default_config_hash: iIBLu1j9n6Oo5PW-wpu5gdyNs9Kvv4LMRqtQUdJjRz8 7 | id: fallback 8 | label: 'Fallback date format' 9 | locked: true 10 | pattern: 'D, j M Y - H:i' 11 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/language.mappings.yml: -------------------------------------------------------------------------------- 1 | _core: 2 | default_config_hash: EMWe7Yu4Q5eD-NUfNuQAWGBvYUNZPIinztEtONSmsDc 3 | map: 4 | 'no': nb 5 | pt: pt-pt 6 | zh: zh-hans 7 | zh-tw: zh-hant 8 | zh-hk: zh-hant 9 | zh-mo: zh-hant 10 | zh-cht: zh-hant 11 | zh-cn: zh-hans 12 | zh-sg: zh-hans 13 | zh-chs: zh-hans 14 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/language.negotiation.yml: -------------------------------------------------------------------------------- 1 | _core: 2 | default_config_hash: LBaNHR2iSQWenwxlXmCU37WJ_f9sEOC6XocWNx_9JOU 3 | session: 4 | parameter: language 5 | url: 6 | source: path_prefix 7 | prefixes: 8 | en: en 9 | es: es 10 | domains: 11 | en: '' 12 | es: '' 13 | selected_langcode: site_default 14 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/system.menu.tools.yml: -------------------------------------------------------------------------------- 1 | uuid: 47ab0c50-04d6-451f-98cc-1ac3a89b2cfa 2 | langcode: en 3 | status: true 4 | dependencies: { } 5 | _core: 6 | default_config_hash: BCM-vV1zzRaLHN18dqAR_CuGOj8AFJvTx7BKl_8Gcxc 7 | id: tools 8 | label: Tools 9 | description: 'User tool links, often added by modules' 10 | locked: true 11 | -------------------------------------------------------------------------------- /packages/settings/src/__tests__/Defaults.test.ts: -------------------------------------------------------------------------------- 1 | import { DrupalSettings } from ".."; 2 | import { DrupalError } from "@drupal-js-sdk/error"; 3 | 4 | test("Drupal Role : Test for un-implemented thing to throw", () => { 5 | const role = new DrupalSettings(); 6 | expect(() => { 7 | role.get("foo"); 8 | }).toThrow(DrupalError); 9 | }); 10 | -------------------------------------------------------------------------------- /apps/demo-svelte-spa/svelte.config.js: -------------------------------------------------------------------------------- 1 | import { vitePreprocess } from "@sveltejs/vite-plugin-svelte"; 2 | 3 | /** @type {import("@sveltejs/vite-plugin-svelte").SvelteConfig} */ 4 | export default { 5 | // Consult https://svelte.dev/docs#compile-time-svelte-preprocess 6 | // for more information about preprocessors 7 | preprocess: vitePreprocess(), 8 | }; 9 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/core.date_format.html_datetime.yml: -------------------------------------------------------------------------------- 1 | uuid: 5c4bad50-3780-4647-adf3-f741ffaf9328 2 | langcode: en 3 | status: true 4 | dependencies: { } 5 | _core: 6 | default_config_hash: jxfClwZIRXIdcvMrE--WkcZxDGUVoOIE3Sm2NRZlFuE 7 | id: html_datetime 8 | label: 'HTML Datetime' 9 | locked: true 10 | pattern: 'Y-m-d\TH:i:sO' 11 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/core.date_format.html_yearless_date.yml: -------------------------------------------------------------------------------- 1 | uuid: 2c0d80e9-cab3-4fe2-b4a1-eb8c256fae91 2 | langcode: en 3 | status: true 4 | dependencies: { } 5 | _core: 6 | default_config_hash: 5VpawMrKPEPCkoO4YpPa0TDFO2dgiIHfTziJtwlmUxc 7 | id: html_yearless_date 8 | label: 'HTML Yearless date' 9 | locked: true 10 | pattern: m-d 11 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/update.settings.yml: -------------------------------------------------------------------------------- 1 | _core: 2 | default_config_hash: cceqUa945af6yMPEeM1pWJQoA-tumoAqhThW2xGoZ04 3 | check: 4 | disabled_extensions: true 5 | interval_days: 1 6 | fetch: 7 | url: null 8 | max_attempts: 2 9 | timeout: 30 10 | notification: 11 | emails: 12 | - admin@example.com 13 | threshold: all 14 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/user.role.administrator.yml: -------------------------------------------------------------------------------- 1 | uuid: 6d11e10a-af49-4b6f-aa1d-45b5fcd6a5f4 2 | langcode: en 3 | status: true 4 | dependencies: { } 5 | _core: 6 | default_config_hash: Om6FEO7vZZMkPIbVvfxtdkWerQ2PvQM4sWUd6Q3ZnfI 7 | id: administrator 8 | label: Administrator 9 | weight: 2 10 | is_admin: true 11 | permissions: { } 12 | -------------------------------------------------------------------------------- /.changeset/interfaces-pagination-types.md: -------------------------------------------------------------------------------- 1 | --- 2 | "@drupal-js-sdk/interfaces": minor 3 | --- 4 | 5 | Add pagination result types and optional listPage API. 6 | 7 | - New types: `EntityPageInfo`, `EntityListResult` 8 | - `EntityAdapter` gains optional `listPage(options?)` returning `{ items, page }` 9 | 10 | These are additive and backward compatible. 11 | 12 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/.ddev/addon-metadata/notification-server/manifest.yaml: -------------------------------------------------------------------------------- 1 | name: notification-server 2 | repository: d34dman/ddev-notification-server 3 | version: 1.0.1 4 | dependencies: 5 | - redis 6 | install_date: "2025-08-22T23:45:21+02:00" 7 | project_files: 8 | - docker-compose.notification-server.yaml 9 | global_files: [] 10 | removal_actions: [] 11 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/system.menu.account.yml: -------------------------------------------------------------------------------- 1 | uuid: fb59fae8-4af1-43c5-af1f-1da76e9b6e03 2 | langcode: en 3 | status: true 4 | dependencies: { } 5 | _core: 6 | default_config_hash: M_Bh81osDyUQ4wV0GgU_NdBNqkzM87sLxjaCdFj9mnw 7 | id: account 8 | label: 'User account menu' 9 | description: 'Links related to the active user account' 10 | locked: true 11 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/block_content.type.basic.yml: -------------------------------------------------------------------------------- 1 | uuid: 158e5255-51f6-432d-b9c7-c7097384b6e7 2 | langcode: en 3 | status: true 4 | dependencies: { } 5 | _core: 6 | default_config_hash: pQP5iQy4SdhAMVcjDUncCfkJmTofnHVtXrsMzx4k6Yk 7 | id: basic 8 | label: 'Basic block' 9 | revision: false 10 | description: 'A basic block contains a title and a body.' 11 | -------------------------------------------------------------------------------- /packages/interfaces/src/core.ts: -------------------------------------------------------------------------------- 1 | import { StorageInterface } from "./storage"; 2 | import { XhrInterface } from "./xhr"; 3 | import { SessionInterface } from "./session"; 4 | export interface CoreInterface { 5 | config: StorageInterface; 6 | getClientService(): XhrInterface; 7 | getConfigService(): StorageInterface; 8 | getSessionService(): SessionInterface; 9 | } 10 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/core.entity_view_mode.node.rss.yml: -------------------------------------------------------------------------------- 1 | uuid: 65d57b63-9293-4606-b00c-d1b54b12197e 2 | langcode: en 3 | status: false 4 | dependencies: 5 | module: 6 | - node 7 | _core: 8 | default_config_hash: l8fiAFE3Kng_6bhLlUDnVTkTDzXWxzYFrCWTrngVXEA 9 | id: node.rss 10 | label: RSS 11 | description: '' 12 | targetEntityType: node 13 | cache: true 14 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/core.entity_view_mode.node.card.yml: -------------------------------------------------------------------------------- 1 | uuid: 61381bc2-d3b2-42ec-9b6f-fa0d9a024390 2 | langcode: en 3 | status: true 4 | dependencies: 5 | module: 6 | - node 7 | _core: 8 | default_config_hash: AtN311PK7pVwNFVe7be6DabmiwfNEbWODEYcHCaewdk 9 | id: node.card 10 | label: Card 11 | description: '' 12 | targetEntityType: node 13 | cache: true 14 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/core.entity_view_mode.node.teaser.yml: -------------------------------------------------------------------------------- 1 | uuid: caeee2b8-1ee0-4a8b-be37-3c455d645db1 2 | langcode: en 3 | status: true 4 | dependencies: 5 | module: 6 | - node 7 | _core: 8 | default_config_hash: KgGJDZFpMaz_8bTv6fN1bXS3Qi5LWmRJI9R53kEGsNQ 9 | id: node.teaser 10 | label: Teaser 11 | description: '' 12 | targetEntityType: node 13 | cache: true 14 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/core.entity_view_mode.user.compact.yml: -------------------------------------------------------------------------------- 1 | uuid: 9eecb362-a2f8-44b0-9486-f23e7e2dec81 2 | langcode: en 3 | status: true 4 | dependencies: 5 | module: 6 | - user 7 | _core: 8 | default_config_hash: TtD7OuGskOsQfoGyxXkrdtllBpR37J19d5BMQDZWJgA 9 | id: user.compact 10 | label: Compact 11 | description: '' 12 | targetEntityType: user 13 | cache: true 14 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/search.page.help_search.yml: -------------------------------------------------------------------------------- 1 | uuid: ac8595d0-9423-4572-bb24-245ea9f56c04 2 | langcode: en 3 | status: true 4 | dependencies: 5 | module: 6 | - help 7 | _core: 8 | default_config_hash: RZ-bcSekNSsAbIPLW7Gmyd3uUjIOSrPvnb8RCCZYJm8 9 | id: help_search 10 | label: Help 11 | path: help 12 | weight: 0 13 | plugin: help_search 14 | configuration: { } 15 | -------------------------------------------------------------------------------- /packages/core/src/Config.ts: -------------------------------------------------------------------------------- 1 | import { StorageRecordInterface } from "@drupal-js-sdk/interfaces"; 2 | import { StorageInMemory } from "@drupal-js-sdk/storage"; 3 | 4 | /** 5 | * Common getter setter for a config. 6 | */ 7 | export class Config extends StorageInMemory { 8 | public constructor(config: StorageRecordInterface) { 9 | super(); 10 | this.set(config); 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/core.entity_form_mode.user.register.yml: -------------------------------------------------------------------------------- 1 | uuid: 88312a73-dfeb-41d0-b680-329ed7155965 2 | langcode: en 3 | status: true 4 | dependencies: 5 | module: 6 | - user 7 | _core: 8 | default_config_hash: 1TFiplNN7Wmj_DtVLLLP-NLPYpZJdAswKY-vTrYgFyo 9 | id: user.register 10 | label: Register 11 | description: null 12 | targetEntityType: user 13 | cache: true 14 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/core.entity_view_mode.media.square.yml: -------------------------------------------------------------------------------- 1 | uuid: 5fc077ae-51a2-4dcc-90c2-a645f4146ac2 2 | langcode: en 3 | status: true 4 | dependencies: 5 | module: 6 | - media 7 | _core: 8 | default_config_hash: wagY6aqmh9sRyBLXu4rByDMFUhO5tdJqNkyRNEnnucU 9 | id: media.square 10 | label: Square 11 | description: '' 12 | targetEntityType: media 13 | cache: true 14 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/core.entity_view_mode.node.full.yml: -------------------------------------------------------------------------------- 1 | uuid: 2ef1deab-d5a5-4433-9c61-640ed506e2ad 2 | langcode: en 3 | status: false 4 | dependencies: 5 | module: 6 | - node 7 | _core: 8 | default_config_hash: QJ2aZ1xfVf59aq6Pz5X7fyUOa2HxuCoTwQ_RQjoulAU 9 | id: node.full 10 | label: 'Full content' 11 | description: '' 12 | targetEntityType: node 13 | cache: true 14 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/core.entity_view_mode.user.full.yml: -------------------------------------------------------------------------------- 1 | uuid: ae82c06d-d595-4dbb-9e12-080f6d10fed6 2 | langcode: en 3 | status: false 4 | dependencies: 5 | module: 6 | - user 7 | _core: 8 | default_config_hash: ZbXunWS_xAvMZXFfinyvClDAb_RCVLt7gAzE3v16E-Q 9 | id: user.full 10 | label: 'User account' 11 | description: '' 12 | targetEntityType: user 13 | cache: true 14 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/search.page.user_search.yml: -------------------------------------------------------------------------------- 1 | uuid: ee837145-e940-4b45-b097-7707e622e2e9 2 | langcode: en 3 | status: true 4 | dependencies: 5 | module: 6 | - user 7 | _core: 8 | default_config_hash: k3aUaZXGDuhkek2TZIee0PApOPTvYZLadziekdyHA5A 9 | id: user_search 10 | label: Users 11 | path: user 12 | weight: 0 13 | plugin: user_search 14 | configuration: { } 15 | -------------------------------------------------------------------------------- /apps/demo-svelte-spa/.gitignore: -------------------------------------------------------------------------------- 1 | # Logs 2 | logs 3 | *.log 4 | npm-debug.log* 5 | yarn-debug.log* 6 | yarn-error.log* 7 | pnpm-debug.log* 8 | lerna-debug.log* 9 | 10 | node_modules 11 | dist 12 | dist-ssr 13 | *.local 14 | 15 | # Editor directories and files 16 | .vscode/* 17 | !.vscode/extensions.json 18 | .idea 19 | .DS_Store 20 | *.suo 21 | *.ntvs* 22 | *.njsproj 23 | *.sln 24 | *.sw? 25 | .env -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/core.entity_view_mode.media.full.yml: -------------------------------------------------------------------------------- 1 | uuid: e321e52a-2486-4ff7-a6f6-dbafb1767b4a 2 | langcode: en 3 | status: false 4 | dependencies: 5 | module: 6 | - media 7 | _core: 8 | default_config_hash: dTfAUHooYV0uOVPO3saGpgv-c5PppJXDwxvwRTJOycM 9 | id: media.full 10 | label: 'Full content' 11 | description: '' 12 | targetEntityType: media 13 | cache: true 14 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/taxonomy.vocabulary.tags.yml: -------------------------------------------------------------------------------- 1 | uuid: 6319c173-1aec-4a1b-a9b2-0719e59be38c 2 | langcode: en 3 | status: true 4 | dependencies: { } 5 | _core: 6 | default_config_hash: iTEzwrEQ_4JIb-OYGiqzyF2TmMgWyWayresXcWgwGWM 7 | name: Tags 8 | vid: tags 9 | description: 'Use tags to group articles on similar topics into categories.' 10 | weight: 0 11 | new_revision: false 12 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/core.entity_view_mode.media.medium_8_7.yml: -------------------------------------------------------------------------------- 1 | uuid: 1879431b-28b0-443a-abe7-517c10f921e6 2 | langcode: en 3 | status: true 4 | dependencies: 5 | module: 6 | - media 7 | _core: 8 | default_config_hash: 9AxBqzhw93Eoonvxvqn4V4xPFefPqF3gm5NTEUi1gx4 9 | id: media.medium_8_7 10 | label: 'Medium 8:7' 11 | description: '' 12 | targetEntityType: media 13 | cache: true 14 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/core.entity_view_mode.node.card_common.yml: -------------------------------------------------------------------------------- 1 | uuid: 5171f50a-be4f-48b9-b2f9-39b0a88aacbd 2 | langcode: en 3 | status: true 4 | dependencies: 5 | module: 6 | - node 7 | _core: 8 | default_config_hash: sJQhWb7_11HO8RLa_Gk4HOss3oTwMguWF0B6HZydJGo 9 | id: node.card_common 10 | label: 'Card common' 11 | description: '' 12 | targetEntityType: node 13 | cache: true 14 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/core.entity_view_mode.node.search_index.yml: -------------------------------------------------------------------------------- 1 | uuid: 544d07f5-c966-43db-84a6-11e111b5a9cd 2 | langcode: en 3 | status: false 4 | dependencies: 5 | module: 6 | - node 7 | _core: 8 | default_config_hash: r_A0T3aTqGDwLyvoH7wLps-0PM--RHlS8UsiJe_Ac64 9 | id: node.search_index 10 | label: 'Search index' 11 | description: '' 12 | targetEntityType: node 13 | cache: true 14 | -------------------------------------------------------------------------------- /packages/entity/jestconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "transform": { 3 | "^.+\\.(t|j)sx?$": "ts-jest" 4 | }, 5 | "testRegex": "(/__tests__/.*|(\\.|/)(test|spec))\\.(jsx?|tsx?)$", 6 | "moduleFileExtensions": ["ts", "tsx", "js", "jsx", "json", "node"], 7 | "collectCoverage": true, 8 | "moduleNameMapper": { 9 | "^@drupal-js-sdk/jsonapi$": "/../../packages/jsonapi/src/index.ts" 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /.prettierrc.json: -------------------------------------------------------------------------------- 1 | { 2 | "semi": true, 3 | "trailingComma": "es5", 4 | "singleQuote": false, 5 | "printWidth": 100, 6 | "tabWidth": 2, 7 | "useTabs": false, 8 | "quoteProps": "as-needed", 9 | "bracketSpacing": true, 10 | "bracketSameLine": false, 11 | "arrowParens": "always", 12 | "endOfLine": "lf", 13 | "embeddedLanguageFormatting": "auto", 14 | "singleAttributePerLine": false 15 | } 16 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/block_content.type.disclaimer_block.yml: -------------------------------------------------------------------------------- 1 | uuid: ee83ed9c-c5d5-4b7a-a8ca-0fdb95e4fef4 2 | langcode: en 3 | status: true 4 | dependencies: { } 5 | _core: 6 | default_config_hash: aTx4hcF_KL7KXRHBx55Dgvyb8dtlV_sHHYFW7HxNdSo 7 | id: disclaimer_block 8 | label: 'Disclaimer block' 9 | revision: false 10 | description: 'A disclaimer block contains disclaimer and copyright text.' 11 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/contact.form.personal.yml: -------------------------------------------------------------------------------- 1 | uuid: c169721f-6f74-4d53-af0f-39c5f6e289a4 2 | langcode: en 3 | status: true 4 | dependencies: { } 5 | _core: 6 | default_config_hash: jonvgt3CkUM2eMLTFwWfHileWWDC4YtXCuIlCahTk_I 7 | id: personal 8 | label: 'Personal contact form' 9 | recipients: { } 10 | reply: '' 11 | weight: 0 12 | message: 'Your message has been sent.' 13 | redirect: '' 14 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/search.page.node_search.yml: -------------------------------------------------------------------------------- 1 | uuid: 45cb08fd-efbb-41ff-9b64-41bc3b6bf6fc 2 | langcode: en 3 | status: true 4 | dependencies: 5 | module: 6 | - node 7 | _core: 8 | default_config_hash: 97tvtzGOa8_flb22CzSjgtm_YkiGMHvEBO-6q2K9V_U 9 | id: node_search 10 | label: Content 11 | path: node 12 | weight: -10 13 | plugin: node_search 14 | configuration: 15 | rankings: { } 16 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/system.action.media_save_action.yml: -------------------------------------------------------------------------------- 1 | uuid: 8d912959-80c3-4407-9387-b0caf3b4ceb3 2 | langcode: en 3 | status: true 4 | dependencies: 5 | module: 6 | - media 7 | _core: 8 | default_config_hash: VVyUA6PIaVeGtcIbgEWqJ6SYDiJdReBeojFswURFpKs 9 | id: media_save_action 10 | label: 'Save media' 11 | type: media 12 | plugin: 'entity:save_action:media' 13 | configuration: { } 14 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/system.action.node_save_action.yml: -------------------------------------------------------------------------------- 1 | uuid: 35fc85c3-4230-4fcb-a1d4-a7792f70ef4b 2 | langcode: en 3 | status: true 4 | dependencies: 5 | module: 6 | - node 7 | _core: 8 | default_config_hash: LhdsoZPL_pFas2fjaAWue4zvrQ_tEVofLYtcNec-JGM 9 | id: node_save_action 10 | label: 'Save content' 11 | type: node 12 | plugin: 'entity:save_action:node' 13 | configuration: { } 14 | -------------------------------------------------------------------------------- /packages/xhr/src/__tests__/FetchClientErrorScenarios.test.ts: -------------------------------------------------------------------------------- 1 | import { FetchClient } from ".."; 2 | 3 | test("FetchClient throws error when fetch is not available", async () => { 4 | const config = { 5 | baseURL: "https://drupal-js-sdk-demo.d34dman.com", 6 | }; 7 | if (typeof fetch === "undefined") { 8 | expect(() => { 9 | new FetchClient(config); 10 | }).toThrow(); 11 | } 12 | }); 13 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/core.entity_view_mode.block_content.full.yml: -------------------------------------------------------------------------------- 1 | uuid: 156ec7f1-f43f-4726-aaae-fd9a101fe98c 2 | langcode: en 3 | status: false 4 | dependencies: 5 | module: 6 | - block_content 7 | _core: 8 | default_config_hash: Q7yUUYeRLByl-MCGveKKF_KhAtNICLCMJuKWfugCvso 9 | id: block_content.full 10 | label: Full 11 | description: '' 12 | targetEntityType: block_content 13 | cache: true 14 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/core.entity_view_mode.media.responsive_3x2.yml: -------------------------------------------------------------------------------- 1 | uuid: 5a985230-188a-4966-ba95-4830a4ae5f54 2 | langcode: en 3 | status: true 4 | dependencies: 5 | module: 6 | - media 7 | _core: 8 | default_config_hash: c9FOLjjpFTh4fHtsCv-yiXo9UhHFTeEMKAt4LtV0c_U 9 | id: media.responsive_3x2 10 | label: 'Responsive 3x2' 11 | description: '' 12 | targetEntityType: media 13 | cache: true 14 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/core.entity_view_mode.node.card_common_alt.yml: -------------------------------------------------------------------------------- 1 | uuid: cdf7f262-6847-449b-9ea1-6753bb296e9f 2 | langcode: en 3 | status: true 4 | dependencies: 5 | module: 6 | - node 7 | _core: 8 | default_config_hash: FQt2UaobEzqvLgBakPSNIrks328ZIIr-r4SwWq731qs 9 | id: node.card_common_alt 10 | label: 'Card common alt' 11 | description: '' 12 | targetEntityType: node 13 | cache: true 14 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/system.action.node_delete_action.yml: -------------------------------------------------------------------------------- 1 | uuid: d64a73a6-f0ec-4952-8e80-c4ffb0fba3fb 2 | langcode: en 3 | status: true 4 | dependencies: 5 | module: 6 | - node 7 | _core: 8 | default_config_hash: t43OqwzP3CTbcAagSsWKNy6KwMm_zShXo3c4-So6rQg 9 | id: node_delete_action 10 | label: 'Delete content' 11 | type: node 12 | plugin: 'entity:delete_action:node' 13 | configuration: { } 14 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/.ddev/commands/redis/redis-flush: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env sh 2 | 3 | #ddev-generated 4 | ## Description: Flush all cache inside the Redis container 5 | ## Usage: redis-flush 6 | ## Example: "ddev redis-flush" 7 | 8 | if [ -f /etc/redis/conf/security.conf ]; then 9 | redis-cli -p 6379 -h redis -a redis --no-auth-warning FLUSHALL ASYNC 10 | else 11 | redis-cli -p 6379 -h redis FLUSHALL ASYNC 12 | fi 13 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/system.action.media_delete_action.yml: -------------------------------------------------------------------------------- 1 | uuid: b078c43a-8d88-4960-b045-63521bff862f 2 | langcode: en 3 | status: true 4 | dependencies: 5 | module: 6 | - media 7 | _core: 8 | default_config_hash: FrZy1tmuXJcOxhXlBoI1Hsnen5TT-9OCC1iolWH84go 9 | id: media_delete_action 10 | label: 'Delete media' 11 | type: media 12 | plugin: 'entity:delete_action:media' 13 | configuration: { } 14 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/system.action.node_publish_action.yml: -------------------------------------------------------------------------------- 1 | uuid: 9bf61f51-bac8-46bf-8f64-ac50dddb3952 2 | langcode: en 3 | status: true 4 | dependencies: 5 | module: 6 | - node 7 | _core: 8 | default_config_hash: 2B9uF8NL5gutNKSdPRAhhAsDWFZZG1PJOBmx0aBGd_0 9 | id: node_publish_action 10 | label: 'Publish content' 11 | type: node 12 | plugin: 'entity:publish_action:node' 13 | configuration: { } 14 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/contact.form.feedback.yml: -------------------------------------------------------------------------------- 1 | uuid: 6858d197-2b01-4117-bcbb-c4e57f7031f6 2 | langcode: en 3 | status: true 4 | dependencies: { } 5 | _core: 6 | default_config_hash: vymHlgJy26BuI5GGj9-IXjwR3dRC5C0tij4BpWJnoqw 7 | id: feedback 8 | label: 'Website feedback' 9 | recipients: 10 | - admin@example.com 11 | reply: '' 12 | weight: 0 13 | message: 'Your message has been sent.' 14 | redirect: '' 15 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/core.entity_view_mode.node.search_result.yml: -------------------------------------------------------------------------------- 1 | uuid: 66f9f389-fce9-465f-8683-583ac317509a 2 | langcode: en 3 | status: false 4 | dependencies: 5 | module: 6 | - node 7 | _core: 8 | default_config_hash: d8wBEm7XvJ6H3S0IneDD9PfTBklPIH7GMpxElVemPf8 9 | id: node.search_result 10 | label: 'Search result highlighting input' 11 | description: '' 12 | targetEntityType: node 13 | cache: true 14 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/core.entity_view_mode.taxonomy_term.full.yml: -------------------------------------------------------------------------------- 1 | uuid: 3c9fcb66-33c5-4d5b-8ec7-58e0e423cd8c 2 | langcode: en 3 | status: true 4 | dependencies: 5 | module: 6 | - taxonomy 7 | _core: 8 | default_config_hash: iukUENpf8CFvjZbGGacKX_Ges0-lU9z6zvsd32P6kbo 9 | id: taxonomy_term.full 10 | label: 'Taxonomy term page' 11 | description: '' 12 | targetEntityType: taxonomy_term 13 | cache: true 14 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/system.action.media_publish_action.yml: -------------------------------------------------------------------------------- 1 | uuid: 255feced-653d-46a9-8df7-2c6662532585 2 | langcode: en 3 | status: true 4 | dependencies: 5 | module: 6 | - media 7 | _core: 8 | default_config_hash: nh83qNNrmWE-CDdHz2MdFOAk60T9mzv3R-MaKfZR2jw 9 | id: media_publish_action 10 | label: 'Publish media' 11 | type: media 12 | plugin: 'entity:publish_action:media' 13 | configuration: { } 14 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/system.action.node_make_sticky_action.yml: -------------------------------------------------------------------------------- 1 | uuid: e7bf2e3c-f1fa-4b4c-a22a-4ef86d38193e 2 | langcode: en 3 | status: true 4 | dependencies: 5 | module: 6 | - node 7 | _core: 8 | default_config_hash: sOb26JSy3fGpWkvR0WYN6_hMqj_6d1rvbvrkzp1yya0 9 | id: node_make_sticky_action 10 | label: 'Make content sticky' 11 | type: node 12 | plugin: node_make_sticky_action 13 | configuration: { } 14 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/system.action.node_promote_action.yml: -------------------------------------------------------------------------------- 1 | uuid: 5418d6c1-7722-4c98-aa29-6064456325dd 2 | langcode: en 3 | status: true 4 | dependencies: 5 | module: 6 | - node 7 | _core: 8 | default_config_hash: N0RDBTqiK4dKoN4p4oW2j0SGWycdHyALUe9M-Ofp89U 9 | id: node_promote_action 10 | label: 'Promote content to front page' 11 | type: node 12 | plugin: node_promote_action 13 | configuration: { } 14 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/recipes/README.txt: -------------------------------------------------------------------------------- 1 | Recipes allow the automation of Drupal module and theme installation and 2 | configuration. 3 | 4 | WHAT TO PLACE IN THIS DIRECTORY? 5 | -------------------------------- 6 | 7 | Placing downloaded and custom recipes in this directory separates downloaded and 8 | custom recipes from Drupal core's recipes. This allows Drupal core to be updated 9 | without overwriting these files. 10 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/core.entity_view_mode.media.scale_crop_7_3_large.yml: -------------------------------------------------------------------------------- 1 | uuid: 4284d7d7-7479-4ad5-9208-7418de0ea0cb 2 | langcode: en 3 | status: true 4 | dependencies: 5 | module: 6 | - media 7 | _core: 8 | default_config_hash: eIAbTnqakOrJKVkDU2udgursStWgA4KLvA4fTGC0T5A 9 | id: media.scale_crop_7_3_large 10 | label: 'Scale crop 7:3 large' 11 | description: '' 12 | targetEntityType: media 13 | cache: true 14 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/rest.resource.entity.menu.yml: -------------------------------------------------------------------------------- 1 | uuid: fead8b34-e4bb-4e93-885e-1fa75bb4290f 2 | langcode: en 3 | status: true 4 | dependencies: 5 | module: 6 | - serialization 7 | - system 8 | - user 9 | id: entity.menu 10 | plugin_id: 'entity:menu' 11 | granularity: resource 12 | configuration: 13 | methods: 14 | - GET 15 | formats: 16 | - json 17 | authentication: 18 | - cookie 19 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/rest.resource.user_registration.yml: -------------------------------------------------------------------------------- 1 | uuid: d8c0290e-d17b-4d6c-b780-8d3f4aaa47de 2 | langcode: en 3 | status: true 4 | dependencies: 5 | module: 6 | - serialization 7 | - user 8 | id: user_registration 9 | plugin_id: user_registration 10 | granularity: resource 11 | configuration: 12 | methods: 13 | - POST 14 | formats: 15 | - json 16 | authentication: 17 | - cookie 18 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/system.action.media_unpublish_action.yml: -------------------------------------------------------------------------------- 1 | uuid: a110280a-b5f5-4bab-87a9-6fdb764c2dcb 2 | langcode: en 3 | status: true 4 | dependencies: 5 | module: 6 | - media 7 | _core: 8 | default_config_hash: CsK6TseQ2DatEbZgbd30swOlZ28_HHwAESU2LvEnWq0 9 | id: media_unpublish_action 10 | label: 'Unpublish media' 11 | type: media 12 | plugin: 'entity:unpublish_action:media' 13 | configuration: { } 14 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/system.action.node_unpromote_action.yml: -------------------------------------------------------------------------------- 1 | uuid: c3cf78bd-2452-43e4-8a9f-cf85bfb3af9d 2 | langcode: en 3 | status: true 4 | dependencies: 5 | module: 6 | - node 7 | _core: 8 | default_config_hash: JBptjnfuOMtsdKygklXxoOgeOCTMtQxlkymjnnj-cC0 9 | id: node_unpromote_action 10 | label: 'Remove content from front page' 11 | type: node 12 | plugin: node_unpromote_action 13 | configuration: { } 14 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/system.action.node_unpublish_action.yml: -------------------------------------------------------------------------------- 1 | uuid: 3273dec4-6446-490c-8b32-644c265d58e8 2 | langcode: en 3 | status: true 4 | dependencies: 5 | module: 6 | - node 7 | _core: 8 | default_config_hash: C7X8h9FWlwkQ9y5mnU2JzgaZICAdc6HFbPVbhvjlAYE 9 | id: node_unpublish_action 10 | label: 'Unpublish content' 11 | type: node 12 | plugin: 'entity:unpublish_action:node' 13 | configuration: { } 14 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/system.action.user_add_role_action.author.yml: -------------------------------------------------------------------------------- 1 | uuid: ee630993-8ee2-49f3-9afd-ab6e7ef6c747 2 | langcode: en 3 | status: true 4 | dependencies: 5 | config: 6 | - user.role.author 7 | module: 8 | - user 9 | id: user_add_role_action.author 10 | label: 'Add the Author role to the selected user(s)' 11 | type: user 12 | plugin: user_add_role_action 13 | configuration: 14 | rid: author 15 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/system.action.user_add_role_action.editor.yml: -------------------------------------------------------------------------------- 1 | uuid: 03fa8c2d-a01a-45d5-83c8-6adbe0a3a032 2 | langcode: en 3 | status: true 4 | dependencies: 5 | config: 6 | - user.role.editor 7 | module: 8 | - user 9 | id: user_add_role_action.editor 10 | label: 'Add the Editor role to the selected user(s)' 11 | type: user 12 | plugin: user_add_role_action 13 | configuration: 14 | rid: editor 15 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/system.action.user_block_user_action.yml: -------------------------------------------------------------------------------- 1 | uuid: 2fbd426b-5efa-4d80-b86f-6b414581728c 2 | langcode: en 3 | status: true 4 | dependencies: 5 | module: 6 | - user 7 | _core: 8 | default_config_hash: DyypzTfThX10FFQw-399qPfEbLLyrhXgQrKPVsmAoJ4 9 | id: user_block_user_action 10 | label: 'Block the selected user(s)' 11 | type: user 12 | plugin: user_block_user_action 13 | configuration: { } 14 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/taxonomy.vocabulary.recipe_category.yml: -------------------------------------------------------------------------------- 1 | uuid: ad29288f-5caa-48c7-b8c8-5f8c146c9d48 2 | langcode: en 3 | status: true 4 | dependencies: { } 5 | _core: 6 | default_config_hash: g1hpqhug1bWnyoOPv5du_3POB76wiJSWzp_mwVELYiw 7 | name: 'Recipe category' 8 | vid: recipe_category 9 | description: 'Use this taxonomy to group recipes of the same type together.' 10 | weight: 0 11 | new_revision: false 12 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/block_content.type.footer_promo_block.yml: -------------------------------------------------------------------------------- 1 | uuid: ef5aa27f-b07e-4084-a5b9-29c2d962bc4e 2 | langcode: en 3 | status: true 4 | dependencies: { } 5 | _core: 6 | default_config_hash: 5B0WCCKOBdOYZxfM-iLEYNnOkuRD_dV5oEESAQOBvGA 7 | id: footer_promo_block 8 | label: 'Footer promo block' 9 | revision: false 10 | description: 'A footer promo block contains a title, promo text, and a "find out more" link.' 11 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/system.action.node_make_unsticky_action.yml: -------------------------------------------------------------------------------- 1 | uuid: a0a79ac5-3cc7-46ba-a305-08f55ec73237 2 | langcode: en 3 | status: true 4 | dependencies: 5 | module: 6 | - node 7 | _core: 8 | default_config_hash: lDM9mvIGAu8Sw8rt-uCO4Sr7yX5VPrDPxYcawkbKd6k 9 | id: node_make_unsticky_action 10 | label: 'Make content unsticky' 11 | type: node 12 | plugin: node_make_unsticky_action 13 | configuration: { } 14 | -------------------------------------------------------------------------------- /apps/demo-svelte-spa/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | Vite + Svelte 8 | 9 | 10 |
11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/system.action.user_unblock_user_action.yml: -------------------------------------------------------------------------------- 1 | uuid: 2cafb7b4-438d-4610-aadd-1191f7663f4c 2 | langcode: en 3 | status: true 4 | dependencies: 5 | module: 6 | - user 7 | _core: 8 | default_config_hash: SPsUXsR3Rc8d1y3gewzaAKWa1ncea_ywXX3f7LTn7k0 9 | id: user_unblock_user_action 10 | label: 'Unblock the selected user(s)' 11 | type: user 12 | plugin: user_unblock_user_action 13 | configuration: { } 14 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/system.site.yml: -------------------------------------------------------------------------------- 1 | _core: 2 | default_config_hash: ijfbzDTN4CbE7Sr-6ubWzy_t1vH4OtU1doNCLssVz-4 3 | langcode: en 4 | uuid: adb0e73c-3fbb-478c-a856-3d0ab3cf65e6 5 | name: 'Drush Site-Install' 6 | mail: admin@example.com 7 | slogan: '' 8 | page: 9 | 403: '' 10 | 404: '' 11 | front: /node 12 | admin_compact_mode: false 13 | weight_select_max: 100 14 | default_langcode: en 15 | mail_notification: null 16 | -------------------------------------------------------------------------------- /.changeset/xhr-fetch-binding-and-identity.md: -------------------------------------------------------------------------------- 1 | --- 2 | "@drupal-js-sdk/xhr": patch 3 | --- 4 | 5 | Fetch client: bind for safety, preserve identity for tests. 6 | 7 | - Ensure the internal fetch function is bound to the global to avoid illegal invocation errors. 8 | - Expose the original (unbound) client via `getClient()` so identity comparisons in tests continue to work. 9 | 10 | No API changes; behavior is safer across environments. 11 | 12 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/system.action.user_cancel_user_action.yml: -------------------------------------------------------------------------------- 1 | uuid: 2c3bfeb2-a995-4cd3-bcfb-1b0a6dd76ddb 2 | langcode: en 3 | status: true 4 | dependencies: 5 | module: 6 | - user 7 | _core: 8 | default_config_hash: nvrL9bFilzBvm2bjO9rQnFDpBA7dBBUjShSSt6NS-DU 9 | id: user_cancel_user_action 10 | label: 'Cancel the selected user account(s)' 11 | type: user 12 | plugin: user_cancel_user_action 13 | configuration: { } 14 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/system.action.user_remove_role_action.author.yml: -------------------------------------------------------------------------------- 1 | uuid: 68c3c78a-2fc4-4d72-8101-856666e5ee68 2 | langcode: en 3 | status: true 4 | dependencies: 5 | config: 6 | - user.role.author 7 | module: 8 | - user 9 | id: user_remove_role_action.author 10 | label: 'Remove the Author role from the selected user(s)' 11 | type: user 12 | plugin: user_remove_role_action 13 | configuration: 14 | rid: author 15 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/system.action.user_remove_role_action.editor.yml: -------------------------------------------------------------------------------- 1 | uuid: 3fda10f9-d650-4362-bc84-1fe3ccd504c6 2 | langcode: en 3 | status: true 4 | dependencies: 5 | config: 6 | - user.role.editor 7 | module: 8 | - user 9 | id: user_remove_role_action.editor 10 | label: 'Remove the Editor role from the selected user(s)' 11 | type: user 12 | plugin: user_remove_role_action 13 | configuration: 14 | rid: editor 15 | -------------------------------------------------------------------------------- /.changeset/interfaces-core-getsessionservice.md: -------------------------------------------------------------------------------- 1 | --- 2 | "@drupal-js-sdk/interfaces": minor 3 | --- 4 | 5 | Expose `getSessionService()` on `CoreInterface`. 6 | 7 | - Adds `getSessionService()` so consumers can access the configured `SessionInterface` directly from core. 8 | - Aligns interfaces with the default session store initialization in core for better DX and SSR safety. 9 | 10 | Backward compatible; additive interface surface. 11 | 12 | 13 | -------------------------------------------------------------------------------- /.changeset/menu-typed-linkset-and-tree.md: -------------------------------------------------------------------------------- 1 | --- 2 | "@drupal-js-sdk/menu": patch 3 | --- 4 | 5 | Type menu linkset response and fix tree conversion loops. 6 | 7 | - Add `MenuLinkset` and `MenuLinksetItem` types and guard against legacy/current keys. 8 | - `getMenuRaw()` is now typed; `normalizeListItems()` uses a type guard. 9 | - Replace side-effectful `map` with `forEach` when building the tree. 10 | 11 | No breaking changes to the public API. 12 | 13 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/language.content_settings.path_alias.path_alias.yml: -------------------------------------------------------------------------------- 1 | uuid: 41c794bb-a2d9-4aeb-9a76-97cd667f8481 2 | langcode: en 3 | status: true 4 | dependencies: 5 | module: 6 | - path_alias 7 | _core: 8 | default_config_hash: dhjFABRzm52DkRXnYja5ZoHwjY0R3gEGic3KpDUXgRo 9 | id: path_alias.path_alias 10 | target_entity_type_id: path_alias 11 | target_bundle: path_alias 12 | default_langcode: und 13 | language_alterable: true 14 | -------------------------------------------------------------------------------- /.changeset/entity-relations-and-pagination-facade.md: -------------------------------------------------------------------------------- 1 | --- 2 | "@drupal-js-sdk/entity": minor 3 | --- 4 | 5 | Add relationship loader and pagination passthrough. 6 | 7 | - Attach non-enumerable `rel(name).load()` to loaded/listed records; coalesces concurrent loads 8 | - Add `EntityService.listPage()` and `FluentEntity.listPage()` that return `{ items, page }` when adapter supports it 9 | 10 | Backwards compatible; existing `list()`/`load()` unaffected. 11 | 12 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/node.type.page.yml: -------------------------------------------------------------------------------- 1 | uuid: 9e8a56fd-6d4e-48bb-ac31-44065ef29235 2 | langcode: en 3 | status: true 4 | dependencies: { } 5 | _core: 6 | default_config_hash: i0snV8Wj--OkRW12UdachUiYiz3FbeMwHu_pZYfzKLc 7 | name: 'Basic page' 8 | type: page 9 | description: "Use basic pages for your static content, such as an 'About us' page." 10 | help: null 11 | new_revision: true 12 | preview_mode: 1 13 | display_submitted: false 14 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/.editorconfig: -------------------------------------------------------------------------------- 1 | # Drupal editor configuration normalization 2 | # @see http://editorconfig.org/ 3 | 4 | # This is the top-most .editorconfig file; do not search in parent directories. 5 | root = true 6 | 7 | # All files. 8 | [*] 9 | end_of_line = LF 10 | indent_style = space 11 | indent_size = 2 12 | charset = utf-8 13 | trim_trailing_whitespace = true 14 | insert_final_newline = true 15 | 16 | [composer.{json,lock}] 17 | indent_size = 4 18 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/rest.resource.entity.contact_message.yml: -------------------------------------------------------------------------------- 1 | uuid: 0408fad7-f912-4419-b912-23e7f26d8526 2 | langcode: en 3 | status: true 4 | dependencies: 5 | module: 6 | - contact 7 | - serialization 8 | - user 9 | id: entity.contact_message 10 | plugin_id: 'entity:contact_message' 11 | granularity: resource 12 | configuration: 13 | methods: 14 | - POST 15 | formats: 16 | - json 17 | authentication: 18 | - cookie 19 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/rest.resource.entity.user.yml: -------------------------------------------------------------------------------- 1 | uuid: e9551800-d26d-44ee-9cb9-d411de7c90a8 2 | langcode: en 3 | status: true 4 | dependencies: 5 | module: 6 | - serialization 7 | - user 8 | id: entity.user 9 | plugin_id: 'entity:user' 10 | granularity: resource 11 | configuration: 12 | methods: 13 | - GET 14 | - POST 15 | - DELETE 16 | - PATCH 17 | formats: 18 | - json 19 | authentication: 20 | - cookie 21 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/system.action.taxonomy_term_publish_action.yml: -------------------------------------------------------------------------------- 1 | uuid: 2d873a00-083b-4514-b5f7-87fc81bcc3f8 2 | langcode: en 3 | status: true 4 | dependencies: 5 | module: 6 | - taxonomy 7 | _core: 8 | default_config_hash: DoVt_VGgVLcDD4XmVbSFzr0K17SJy9imFiYusKkJBgY 9 | id: taxonomy_term_publish_action 10 | label: 'Publish taxonomy term' 11 | type: taxonomy_term 12 | plugin: 'entity:publish_action:taxonomy_term' 13 | configuration: { } 14 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/system.action.user_add_role_action.administrator.yml: -------------------------------------------------------------------------------- 1 | uuid: fca319b7-b879-43f8-a24b-ec40e346680e 2 | langcode: en 3 | status: true 4 | dependencies: 5 | config: 6 | - user.role.administrator 7 | module: 8 | - user 9 | id: user_add_role_action.administrator 10 | label: 'Add the Administrator role to the selected user(s)' 11 | type: user 12 | plugin: user_add_role_action 13 | configuration: 14 | rid: administrator 15 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/.ddev/redis/redis.conf: -------------------------------------------------------------------------------- 1 | # Redis configuration. 2 | # #ddev-generated 3 | # Example configuration files for reference: 4 | # http://download.redis.io/redis-stable/redis.conf 5 | # http://download.redis.io/redis-stable/sentinel.conf 6 | 7 | maxmemory 2048mb 8 | maxmemory-policy allkeys-lfu 9 | 10 | # to disable Redis persistence, remove ddev-generated from this file, 11 | # and uncomment the two lines below: 12 | #appendonly no 13 | #save "" 14 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/core.entity_view_mode.media.media_library.yml: -------------------------------------------------------------------------------- 1 | uuid: 601cbd42-d4b4-4744-b857-cb69404058fd 2 | langcode: en 3 | status: true 4 | dependencies: 5 | module: 6 | - media 7 | enforced: 8 | module: 9 | - media_library 10 | _core: 11 | default_config_hash: 04_dAqpWYP1WmsXZ7IXJ7-yarCvNddD10EUkBDtIFy4 12 | id: media.media_library 13 | label: 'Media library' 14 | description: '' 15 | targetEntityType: media 16 | cache: true 17 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/core.entity_form_mode.media.media_library.yml: -------------------------------------------------------------------------------- 1 | uuid: 9c187a8b-823a-40e6-83f9-2b5070948f93 2 | langcode: en 3 | status: true 4 | dependencies: 5 | module: 6 | - media 7 | enforced: 8 | module: 9 | - media_library 10 | _core: 11 | default_config_hash: h9eGjVAfAa4nod-BMI9TzN2uZwl7_WhRYREJZlOC6fs 12 | id: media.media_library 13 | label: 'Media library' 14 | description: null 15 | targetEntityType: media 16 | cache: true 17 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/node.type.article.yml: -------------------------------------------------------------------------------- 1 | uuid: 455e3cd7-90b6-4e76-8eaf-0e6b2d82a4ec 2 | langcode: en 3 | status: true 4 | dependencies: { } 5 | _core: 6 | default_config_hash: Fe3N1uqaAyyKJbVkqT-btXy3t98puW8GCRD822xjl10 7 | name: Article 8 | type: article 9 | description: 'Use articles for time-sensitive content like news, press releases or blog posts.' 10 | help: null 11 | new_revision: true 12 | preview_mode: 1 13 | display_submitted: true 14 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/system.action.taxonomy_term_unpublish_action.yml: -------------------------------------------------------------------------------- 1 | uuid: 1b634c16-a6e1-41ac-acf2-3ba2926a33e7 2 | langcode: en 3 | status: true 4 | dependencies: 5 | module: 6 | - taxonomy 7 | _core: 8 | default_config_hash: z2sNRM3ECa7FPCGnSNje_9SmZJQgwhD_6fG_L4Mr8zI 9 | id: taxonomy_term_unpublish_action 10 | label: 'Unpublish taxonomy term' 11 | type: taxonomy_term 12 | plugin: 'entity:unpublish_action:taxonomy_term' 13 | configuration: { } 14 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/block_content.type.banner_block.yml: -------------------------------------------------------------------------------- 1 | uuid: c45b7e0e-a512-4206-936b-b05d7440b3bd 2 | langcode: en 3 | status: true 4 | dependencies: { } 5 | _core: 6 | default_config_hash: 5e4BCZPqr9acBiJlX6gfikEX3YdBUesFrCSUsYLWXbs 7 | id: banner_block 8 | label: 'Banner block' 9 | revision: false 10 | description: "A banner block contains a title, summary, link to content and a background image. The background image is scaled to fill the browser's width." 11 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/rest.resource.entity.file.yml: -------------------------------------------------------------------------------- 1 | uuid: 6f8d4579-c5e9-4177-9322-d458c78dac1b 2 | langcode: en 3 | status: true 4 | dependencies: 5 | module: 6 | - file 7 | - serialization 8 | - user 9 | id: entity.file 10 | plugin_id: 'entity:file' 11 | granularity: resource 12 | configuration: 13 | methods: 14 | - GET 15 | - POST 16 | - DELETE 17 | - PATCH 18 | formats: 19 | - json 20 | authentication: 21 | - cookie 22 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/rest.resource.entity.node.yml: -------------------------------------------------------------------------------- 1 | uuid: 4de72405-5c89-4c75-a9e8-e42fd70250e1 2 | langcode: en 3 | status: true 4 | dependencies: 5 | module: 6 | - node 7 | - serialization 8 | - user 9 | id: entity.node 10 | plugin_id: 'entity:node' 11 | granularity: resource 12 | configuration: 13 | methods: 14 | - GET 15 | - POST 16 | - DELETE 17 | - PATCH 18 | formats: 19 | - json 20 | authentication: 21 | - cookie 22 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/system.action.user_remove_role_action.administrator.yml: -------------------------------------------------------------------------------- 1 | uuid: 25ceb5ca-969d-4005-b22f-c789f984bad1 2 | langcode: en 3 | status: true 4 | dependencies: 5 | config: 6 | - user.role.administrator 7 | module: 8 | - user 9 | id: user_remove_role_action.administrator 10 | label: 'Remove the Administrator role from the selected user(s)' 11 | type: user 12 | plugin: user_remove_role_action 13 | configuration: 14 | rid: administrator 15 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/rest.resource.entity.media.yml: -------------------------------------------------------------------------------- 1 | uuid: b50deb24-6546-4638-b241-a63446fdd00b 2 | langcode: en 3 | status: true 4 | dependencies: 5 | module: 6 | - media 7 | - serialization 8 | - user 9 | id: entity.media 10 | plugin_id: 'entity:media' 11 | granularity: resource 12 | configuration: 13 | methods: 14 | - GET 15 | - POST 16 | - DELETE 17 | - PATCH 18 | formats: 19 | - json 20 | authentication: 21 | - cookie 22 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/.ddev/commands/redis/redis-cli: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env sh 2 | 3 | #ddev-generated 4 | ## Description: Run redis-cli inside the Redis container 5 | ## Usage: redis-cli [flags] [args] 6 | ## Example: "ddev redis-cli KEYS *" or "ddev redis-cli INFO" or "ddev redis-cli --version" 7 | ## Aliases: redis 8 | 9 | if [ -f /etc/redis/conf/security.conf ]; then 10 | redis-cli -p 6379 -h redis -a redis --no-auth-warning $@ 11 | else 12 | redis-cli -p 6379 -h redis $@ 13 | fi 14 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/search.settings.yml: -------------------------------------------------------------------------------- 1 | _core: 2 | default_config_hash: hvVxL1G-ZCxaq32IZws0YsfuhvaDiQE_np-0g35KjUk 3 | and_or_limit: 7 4 | default_page: node_search 5 | index: 6 | cron_limit: 100 7 | overlap_cjk: true 8 | minimum_word_size: 3 9 | tag_weights: 10 | h1: 25 11 | h2: 18 12 | h3: 15 13 | h4: 14 14 | h5: 9 15 | h6: 6 16 | u: 3 17 | b: 3 18 | i: 3 19 | strong: 3 20 | em: 3 21 | a: 10 22 | logging: false 23 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/media.type.image.yml: -------------------------------------------------------------------------------- 1 | uuid: a440f4f9-6f2b-44b6-be13-9b48588752d0 2 | langcode: en 3 | status: true 4 | dependencies: { } 5 | _core: 6 | default_config_hash: u7OxrscEED35iDR3R0akmw7QNvBSMEPJXFtKP57qBh8 7 | id: image 8 | label: Image 9 | description: 'Use local images for reusable media.' 10 | source: image 11 | queue_thumbnail_downloads: false 12 | new_revision: true 13 | source_configuration: 14 | source_field: field_media_image 15 | field_map: { } 16 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/system.theme.global.yml: -------------------------------------------------------------------------------- 1 | _core: 2 | default_config_hash: CE6mp0IUq9iWxJDj4MR0oorToG2KJmsXHHnbstTFxys 3 | favicon: 4 | mimetype: image/vnd.microsoft.icon 5 | path: core/profiles/demo_umami/themes/umami/favicon.ico 6 | url: '' 7 | use_default: false 8 | features: 9 | comment_user_picture: true 10 | comment_user_verification: true 11 | favicon: true 12 | node_user_picture: true 13 | logo: 14 | path: '' 15 | url: null 16 | use_default: true 17 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/file.settings.yml: -------------------------------------------------------------------------------- 1 | _core: 2 | default_config_hash: 2bwjZB1IjEYbppgZT3g7YW_5h_LDZYNa3DaDEfWX82U 3 | description: 4 | type: textfield 5 | length: 128 6 | icon: 7 | directory: core/modules/file/icons 8 | make_unused_managed_files_temporary: false 9 | filename_sanitization: 10 | transliterate: false 11 | replace_whitespace: false 12 | replace_non_alphanumeric: false 13 | deduplicate_separators: false 14 | lowercase: false 15 | replacement_character: '-' 16 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/media.type.audio.yml: -------------------------------------------------------------------------------- 1 | uuid: 374d7eef-1403-44fd-baa6-5ebd04e1a5f9 2 | langcode: en 3 | status: true 4 | dependencies: { } 5 | _core: 6 | default_config_hash: eJw8n6Tk2tO3ZysuEeGR1gZa1yRffaZzR4t0Q7iNurs 7 | id: audio 8 | label: Audio 9 | description: 'A locally hosted audio file.' 10 | source: audio_file 11 | queue_thumbnail_downloads: false 12 | new_revision: true 13 | source_configuration: 14 | source_field: field_media_audio_file 15 | field_map: 16 | name: name 17 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/media.type.video.yml: -------------------------------------------------------------------------------- 1 | uuid: 294d9900-eb9e-4809-bcdf-d6fed71d50b0 2 | langcode: en 3 | status: true 4 | dependencies: { } 5 | _core: 6 | default_config_hash: hzgvcRgZHltqWf8hBmttoWh95tCJoPL25lPq9YSIRsY 7 | id: video 8 | label: Video 9 | description: 'A locally hosted video file.' 10 | source: video_file 11 | queue_thumbnail_downloads: false 12 | new_revision: true 13 | source_configuration: 14 | source_field: field_media_video_file 15 | field_map: 16 | name: name 17 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/rest.resource.entity.taxonomy_term.yml: -------------------------------------------------------------------------------- 1 | uuid: bf22f8ad-af23-4de7-9669-d8438b608e2f 2 | langcode: en 3 | status: true 4 | dependencies: 5 | module: 6 | - serialization 7 | - taxonomy 8 | - user 9 | id: entity.taxonomy_term 10 | plugin_id: 'entity:taxonomy_term' 11 | granularity: resource 12 | configuration: 13 | methods: 14 | - GET 15 | - POST 16 | - DELETE 17 | - PATCH 18 | formats: 19 | - json 20 | authentication: 21 | - cookie 22 | -------------------------------------------------------------------------------- /packages/interfaces/src/__tests__/error.test.ts: -------------------------------------------------------------------------------- 1 | import { DrupalErrorInterface } from ".."; 2 | 3 | it("DrupalErrorInterface", () => { 4 | const state: DrupalErrorInterface = { 5 | name: "Life", 6 | message: "Answer", 7 | code: 42, 8 | getErrorCode: function () { 9 | return 42; 10 | }, 11 | }; 12 | expect(state.name).toEqual("Life"); 13 | expect(state.message).toEqual("Answer"); 14 | expect(state.code).toEqual(42); 15 | expect(state.getErrorCode()).toEqual(42); 16 | }); 17 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/media.type.document.yml: -------------------------------------------------------------------------------- 1 | uuid: 211bfa10-4234-454a-a67e-bcd8bd71038d 2 | langcode: en 3 | status: true 4 | dependencies: { } 5 | _core: 6 | default_config_hash: _D9q3XSnP6ik9we9UuoTvZsQKPuYNp_G9PfwVtWzgnQ 7 | id: document 8 | label: Document 9 | description: 'An uploaded file or document, such as a PDF.' 10 | source: file 11 | queue_thumbnail_downloads: false 12 | new_revision: true 13 | source_configuration: 14 | source_field: field_media_document 15 | field_map: 16 | name: name 17 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/node.type.recipe.yml: -------------------------------------------------------------------------------- 1 | uuid: 071c9147-8d54-4d08-a742-4bed562d0d06 2 | langcode: en 3 | status: true 4 | dependencies: 5 | module: 6 | - menu_ui 7 | third_party_settings: 8 | menu_ui: 9 | available_menus: { } 10 | parent: '' 11 | _core: 12 | default_config_hash: NQt2gULY4oel0NzoDdFVygry3XstQ8obHX8IT6ntrOM 13 | name: Recipe 14 | type: recipe 15 | description: 'Add a new recipe to the site.' 16 | help: null 17 | new_revision: true 18 | preview_mode: 1 19 | display_submitted: false 20 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/block.block.claro_help.yml: -------------------------------------------------------------------------------- 1 | uuid: 664cfdc1-a01d-43c3-b0df-d950ef22ff80 2 | langcode: en 3 | status: true 4 | dependencies: 5 | module: 6 | - help 7 | theme: 8 | - claro 9 | _core: 10 | default_config_hash: jccFSSVqV0WCDb6NtML1VWAWTtDbZ-zn5YgTRMgMrIM 11 | id: claro_help 12 | theme: claro 13 | region: help 14 | weight: 0 15 | provider: null 16 | plugin: help_block 17 | settings: 18 | id: help_block 19 | label: Help 20 | label_display: '0' 21 | provider: help 22 | visibility: { } 23 | -------------------------------------------------------------------------------- /.changeset/README.md: -------------------------------------------------------------------------------- 1 | # Changesets 2 | 3 | Hello and welcome! This folder has been automatically generated by `@changesets/cli`, a build tool that works 4 | with multi-package repos, or single-package repos to help you version and publish your code. You can 5 | find the full documentation for it [in our repository](https://github.com/changesets/changesets) 6 | 7 | We have a quick list of common questions to get you started engaging with this project in 8 | [our documentation](https://github.com/changesets/changesets/blob/main/docs/common-questions.md) 9 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/block.block.claro_page_title.yml: -------------------------------------------------------------------------------- 1 | uuid: b9c69dd2-2739-4b0a-9dac-774603e8a8ee 2 | langcode: en 3 | status: true 4 | dependencies: 5 | theme: 6 | - claro 7 | _core: 8 | default_config_hash: fNwDdW063tk_ktzSWzZVeQS9wzvLooVO280BQ9WrsIs 9 | id: claro_page_title 10 | theme: claro 11 | region: header 12 | weight: -30 13 | provider: null 14 | plugin: page_title_block 15 | settings: 16 | id: page_title_block 17 | label: 'Page title' 18 | label_display: '0' 19 | provider: core 20 | visibility: { } 21 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/block.block.umami_help.yml: -------------------------------------------------------------------------------- 1 | uuid: 15bd5224-70eb-4ee8-8778-324726607893 2 | langcode: en 3 | status: true 4 | dependencies: 5 | module: 6 | - help 7 | theme: 8 | - umami 9 | _core: 10 | default_config_hash: YC1H0JGjRvoA9RedtLhXY-9AYUTPz3XxcmDb_3H-tWY 11 | id: umami_help 12 | theme: umami 13 | region: highlighted 14 | weight: 0 15 | provider: null 16 | plugin: help_block 17 | settings: 18 | id: help_block 19 | label: Help 20 | label_display: '0' 21 | provider: help 22 | visibility: { } 23 | -------------------------------------------------------------------------------- /.changeset/docs-unify-imports-and-facade.md: -------------------------------------------------------------------------------- 1 | --- 2 | "drupal-js-sdk": minor 3 | "@drupal-js-sdk/menu": patch 4 | --- 5 | 6 | Unify docs import style and add top-level DrupalSDK facade. 7 | 8 | - Aggregator now exports `DrupalSDK` facade exposing `auth`, `menu`, and `entities` for a smoother DX. 9 | - Docs updated to prefer `import { DrupalSDK } from "drupal-js-sdk"` and facade usage. 10 | - Menu adds verb-style aliases: `list()` for `getMenu()` and `raw()` for `getMenuRaw()`. 11 | 12 | No breaking changes; previous APIs remain available. 13 | 14 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/language.content_settings.node.page.yml: -------------------------------------------------------------------------------- 1 | uuid: b2a123a4-b5b3-47ab-989d-9ab97cb80e94 2 | langcode: en 3 | status: true 4 | dependencies: 5 | config: 6 | - node.type.page 7 | module: 8 | - content_translation 9 | third_party_settings: 10 | content_translation: 11 | enabled: true 12 | _core: 13 | default_config_hash: BCybzFDou7Yq55SwRpkcNUWrOZlb0ofNBqhZCDlKdhs 14 | id: node.page 15 | target_entity_type_id: node 16 | target_bundle: page 17 | default_langcode: site_default 18 | language_alterable: true 19 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/field.storage.node.body.yml: -------------------------------------------------------------------------------- 1 | uuid: 65722c52-86aa-4d2e-9e90-bad274c0033f 2 | langcode: en 3 | status: true 4 | dependencies: 5 | module: 6 | - node 7 | - text 8 | _core: 9 | default_config_hash: EBUo7qOWqaiZaQ_RC9sLY5IoDKphS34v77VIHSACmVY 10 | id: node.body 11 | field_name: body 12 | entity_type: node 13 | type: text_with_summary 14 | settings: { } 15 | module: text 16 | locked: false 17 | cardinality: 1 18 | translatable: true 19 | indexes: { } 20 | persist_with_no_fields: true 21 | custom_storage: false 22 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/language/es/workflows.workflow.editorial.yml: -------------------------------------------------------------------------------- 1 | label: Editorial 2 | type_settings: 3 | states: 4 | archived: 5 | label: Archivado 6 | draft: 7 | label: Borrador 8 | published: 9 | label: Publicado 10 | transitions: 11 | archive: 12 | label: Archivo 13 | archived_draft: 14 | label: 'Restaurar a Borrador' 15 | archived_published: 16 | label: Restaurar 17 | create_new_draft: 18 | label: 'Crear nuevo borrador' 19 | publish: 20 | label: Publicar 21 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/language.content_settings.media.image.yml: -------------------------------------------------------------------------------- 1 | uuid: 04bf3549-1eae-44b3-bbe2-018e78cd5813 2 | langcode: en 3 | status: true 4 | dependencies: 5 | config: 6 | - media.type.image 7 | module: 8 | - content_translation 9 | third_party_settings: 10 | content_translation: 11 | enabled: true 12 | _core: 13 | default_config_hash: p53Q2UIlOG3WlSHQObzOfiCUvAchLZ-3Ft19kvO5nmI 14 | id: media.image 15 | target_entity_type_id: media 16 | target_bundle: image 17 | default_langcode: site_default 18 | language_alterable: true 19 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/language.content_settings.node.recipe.yml: -------------------------------------------------------------------------------- 1 | uuid: a0f6c286-d000-4763-8fa8-4df28950939a 2 | langcode: en 3 | status: true 4 | dependencies: 5 | config: 6 | - node.type.recipe 7 | module: 8 | - content_translation 9 | third_party_settings: 10 | content_translation: 11 | enabled: true 12 | _core: 13 | default_config_hash: XuiNUBeexJIZ0pGEA4kaHE5WsRxd4p87Igxh8cE_eDU 14 | id: node.recipe 15 | target_entity_type_id: node 16 | target_bundle: recipe 17 | default_langcode: site_default 18 | language_alterable: true 19 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/block.block.claro_local_actions.yml: -------------------------------------------------------------------------------- 1 | uuid: 85d99b63-7053-4f2b-b89a-0a9e58b7a37a 2 | langcode: en 3 | status: true 4 | dependencies: 5 | theme: 6 | - claro 7 | _core: 8 | default_config_hash: CdXfDmRgAvms7EQovxxWPdYi0GitxeRbVtScYK16ZH0 9 | id: claro_local_actions 10 | theme: claro 11 | region: content 12 | weight: -10 13 | provider: null 14 | plugin: local_actions_block 15 | settings: 16 | id: local_actions_block 17 | label: 'Primary admin actions' 18 | label_display: '0' 19 | provider: core 20 | visibility: { } 21 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/field.storage.node.field_body.yml: -------------------------------------------------------------------------------- 1 | uuid: 5a42cf2d-1166-4bf3-8df2-3184721ac285 2 | langcode: en 3 | status: true 4 | dependencies: 5 | module: 6 | - node 7 | - text 8 | _core: 9 | default_config_hash: ki2jeQPtuSeCovA8r8Z1XVJHMc5F5H_31Q8_6Y7sEMw 10 | id: node.field_body 11 | field_name: field_body 12 | entity_type: node 13 | type: text_long 14 | settings: { } 15 | module: text 16 | locked: false 17 | cardinality: 1 18 | translatable: true 19 | indexes: { } 20 | persist_with_no_fields: false 21 | custom_storage: false 22 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/language.content_settings.node.article.yml: -------------------------------------------------------------------------------- 1 | uuid: 9e471d27-f556-4f46-ac06-ae3d66d6bd1f 2 | langcode: en 3 | status: true 4 | dependencies: 5 | config: 6 | - node.type.article 7 | module: 8 | - content_translation 9 | third_party_settings: 10 | content_translation: 11 | enabled: true 12 | _core: 13 | default_config_hash: 0wQkRfzyea2BPkoudJ9i45eN0okt2MKAs671vjDwWKI 14 | id: node.article 15 | target_entity_type_id: node 16 | target_bundle: article 17 | default_langcode: site_default 18 | language_alterable: true 19 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/block.block.claro_content.yml: -------------------------------------------------------------------------------- 1 | uuid: 0f7744ce-5f92-4e03-9800-ad9db2e5e401 2 | langcode: en 3 | status: true 4 | dependencies: 5 | module: 6 | - system 7 | theme: 8 | - claro 9 | _core: 10 | default_config_hash: a0Yyx1GeyKarZ4T_yXQBR_ZFKnXiFLtxAb6gWLd8nr0 11 | id: claro_content 12 | theme: claro 13 | region: content 14 | weight: 0 15 | provider: null 16 | plugin: system_main_block 17 | settings: 18 | id: system_main_block 19 | label: 'Main page content' 20 | label_display: '0' 21 | provider: system 22 | visibility: { } 23 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/block.block.umami_content.yml: -------------------------------------------------------------------------------- 1 | uuid: cc00ef0e-9112-42a6-9a32-4094f5ee98de 2 | langcode: en 3 | status: true 4 | dependencies: 5 | module: 6 | - system 7 | theme: 8 | - umami 9 | _core: 10 | default_config_hash: R0XK_KzE-HPbKLfcvVjZF2FL79MUEIipq_nDvje9MRQ 11 | id: umami_content 12 | theme: umami 13 | region: content 14 | weight: -7 15 | provider: null 16 | plugin: system_main_block 17 | settings: 18 | id: system_main_block 19 | label: 'Main page content' 20 | label_display: '0' 21 | provider: system 22 | visibility: { } 23 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/block.block.umami_local_tasks.yml: -------------------------------------------------------------------------------- 1 | uuid: f1820a60-6f0e-44f6-b63d-ee398d76f6c8 2 | langcode: en 3 | status: true 4 | dependencies: 5 | theme: 6 | - umami 7 | _core: 8 | default_config_hash: IxC1zV9L6MyT897p-qPdP5PQiixF2f7pCSmHvCQJUkM 9 | id: umami_local_tasks 10 | theme: umami 11 | region: tabs 12 | weight: -7 13 | provider: null 14 | plugin: local_tasks_block 15 | settings: 16 | id: local_tasks_block 17 | label: Tabs 18 | label_display: '0' 19 | provider: core 20 | primary: true 21 | secondary: true 22 | visibility: { } 23 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/field.storage.node.field_summary.yml: -------------------------------------------------------------------------------- 1 | uuid: 4c73af00-eb99-4a3d-a196-319b1d1b0bdb 2 | langcode: en 3 | status: true 4 | dependencies: 5 | module: 6 | - node 7 | - text 8 | _core: 9 | default_config_hash: tf46K2CzbIMIfI6La3fX75nQRH72-CmPWTb_-s-xcfM 10 | id: node.field_summary 11 | field_name: field_summary 12 | entity_type: node 13 | type: text_long 14 | settings: { } 15 | module: text 16 | locked: false 17 | cardinality: 1 18 | translatable: true 19 | indexes: { } 20 | persist_with_no_fields: false 21 | custom_storage: false 22 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/core.base_field_override.node.recipe.title.yml: -------------------------------------------------------------------------------- 1 | uuid: cde09941-4ac3-48a0-aca2-6762058262ae 2 | langcode: en 3 | status: true 4 | dependencies: 5 | config: 6 | - node.type.recipe 7 | _core: 8 | default_config_hash: L5GWNOB-GmrakzgU30NW9tGi0jhU2Pry8ur3YjTkhoo 9 | id: node.recipe.title 10 | field_name: title 11 | entity_type: node 12 | bundle: recipe 13 | label: 'Recipe Name' 14 | description: '' 15 | required: true 16 | translatable: true 17 | default_value: { } 18 | default_value_callback: '' 19 | settings: { } 20 | field_type: string 21 | -------------------------------------------------------------------------------- /.changeset/core-default-session.md: -------------------------------------------------------------------------------- 1 | --- 2 | "@drupal-js-sdk/core": minor 3 | --- 4 | 5 | Add default browser session store with in-memory fallback. 6 | 7 | - `Drupal` now initializes `SessionInterface` automatically: 8 | - Uses `StorageInWeb(window.localStorage)` in browsers when available 9 | - Falls back to `StorageInMemory` otherwise (SSR, tests) 10 | - Accepts optional `session` in `DrupalConfig` to override the default. 11 | - `CoreInterface` now includes `getSessionService()`. 12 | 13 | This improves DX by ensuring `DrupalAuth` and other consumers have a session by default. 14 | 15 | -------------------------------------------------------------------------------- /.changeset/fluent-entity-builder.md: -------------------------------------------------------------------------------- 1 | --- 2 | "@drupal-js-sdk/entity": minor 3 | --- 4 | 5 | Add fluent entity builder for improved DX. 6 | 7 | - New `FluentEntity` with chainable API: `select`, `include`, `sort`, `page`, filters (`whereEq`, `whereContains`, `whereIn`, `whereRange`). 8 | - Add `DrupalEntity.node(bundle)` to obtain a fluent builder. 9 | - Support `id(...).get()` for single record and `.list()` for collections. 10 | - Export `FluentEntity` from `@drupal-js-sdk/entity`. 11 | 12 | These changes enable concise, discoverable entity queries while remaining adapter-agnostic. 13 | 14 | -------------------------------------------------------------------------------- /apps/demo-svelte-spa/src/lib/components/SectionHeader.svelte: -------------------------------------------------------------------------------- 1 | 9 | 10 |
11 |

12 | 13 | {title} 14 |

15 |
16 | 17 |
18 |
19 | 20 | 21 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/block.block.claro_breadcrumbs.yml: -------------------------------------------------------------------------------- 1 | uuid: 59988aa7-254a-414a-85af-c73228faeffb 2 | langcode: en 3 | status: true 4 | dependencies: 5 | module: 6 | - system 7 | theme: 8 | - claro 9 | _core: 10 | default_config_hash: NjcxOBrPOiK5-38t56DwFBDVY4yer7YSlbRWXFuHe7A 11 | id: claro_breadcrumbs 12 | theme: claro 13 | region: breadcrumb 14 | weight: 0 15 | provider: null 16 | plugin: system_breadcrumb_block 17 | settings: 18 | id: system_breadcrumb_block 19 | label: Breadcrumbs 20 | label_display: '0' 21 | provider: system 22 | visibility: { } 23 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/block.block.claro_messages.yml: -------------------------------------------------------------------------------- 1 | uuid: a2f204c3-800c-4c35-abb6-3b065a11e9c2 2 | langcode: en 3 | status: true 4 | dependencies: 5 | module: 6 | - system 7 | theme: 8 | - claro 9 | _core: 10 | default_config_hash: '-Ac3ISpIT0PQ-whzD7_dw0SdKi6dAbRFNWdSjOiVDqg' 11 | id: claro_messages 12 | theme: claro 13 | region: highlighted 14 | weight: 0 15 | provider: null 16 | plugin: system_messages_block 17 | settings: 18 | id: system_messages_block 19 | label: 'Status messages' 20 | label_display: '0' 21 | provider: system 22 | visibility: { } 23 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/block.block.umami_messages.yml: -------------------------------------------------------------------------------- 1 | uuid: 0b050bc4-dfef-49b6-a770-846c6693ded1 2 | langcode: en 3 | status: true 4 | dependencies: 5 | module: 6 | - system 7 | theme: 8 | - umami 9 | _core: 10 | default_config_hash: BiuNZYyLVSO0k0X_MWkay_4soJksK4EaVtQOmBZxtgI 11 | id: umami_messages 12 | theme: umami 13 | region: highlighted 14 | weight: -8 15 | provider: null 16 | plugin: system_messages_block 17 | settings: 18 | id: system_messages_block 19 | label: 'Status messages' 20 | label_display: '0' 21 | provider: system 22 | visibility: { } 23 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/field.storage.block_content.body.yml: -------------------------------------------------------------------------------- 1 | uuid: 281671b2-0ecb-40bd-8af7-55f4d3f8a4bb 2 | langcode: en 3 | status: true 4 | dependencies: 5 | module: 6 | - block_content 7 | - text 8 | _core: 9 | default_config_hash: eS0snV_L3dx9shtWRTzm5eblwOJ7qKWC9IE-4GMTDFc 10 | id: block_content.body 11 | field_name: body 12 | entity_type: block_content 13 | type: text_with_summary 14 | settings: { } 15 | module: text 16 | locked: false 17 | cardinality: 1 18 | translatable: true 19 | indexes: { } 20 | persist_with_no_fields: true 21 | custom_storage: false 22 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/language.content_settings.block_content.basic.yml: -------------------------------------------------------------------------------- 1 | uuid: 65e01fc0-e501-4919-b6f8-21ad9f2bb477 2 | langcode: en 3 | status: true 4 | dependencies: 5 | config: 6 | - block_content.type.basic 7 | module: 8 | - content_translation 9 | third_party_settings: 10 | content_translation: 11 | enabled: true 12 | _core: 13 | default_config_hash: 3Lw85WiS5-LM4WyfNIZMtBlxjvk9cgR6hhTIbat-kJQ 14 | id: block_content.basic 15 | target_entity_type_id: block_content 16 | target_bundle: basic 17 | default_langcode: site_default 18 | language_alterable: true 19 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/language.content_settings.taxonomy_term.tags.yml: -------------------------------------------------------------------------------- 1 | uuid: 0bc00484-0175-4593-9555-e9e154bcadae 2 | langcode: en 3 | status: true 4 | dependencies: 5 | config: 6 | - taxonomy.vocabulary.tags 7 | module: 8 | - content_translation 9 | third_party_settings: 10 | content_translation: 11 | enabled: true 12 | _core: 13 | default_config_hash: nm4_dGToP6SyYBVO8GcLc0q_Q08WuyD98A8rvZVpoSw 14 | id: taxonomy_term.tags 15 | target_entity_type_id: taxonomy_term 16 | target_bundle: tags 17 | default_langcode: site_default 18 | language_alterable: true 19 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/user.settings.yml: -------------------------------------------------------------------------------- 1 | _core: 2 | default_config_hash: Y-Xpk050V3opj3WiFb4oUbVT9S7fDA1XLpigO-qVMVQ 3 | langcode: en 4 | anonymous: Anonymous 5 | verify_mail: true 6 | notify: 7 | cancel_confirm: true 8 | password_reset: true 9 | status_activated: true 10 | status_blocked: false 11 | status_canceled: false 12 | register_admin_created: true 13 | register_no_approval_required: true 14 | register_pending_approval: true 15 | register: admin_only 16 | cancel_method: user_cancel_block 17 | password_reset_timeout: 86400 18 | password_strength: true 19 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/web/sites/README.txt: -------------------------------------------------------------------------------- 1 | This directory structure contains the settings and configuration files specific 2 | to your site or sites and is an integral part of multisite configurations. 3 | 4 | It is now recommended to place your custom and downloaded extensions in the 5 | /modules, /themes, and /profiles directories located in the Drupal root. The 6 | sites/all/ subdirectory structure, which was recommended in previous versions 7 | of Drupal, is still supported. 8 | 9 | See core/INSTALL.txt for information about single-site installation or 10 | multisite configuration. 11 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/block.block.umami_search.yml: -------------------------------------------------------------------------------- 1 | uuid: 879edc40-1558-45fa-9090-2df702b28046 2 | langcode: en 3 | status: true 4 | dependencies: 5 | module: 6 | - search 7 | theme: 8 | - umami 9 | _core: 10 | default_config_hash: ytgVjVWmeHzXTVcvVy0XfswIHZw1sCgY-dDI8XWDvHI 11 | id: umami_search 12 | theme: umami 13 | region: pre_header 14 | weight: 1 15 | provider: null 16 | plugin: search_form_block 17 | settings: 18 | id: search_form_block 19 | label: Search 20 | label_display: visible 21 | provider: search 22 | page_id: node_search 23 | visibility: { } 24 | -------------------------------------------------------------------------------- /.changeset/typing-tighten-entity-jsonapi.md: -------------------------------------------------------------------------------- 1 | --- 2 | "@drupal-js-sdk/entity": patch 3 | "@drupal-js-sdk/jsonapi": patch 4 | --- 5 | 6 | Strengthen generics and remove `any` in entity and JSON:API layers. 7 | 8 | - EntityLoader: replace `(as any)` with typed narrowing for optional adapter methods. 9 | - FluentEntity: add precise filter value typing and safer param building; remove `any`. 10 | - JsonApiEntityAdapter: parse response with type guards and return `EntityRecord` with stricter attributes/relationships typing. 11 | 12 | No breaking API changes; improvements are internal typing and safety. 13 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/field.storage.block_content.field_body.yml: -------------------------------------------------------------------------------- 1 | uuid: 8ec5aff3-1dac-4cc8-955c-cfadcf299fa9 2 | langcode: en 3 | status: true 4 | dependencies: 5 | module: 6 | - block_content 7 | - text 8 | _core: 9 | default_config_hash: 1W3dSbMzHlVVecRcC7dH1EDUafL9pAQFPXtIX0490pY 10 | id: block_content.field_body 11 | field_name: field_body 12 | entity_type: block_content 13 | type: text_long 14 | settings: { } 15 | module: text 16 | locked: false 17 | cardinality: 1 18 | translatable: true 19 | indexes: { } 20 | persist_with_no_fields: true 21 | custom_storage: false 22 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/block.block.claro_primary_local_tasks.yml: -------------------------------------------------------------------------------- 1 | uuid: 799b6349-cf3a-4329-ad99-e11bd4b6ee72 2 | langcode: en 3 | status: true 4 | dependencies: 5 | theme: 6 | - claro 7 | _core: 8 | default_config_hash: ACjBZI5shAMiiUpsz-inLYVXDqNNXRnSzAWV3kV_8Hw 9 | id: claro_primary_local_tasks 10 | theme: claro 11 | region: header 12 | weight: 0 13 | provider: null 14 | plugin: local_tasks_block 15 | settings: 16 | id: local_tasks_block 17 | label: 'Primary tabs' 18 | label_display: '0' 19 | provider: core 20 | primary: true 21 | secondary: false 22 | visibility: { } 23 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/field.storage.node.field_recipe_instruction.yml: -------------------------------------------------------------------------------- 1 | uuid: 38562329-e4a1-4103-befa-97e4c94b9da7 2 | langcode: en 3 | status: true 4 | dependencies: 5 | module: 6 | - node 7 | - text 8 | _core: 9 | default_config_hash: seP7G-QnB7uXOxys45VuxM3NlWVgZf5Hrp8OpuFtkdU 10 | id: node.field_recipe_instruction 11 | field_name: field_recipe_instruction 12 | entity_type: node 13 | type: text_long 14 | settings: { } 15 | module: text 16 | locked: false 17 | cardinality: 1 18 | translatable: true 19 | indexes: { } 20 | persist_with_no_fields: false 21 | custom_storage: false 22 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/field.storage.node.field_tags.yml: -------------------------------------------------------------------------------- 1 | uuid: a6b78fd7-fe01-477c-82b0-6294098fab8e 2 | langcode: en 3 | status: true 4 | dependencies: 5 | module: 6 | - node 7 | - taxonomy 8 | _core: 9 | default_config_hash: WpOE_bs8Bs_HY2ns7n2r__de-xno0-Bxkqep5-MsHAs 10 | id: node.field_tags 11 | field_name: field_tags 12 | entity_type: node 13 | type: entity_reference 14 | settings: 15 | target_type: taxonomy_term 16 | module: core 17 | locked: false 18 | cardinality: -1 19 | translatable: true 20 | indexes: { } 21 | persist_with_no_fields: false 22 | custom_storage: false 23 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/language/es/views.view.recipe_collections.yml: -------------------------------------------------------------------------------- 1 | label: 'Recopilación de Recetas' 2 | display: 3 | default: 4 | display_title: 'Por defecto' 5 | display_options: 6 | title: 'Recopilación de recetas' 7 | fields: 8 | name: 9 | separator: ', ' 10 | exposed_form: 11 | options: 12 | submit_button: Aplicar 13 | reset_button_label: Restablecer 14 | exposed_sorts_label: 'Ordenar por' 15 | sort_asc_label: Asc 16 | sort_desc_label: Desc 17 | block: 18 | display_title: Bloque 19 | -------------------------------------------------------------------------------- /packages/auth/.eslintrc: -------------------------------------------------------------------------------- 1 | { 2 | "root": true, 3 | "parser": "@typescript-eslint/parser", 4 | "plugins": [ 5 | "@typescript-eslint", 6 | "no-loops" 7 | ], 8 | "parserOptions": { 9 | "project": "./tsconfig.eslint.json" 10 | }, 11 | "extends": [ 12 | "eslint:recommended", 13 | "plugin:@typescript-eslint/eslint-recommended", 14 | "plugin:@typescript-eslint/recommended" 15 | ], 16 | "rules": { 17 | "no-console": 2, 18 | "no-loops/no-loops": 2, 19 | "@typescript-eslint/no-explicit-any": "off" 20 | } 21 | } -------------------------------------------------------------------------------- /packages/core/.eslintrc: -------------------------------------------------------------------------------- 1 | { 2 | "root": true, 3 | "parser": "@typescript-eslint/parser", 4 | "plugins": [ 5 | "@typescript-eslint", 6 | "no-loops" 7 | ], 8 | "parserOptions": { 9 | "project": "./tsconfig.eslint.json" 10 | }, 11 | "extends": [ 12 | "eslint:recommended", 13 | "plugin:@typescript-eslint/eslint-recommended", 14 | "plugin:@typescript-eslint/recommended" 15 | ], 16 | "rules": { 17 | "no-console": 2, 18 | "no-loops/no-loops": 2, 19 | "@typescript-eslint/no-explicit-any": "off" 20 | } 21 | } -------------------------------------------------------------------------------- /packages/error/.eslintrc: -------------------------------------------------------------------------------- 1 | { 2 | "root": true, 3 | "parser": "@typescript-eslint/parser", 4 | "plugins": [ 5 | "@typescript-eslint", 6 | "no-loops" 7 | ], 8 | "parserOptions": { 9 | "project": "./tsconfig.eslint.json" 10 | }, 11 | "extends": [ 12 | "eslint:recommended", 13 | "plugin:@typescript-eslint/eslint-recommended", 14 | "plugin:@typescript-eslint/recommended" 15 | ], 16 | "rules": { 17 | "no-console": 2, 18 | "no-loops/no-loops": 2, 19 | "@typescript-eslint/no-explicit-any": "off" 20 | } 21 | } -------------------------------------------------------------------------------- /packages/menu/.eslintrc: -------------------------------------------------------------------------------- 1 | { 2 | "root": true, 3 | "parser": "@typescript-eslint/parser", 4 | "plugins": [ 5 | "@typescript-eslint", 6 | "no-loops" 7 | ], 8 | "parserOptions": { 9 | "project": "./tsconfig.eslint.json" 10 | }, 11 | "extends": [ 12 | "eslint:recommended", 13 | "plugin:@typescript-eslint/eslint-recommended", 14 | "plugin:@typescript-eslint/recommended" 15 | ], 16 | "rules": { 17 | "no-console": 2, 18 | "no-loops/no-loops": 2, 19 | "@typescript-eslint/no-explicit-any": "off" 20 | } 21 | } -------------------------------------------------------------------------------- /packages/role/.eslintrc: -------------------------------------------------------------------------------- 1 | { 2 | "root": true, 3 | "parser": "@typescript-eslint/parser", 4 | "plugins": [ 5 | "@typescript-eslint", 6 | "no-loops" 7 | ], 8 | "parserOptions": { 9 | "project": "./tsconfig.eslint.json" 10 | }, 11 | "extends": [ 12 | "eslint:recommended", 13 | "plugin:@typescript-eslint/eslint-recommended", 14 | "plugin:@typescript-eslint/recommended" 15 | ], 16 | "rules": { 17 | "no-console": 2, 18 | "no-loops/no-loops": 2, 19 | "@typescript-eslint/no-explicit-any": "off" 20 | } 21 | } -------------------------------------------------------------------------------- /packages/settings/README.md: -------------------------------------------------------------------------------- 1 | --- 2 | status: draft 3 | --- 4 | # @drupal-js-sdk/settings 5 | 6 | ## Overview 7 | 8 | Experimental scaffold for application settings helpers. API may change; currently not providing stable methods. 9 | 10 | ## Usage 11 | 12 | ```js 13 | import { DrupalSettings } from "@drupal-js-sdk/settings"; 14 | ``` 15 | 16 | Public API 17 | 18 | - class DrupalSettings 19 | - constructor() 20 | - (methods are currently placeholders and throw; subject to future expansion) 21 | 22 | Notes 23 | 24 | - Package scaffold for settings-related utilities. Methods intentionally minimal. 25 | -------------------------------------------------------------------------------- /packages/storage/.eslintrc: -------------------------------------------------------------------------------- 1 | { 2 | "root": true, 3 | "parser": "@typescript-eslint/parser", 4 | "plugins": [ 5 | "@typescript-eslint", 6 | "no-loops" 7 | ], 8 | "parserOptions": { 9 | "project": "./tsconfig.eslint.json" 10 | }, 11 | "extends": [ 12 | "eslint:recommended", 13 | "plugin:@typescript-eslint/eslint-recommended", 14 | "plugin:@typescript-eslint/recommended" 15 | ], 16 | "rules": { 17 | "no-console": 2, 18 | "no-loops/no-loops": 2, 19 | "@typescript-eslint/no-explicit-any": "off" 20 | } 21 | } -------------------------------------------------------------------------------- /packages/xhr/.eslintrc: -------------------------------------------------------------------------------- 1 | { 2 | "root": true, 3 | "parser": "@typescript-eslint/parser", 4 | "plugins": [ 5 | "@typescript-eslint", 6 | "no-loops" 7 | ], 8 | "parserOptions": { 9 | "project": "./tsconfig.eslint.json" 10 | }, 11 | "extends": [ 12 | "eslint:recommended", 13 | "plugin:@typescript-eslint/eslint-recommended", 14 | "plugin:@typescript-eslint/recommended" 15 | ], 16 | "rules": { 17 | "no-console": 2, 18 | "no-loops/no-loops": 2, 19 | "@typescript-eslint/no-explicit-any": "off" 20 | } 21 | } -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/field.storage.node.field_cooking_time.yml: -------------------------------------------------------------------------------- 1 | uuid: 4ba55415-4f91-4ced-aeda-13bf9357de66 2 | langcode: en 3 | status: true 4 | dependencies: 5 | module: 6 | - node 7 | _core: 8 | default_config_hash: sSUIsKTm3XJhfRtHIW_-goM5fEnuJkmpnX1W8YsvL-k 9 | id: node.field_cooking_time 10 | field_name: field_cooking_time 11 | entity_type: node 12 | type: integer 13 | settings: 14 | unsigned: false 15 | size: normal 16 | module: core 17 | locked: false 18 | cardinality: 1 19 | translatable: true 20 | indexes: { } 21 | persist_with_no_fields: false 22 | custom_storage: false 23 | -------------------------------------------------------------------------------- /codecov.yml: -------------------------------------------------------------------------------- 1 | coverage: 2 | status: 3 | project: 4 | logsCode: 5 | target: auto 6 | flags: 7 | - logsCode 8 | serviceCode: 9 | target: auto 10 | flags: 11 | - serviceCode 12 | comment: 13 | layout: "reach, diff, flags, files" 14 | behavior: default 15 | require_changes: false 16 | require_base: true 17 | require_head: true 18 | branches: ["main"] 19 | flags: 20 | core: 21 | paths: 22 | - packages/core/ 23 | carryforward: true 24 | sdk: 25 | paths: 26 | - packages/drupal-js-sdk/ 27 | carryforward: true 28 | -------------------------------------------------------------------------------- /packages/interfaces/.eslintrc: -------------------------------------------------------------------------------- 1 | { 2 | "root": true, 3 | "parser": "@typescript-eslint/parser", 4 | "plugins": [ 5 | "@typescript-eslint", 6 | "no-loops" 7 | ], 8 | "parserOptions": { 9 | "project": "./tsconfig.eslint.json" 10 | }, 11 | "extends": [ 12 | "eslint:recommended", 13 | "plugin:@typescript-eslint/eslint-recommended", 14 | "plugin:@typescript-eslint/recommended" 15 | ], 16 | "rules": { 17 | "no-console": 2, 18 | "no-loops/no-loops": 2, 19 | "@typescript-eslint/no-explicit-any": "off" 20 | } 21 | } -------------------------------------------------------------------------------- /packages/settings/.eslintrc: -------------------------------------------------------------------------------- 1 | { 2 | "root": true, 3 | "parser": "@typescript-eslint/parser", 4 | "plugins": [ 5 | "@typescript-eslint", 6 | "no-loops" 7 | ], 8 | "parserOptions": { 9 | "project": "./tsconfig.eslint.json" 10 | }, 11 | "extends": [ 12 | "eslint:recommended", 13 | "plugin:@typescript-eslint/eslint-recommended", 14 | "plugin:@typescript-eslint/recommended" 15 | ], 16 | "rules": { 17 | "no-console": 2, 18 | "no-loops/no-loops": 2, 19 | "@typescript-eslint/no-explicit-any": "off" 20 | } 21 | } -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "target": "ES2015", 4 | "module": "commonjs", 5 | "strict": true, 6 | "esModuleInterop": true, 7 | "skipLibCheck": true, 8 | "forceConsistentCasingInFileNames": true, 9 | "declaration": true, 10 | "outDir": "./dist", 11 | "baseUrl": "./", 12 | "allowJs": true, 13 | "paths": { 14 | "@drupal-js-sdk/entity": ["packages/entity/src/index.ts"], 15 | "@drupal-js-sdk/jsonapi": ["packages/jsonapi/src/index.ts"] 16 | } 17 | }, 18 | "exclude": ["node_modules", "**/__tests__/*"], 19 | "include": ["./src"] 20 | } 21 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/block.block.claro_secondary_local_tasks.yml: -------------------------------------------------------------------------------- 1 | uuid: 002c4d20-e356-48c6-83d8-32cc085e8e13 2 | langcode: en 3 | status: true 4 | dependencies: 5 | theme: 6 | - claro 7 | _core: 8 | default_config_hash: 2L0geP-ixCbCkEpW6BVF6H7vDUZN4ea07_Y9CociQm4 9 | id: claro_secondary_local_tasks 10 | theme: claro 11 | region: pre_content 12 | weight: 0 13 | provider: null 14 | plugin: local_tasks_block 15 | settings: 16 | id: local_tasks_block 17 | label: 'Secondary tabs' 18 | label_display: '0' 19 | provider: core 20 | primary: false 21 | secondary: true 22 | visibility: { } 23 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/field.storage.block_content.field_copyright.yml: -------------------------------------------------------------------------------- 1 | uuid: 16e49ee0-e515-4225-8cf7-bf6e176c42e3 2 | langcode: en 3 | status: true 4 | dependencies: 5 | module: 6 | - block_content 7 | - text 8 | _core: 9 | default_config_hash: i5Xb6gz5HGbpayPD3Wf-JLpoFa0pxqKpHsCIqYYH63I 10 | id: block_content.field_copyright 11 | field_name: field_copyright 12 | entity_type: block_content 13 | type: text_long 14 | settings: { } 15 | module: text 16 | locked: false 17 | cardinality: 1 18 | translatable: true 19 | indexes: { } 20 | persist_with_no_fields: false 21 | custom_storage: false 22 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/field.storage.node.field_media_image.yml: -------------------------------------------------------------------------------- 1 | uuid: fd4a1a96-713e-4587-8797-b9b6c2a039e8 2 | langcode: en 3 | status: true 4 | dependencies: 5 | module: 6 | - media 7 | - node 8 | _core: 9 | default_config_hash: 0Js1u6vPgc9HfguDX8RT0LRwZh6-JU34vN8DsgMrDPQ 10 | id: node.field_media_image 11 | field_name: field_media_image 12 | entity_type: node 13 | type: entity_reference 14 | settings: 15 | target_type: media 16 | module: core 17 | locked: false 18 | cardinality: 1 19 | translatable: true 20 | indexes: { } 21 | persist_with_no_fields: false 22 | custom_storage: false 23 | -------------------------------------------------------------------------------- /packages/drupal-js-sdk/.eslintrc: -------------------------------------------------------------------------------- 1 | { 2 | "root": true, 3 | "parser": "@typescript-eslint/parser", 4 | "plugins": [ 5 | "@typescript-eslint", 6 | "no-loops" 7 | ], 8 | "parserOptions": { 9 | "project": "./tsconfig.eslint.json" 10 | }, 11 | "extends": [ 12 | "eslint:recommended", 13 | "plugin:@typescript-eslint/eslint-recommended", 14 | "plugin:@typescript-eslint/recommended" 15 | ], 16 | "rules": { 17 | "no-console": 2, 18 | "no-loops/no-loops": 2, 19 | "@typescript-eslint/no-explicit-any": "off" 20 | } 21 | } -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/field.storage.block_content.field_content_link.yml: -------------------------------------------------------------------------------- 1 | uuid: fb868856-7e09-4998-925b-9c6d5b1da566 2 | langcode: en 3 | status: true 4 | dependencies: 5 | module: 6 | - block_content 7 | - link 8 | _core: 9 | default_config_hash: x5FFqn9CI03jRgIQ3t0e6-X8X5glE6AyKwnScwMNTxk 10 | id: block_content.field_content_link 11 | field_name: field_content_link 12 | entity_type: block_content 13 | type: link 14 | settings: { } 15 | module: link 16 | locked: false 17 | cardinality: 1 18 | translatable: true 19 | indexes: { } 20 | persist_with_no_fields: false 21 | custom_storage: false 22 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/field.storage.block_content.field_disclaimer.yml: -------------------------------------------------------------------------------- 1 | uuid: 93ca3205-15aa-4dbc-8171-f072c30ab637 2 | langcode: en 3 | status: true 4 | dependencies: 5 | module: 6 | - block_content 7 | - text 8 | _core: 9 | default_config_hash: 9f01IQ8P7CSySVZJKdTjI31y-qpa8ObmZDLGsUSoNeY 10 | id: block_content.field_disclaimer 11 | field_name: field_disclaimer 12 | entity_type: block_content 13 | type: text_long 14 | settings: { } 15 | module: text 16 | locked: false 17 | cardinality: 1 18 | translatable: true 19 | indexes: { } 20 | persist_with_no_fields: false 21 | custom_storage: false 22 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/field.storage.block_content.field_summary.yml: -------------------------------------------------------------------------------- 1 | uuid: 40a051d9-06ad-4f69-aa97-1c06d3de6f0d 2 | langcode: en 3 | status: true 4 | dependencies: 5 | module: 6 | - block_content 7 | _core: 8 | default_config_hash: ovYZqtkQXD_nL-D5liqMQpocZ3xB7kwxBfnbCnErLHM 9 | id: block_content.field_summary 10 | field_name: field_summary 11 | entity_type: block_content 12 | type: string_long 13 | settings: 14 | case_sensitive: false 15 | module: core 16 | locked: false 17 | cardinality: 1 18 | translatable: true 19 | indexes: { } 20 | persist_with_no_fields: false 21 | custom_storage: false 22 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/field.storage.node.field_preparation_time.yml: -------------------------------------------------------------------------------- 1 | uuid: a59dfdf7-cb7a-4963-9ff2-74e4aab0526b 2 | langcode: en 3 | status: true 4 | dependencies: 5 | module: 6 | - node 7 | _core: 8 | default_config_hash: L4M_MmPr8qrKNnPYxf_1w6y--YsIH2IISGB0T4KUzDU 9 | id: node.field_preparation_time 10 | field_name: field_preparation_time 11 | entity_type: node 12 | type: integer 13 | settings: 14 | unsigned: false 15 | size: normal 16 | module: core 17 | locked: false 18 | cardinality: 1 19 | translatable: true 20 | indexes: { } 21 | persist_with_no_fields: false 22 | custom_storage: false 23 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/language.content_settings.block_content.banner_block.yml: -------------------------------------------------------------------------------- 1 | uuid: a04f5c01-97d3-4946-821a-6a52dbcddc3f 2 | langcode: en 3 | status: true 4 | dependencies: 5 | config: 6 | - block_content.type.banner_block 7 | module: 8 | - content_translation 9 | third_party_settings: 10 | content_translation: 11 | enabled: true 12 | _core: 13 | default_config_hash: G3u6fc7JZoDvaeSgwA-ik8RL5Z2B6-ItEtSuicDgobw 14 | id: block_content.banner_block 15 | target_entity_type_id: block_content 16 | target_bundle: banner_block 17 | default_langcode: site_default 18 | language_alterable: true 19 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/field.storage.node.layout_builder__layout.yml: -------------------------------------------------------------------------------- 1 | uuid: 715e308c-8287-44e3-9b72-c2799a9901d2 2 | langcode: en 3 | status: true 4 | dependencies: 5 | module: 6 | - layout_builder 7 | - node 8 | _core: 9 | default_config_hash: g7kepf2eck__olXZwnmcQdOVAdSZR0cr77Jm-uf6wfA 10 | id: node.layout_builder__layout 11 | field_name: layout_builder__layout 12 | entity_type: node 13 | type: layout_section 14 | settings: { } 15 | module: layout_builder 16 | locked: true 17 | cardinality: 1 18 | translatable: false 19 | indexes: { } 20 | persist_with_no_fields: false 21 | custom_storage: false 22 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/system.performance.yml: -------------------------------------------------------------------------------- 1 | _core: 2 | default_config_hash: jtno5biznHZbrIgKwzq-ze-7XaQxLCGe6PeUOR7bRiQ 3 | cache: 4 | page: 5 | max_age: 0 6 | css: 7 | preprocess: true 8 | gzip: true 9 | fast_404: 10 | enabled: true 11 | paths: '/\.(?:txt|png|gif|jpe?g|css|js|ico|swf|flv|cgi|bat|pl|dll|exe|asp)$/i' 12 | exclude_paths: '/\/(?:styles|imagecache)\//' 13 | html: '404 Not Found

Not Found

The requested URL "@path" was not found on this server.

' 14 | js: 15 | preprocess: true 16 | gzip: true 17 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/field.storage.node.field_number_of_servings.yml: -------------------------------------------------------------------------------- 1 | uuid: 24304de3-62a8-4dbb-b9d2-5fb0abb7d948 2 | langcode: en 3 | status: true 4 | dependencies: 5 | module: 6 | - node 7 | _core: 8 | default_config_hash: '-4BR54E0zf3ql3z8EYjE6mJ-i8xKmSNQxdDhEpxincM' 9 | id: node.field_number_of_servings 10 | field_name: field_number_of_servings 11 | entity_type: node 12 | type: integer 13 | settings: 14 | unsigned: false 15 | size: normal 16 | module: core 17 | locked: false 18 | cardinality: 1 19 | translatable: true 20 | indexes: { } 21 | persist_with_no_fields: false 22 | custom_storage: false 23 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/locale.settings.yml: -------------------------------------------------------------------------------- 1 | _core: 2 | default_config_hash: cSdYeE-_AQETCNZnl8BMFS9-sVn5--VzAYILkpPBUbM 3 | cache_strings: true 4 | translate_english: false 5 | javascript: 6 | directory: languages 7 | translation: 8 | use_source: remote_and_local 9 | default_filename: '%project-%version.%language.po' 10 | default_server_pattern: 'https://ftp.drupal.org/files/translations/%core/%project/%project-%version.%language.po' 11 | overwrite_customized: false 12 | overwrite_not_customized: true 13 | update_interval_days: 0 14 | path: sites/default/files/translations 15 | import_enabled: true 16 | -------------------------------------------------------------------------------- /packages/role/README.md: -------------------------------------------------------------------------------- 1 | --- 2 | status: draft 3 | --- 4 | # @drupal-js-sdk/role 5 | 6 | ## Overview 7 | 8 | Experimental scaffold for role-related utilities. API may change; currently not providing stable methods. 9 | 10 | ## Usage 11 | 12 | ```js 13 | import { DrupalRole } from "@drupal-js-sdk/role"; 14 | // Placeholder: API is experimental and may change. 15 | ``` 16 | 17 | Public API 18 | 19 | - class DrupalRole 20 | - constructor() 21 | - (methods are currently placeholders and throw; subject to future expansion) 22 | 23 | Notes 24 | 25 | - Package scaffold for role-related utilities. Methods intentionally minimal. 26 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/block.block.umami_languageswitcher.yml: -------------------------------------------------------------------------------- 1 | uuid: 8c148b06-639a-442d-9930-ed23d99bcc89 2 | langcode: en 3 | status: true 4 | dependencies: 5 | module: 6 | - language 7 | theme: 8 | - umami 9 | _core: 10 | default_config_hash: dhs54rZwlADLhS_wtViUXbtrVppO7Fv6NtlzOlK8iCE 11 | id: umami_languageswitcher 12 | theme: umami 13 | region: pre_header 14 | weight: 0 15 | provider: null 16 | plugin: 'language_block:language_interface' 17 | settings: 18 | id: 'language_block:language_interface' 19 | label: 'Language switcher' 20 | label_display: '0' 21 | provider: language 22 | visibility: { } 23 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/field.storage.node.field_ingredients.yml: -------------------------------------------------------------------------------- 1 | uuid: a63793d0-5a80-4621-8613-dc41147941e3 2 | langcode: en 3 | status: true 4 | dependencies: 5 | module: 6 | - node 7 | _core: 8 | default_config_hash: AQ1aW930W_9KZ73o6X1iqvDnAPefFOPaKluiXklRQtA 9 | id: node.field_ingredients 10 | field_name: field_ingredients 11 | entity_type: node 12 | type: string 13 | settings: 14 | max_length: 255 15 | case_sensitive: false 16 | is_ascii: false 17 | module: core 18 | locked: false 19 | cardinality: -1 20 | translatable: true 21 | indexes: { } 22 | persist_with_no_fields: false 23 | custom_storage: false 24 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/language.content_settings.block_content.disclaimer_block.yml: -------------------------------------------------------------------------------- 1 | uuid: 3f075dc1-7c9e-4fc8-adf3-3f8398c7cca1 2 | langcode: en 3 | status: true 4 | dependencies: 5 | config: 6 | - block_content.type.disclaimer_block 7 | module: 8 | - content_translation 9 | third_party_settings: 10 | content_translation: 11 | enabled: true 12 | _core: 13 | default_config_hash: pYV_j3OTOlWBweKkB0jY9dB9C3aTUJZ903T91ZahX4w 14 | id: block_content.disclaimer_block 15 | target_entity_type_id: block_content 16 | target_bundle: disclaimer_block 17 | default_langcode: site_default 18 | language_alterable: true 19 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/language.content_settings.taxonomy_term.recipe_category.yml: -------------------------------------------------------------------------------- 1 | uuid: 64621cc9-9d98-409f-86e3-a94cefcd2d29 2 | langcode: en 3 | status: true 4 | dependencies: 5 | config: 6 | - taxonomy.vocabulary.recipe_category 7 | module: 8 | - content_translation 9 | third_party_settings: 10 | content_translation: 11 | enabled: true 12 | _core: 13 | default_config_hash: rSI5WTsW2S6K9n3i6_Ul-auHIO5onTjPknfThX3ON-U 14 | id: taxonomy_term.recipe_category 15 | target_entity_type_id: taxonomy_term 16 | target_bundle: recipe_category 17 | default_langcode: site_default 18 | language_alterable: true 19 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/field.storage.node.field_recipe_category.yml: -------------------------------------------------------------------------------- 1 | uuid: f8bdff39-96c1-4d75-a543-838e505cd501 2 | langcode: en 3 | status: true 4 | dependencies: 5 | module: 6 | - node 7 | - taxonomy 8 | _core: 9 | default_config_hash: mXo5nqADfWBxy1sbPvHHDMErhoALJQhmNUByV3Sms98 10 | id: node.field_recipe_category 11 | field_name: field_recipe_category 12 | entity_type: node 13 | type: entity_reference 14 | settings: 15 | target_type: taxonomy_term 16 | module: core 17 | locked: false 18 | cardinality: -1 19 | translatable: true 20 | indexes: { } 21 | persist_with_no_fields: false 22 | custom_storage: false 23 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/language/es/core.entity_view_display.node.recipe.full.yml: -------------------------------------------------------------------------------- 1 | third_party_settings: 2 | layout_builder: 3 | sections: 4 | 1: 5 | components: 6 | cc87463d-bb75-4eca-a2d0-42f0b643f8a7: 7 | configuration: 8 | label: 'Imagen del contenido multimedia' 9 | 69d8bce1-28ae-4287-a05b-a2166679f867: 10 | configuration: 11 | label: 'Imagen del contenido multimedia' 12 | 4: 13 | components: 14 | 3164f99a-0a52-403e-a921-fad17cb6e8c7: 15 | configuration: 16 | label_display: visible 17 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/language.content_settings.block_content.footer_promo_block.yml: -------------------------------------------------------------------------------- 1 | uuid: 2313f128-d857-4cdb-97cb-872768846edd 2 | langcode: en 3 | status: true 4 | dependencies: 5 | config: 6 | - block_content.type.footer_promo_block 7 | module: 8 | - content_translation 9 | third_party_settings: 10 | content_translation: 11 | enabled: true 12 | _core: 13 | default_config_hash: cLKCdnfkCxbxWqNt00n8kLTo6S45WCeLyKXvAZH7Tes 14 | id: block_content.footer_promo_block 15 | target_entity_type_id: block_content 16 | target_bundle: footer_promo_block 17 | default_langcode: site_default 18 | language_alterable: true 19 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/field.storage.block_content.field_media_image.yml: -------------------------------------------------------------------------------- 1 | uuid: 3a05726f-98b3-4437-a22c-6e256d6af2d3 2 | langcode: en 3 | status: true 4 | dependencies: 5 | module: 6 | - block_content 7 | - media 8 | _core: 9 | default_config_hash: J09ouK26wFA1bbWkv_LwF_A_0wrhXYryFVurmToZj9k 10 | id: block_content.field_media_image 11 | field_name: field_media_image 12 | entity_type: block_content 13 | type: entity_reference 14 | settings: 15 | target_type: media 16 | module: core 17 | locked: false 18 | cardinality: 1 19 | translatable: true 20 | indexes: { } 21 | persist_with_no_fields: false 22 | custom_storage: false 23 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/user.role.anonymous.yml: -------------------------------------------------------------------------------- 1 | uuid: 3f8831d6-bee2-4f9b-9755-310229f28cb1 2 | langcode: en 3 | status: true 4 | dependencies: 5 | config: 6 | - filter.format.restricted_html 7 | module: 8 | - contact 9 | - filter 10 | - media 11 | - search 12 | - system 13 | _core: 14 | default_config_hash: Gl1lr_RJQ9pMz_DZhY6pNX94k874Gqh15Gm8Du1EepQ 15 | id: anonymous 16 | label: 'Anonymous user' 17 | weight: 0 18 | is_admin: false 19 | permissions: 20 | - 'access content' 21 | - 'access site-wide contact form' 22 | - 'search content' 23 | - 'use text format restricted_html' 24 | - 'view media' 25 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/core.base_field_override.node.page.promote.yml: -------------------------------------------------------------------------------- 1 | uuid: 4932c465-f0bc-4fa9-84c7-1afb23055100 2 | langcode: en 3 | status: true 4 | dependencies: 5 | config: 6 | - node.type.page 7 | _core: 8 | default_config_hash: fPUEnm4T5zfZRr3ttDUqq7yCDd2uW3clWD-pvos4tlQ 9 | id: node.page.promote 10 | field_name: promote 11 | entity_type: node 12 | bundle: page 13 | label: 'Promoted to front page' 14 | description: '' 15 | required: false 16 | translatable: false 17 | default_value: 18 | - 19 | value: 0 20 | default_value_callback: '' 21 | settings: 22 | on_label: 'On' 23 | off_label: 'Off' 24 | field_type: boolean 25 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/field.storage.block_content.field_title.yml: -------------------------------------------------------------------------------- 1 | uuid: 9fdaa6aa-ccf2-41bf-9800-6d77f098cd72 2 | langcode: en 3 | status: true 4 | dependencies: 5 | module: 6 | - block_content 7 | _core: 8 | default_config_hash: gLKURXFJkccqGfXGKsS6GKkQ8MwpUgEgdLoNvdcAmtw 9 | id: block_content.field_title 10 | field_name: field_title 11 | entity_type: block_content 12 | type: string 13 | settings: 14 | max_length: 255 15 | case_sensitive: false 16 | is_ascii: false 17 | module: core 18 | locked: false 19 | cardinality: 1 20 | translatable: true 21 | indexes: { } 22 | persist_with_no_fields: false 23 | custom_storage: false 24 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/field.storage.media.field_media_oembed_video.yml: -------------------------------------------------------------------------------- 1 | uuid: 63a7a2d3-5ffc-4cce-8863-0ba852c752fb 2 | langcode: en 3 | status: true 4 | dependencies: 5 | module: 6 | - media 7 | _core: 8 | default_config_hash: cNf_852Dq-fNnSaMI4LxL-J6N7bLkHuDbD9EUqOn4_U 9 | id: media.field_media_oembed_video 10 | field_name: field_media_oembed_video 11 | entity_type: media 12 | type: string 13 | settings: 14 | max_length: 255 15 | case_sensitive: false 16 | is_ascii: false 17 | module: core 18 | locked: false 19 | cardinality: 1 20 | translatable: true 21 | indexes: { } 22 | persist_with_no_fields: false 23 | custom_storage: false 24 | -------------------------------------------------------------------------------- /packages/xhr/src/__tests__/FetchClientResponseErrors.test.ts: -------------------------------------------------------------------------------- 1 | import { FetchClient } from ".."; 2 | 3 | global.fetch = jest.fn(() => 4 | Promise.resolve({ 5 | data: JSON.stringify({}), 6 | ok: false, 7 | status: 200, 8 | statusText: "ok", 9 | json: () => { 10 | return { foo: "bar" }; 11 | }, 12 | }) 13 | ) as jest.Mock; 14 | 15 | test("setclient", async () => { 16 | const config = { 17 | baseURL: "https://drupal-js-sdk-demo.d34dman.com", 18 | }; 19 | const client = new FetchClient(config); 20 | expect.assertions(1); 21 | await expect(client.call("GET", "/system/menu/main/linkset")).rejects.toThrow(); 22 | }); 23 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/block.block.umami_branding.yml: -------------------------------------------------------------------------------- 1 | uuid: a9091c6c-82c7-464d-bf6b-377acab201f1 2 | langcode: en 3 | status: true 4 | dependencies: 5 | module: 6 | - system 7 | theme: 8 | - umami 9 | _core: 10 | default_config_hash: KpzA0z4GVAQdiudD8S4qJXkxUCkTDFtsMkS9ZAG9-Xo 11 | id: umami_branding 12 | theme: umami 13 | region: header 14 | weight: -7 15 | provider: null 16 | plugin: system_branding_block 17 | settings: 18 | id: system_branding_block 19 | label: 'Site branding' 20 | label_display: '0' 21 | provider: system 22 | use_site_logo: true 23 | use_site_name: false 24 | use_site_slogan: true 25 | visibility: { } 26 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/field.field.node.page.field_body.yml: -------------------------------------------------------------------------------- 1 | uuid: b820d093-ea15-4318-bf77-edc65ff8ae5b 2 | langcode: en 3 | status: true 4 | dependencies: 5 | config: 6 | - field.storage.node.field_body 7 | - node.type.page 8 | module: 9 | - text 10 | _core: 11 | default_config_hash: SzUL7jzxi0IqgQqcdEW2oIxG18thA8cm9cqFpZdpoQo 12 | id: node.page.field_body 13 | field_name: field_body 14 | entity_type: node 15 | bundle: page 16 | label: Body 17 | description: '' 18 | required: false 19 | translatable: true 20 | default_value: { } 21 | default_value_callback: '' 22 | settings: 23 | allowed_formats: { } 24 | field_type: text_long 25 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/.ddev/docker-compose.redis.yaml: -------------------------------------------------------------------------------- 1 | #ddev-generated 2 | services: 3 | redis: 4 | container_name: ddev-${DDEV_SITENAME}-redis 5 | image: ${REDIS_DOCKER_IMAGE:-redis:7} 6 | # These labels ensure this service is discoverable by ddev. 7 | labels: 8 | com.ddev.site-name: ${DDEV_SITENAME} 9 | com.ddev.approot: ${DDEV_APPROOT} 10 | restart: "no" 11 | expose: 12 | - 6379 13 | volumes: 14 | - ".:/mnt/ddev_config" 15 | - "ddev-global-cache:/mnt/ddev-global-cache" 16 | - "./redis:/etc/redis/conf" 17 | - "redis:/data" 18 | command: /etc/redis/conf/redis.conf 19 | 20 | volumes: 21 | redis: 22 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/field.field.node.article.field_body.yml: -------------------------------------------------------------------------------- 1 | uuid: b5d41db5-f274-46b7-973b-2902bf9e57a7 2 | langcode: en 3 | status: true 4 | dependencies: 5 | config: 6 | - field.storage.node.field_body 7 | - node.type.article 8 | module: 9 | - text 10 | _core: 11 | default_config_hash: La2QHAQckgQkWJSOnujAoHiQQoLrax5RWhuvriiGuoY 12 | id: node.article.field_body 13 | field_name: field_body 14 | entity_type: node 15 | bundle: article 16 | label: Body 17 | description: '' 18 | required: false 19 | translatable: true 20 | default_value: { } 21 | default_value_callback: '' 22 | settings: 23 | allowed_formats: { } 24 | field_type: text_long 25 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/config/sync/media.type.remote_video.yml: -------------------------------------------------------------------------------- 1 | uuid: b5dae132-3c51-455d-92d1-a982df0eb057 2 | langcode: en 3 | status: true 4 | dependencies: { } 5 | _core: 6 | default_config_hash: hIBTnDGgDKnCiP6HUZm1m7600DHUEpC6FN3LQ4sUgZ4 7 | id: remote_video 8 | label: 'Remote video' 9 | description: 'A remotely hosted video from YouTube or Vimeo.' 10 | source: 'oembed:video' 11 | queue_thumbnail_downloads: false 12 | new_revision: true 13 | source_configuration: 14 | source_field: field_media_oembed_video 15 | thumbnails_directory: 'public://oembed_thumbnails/[date:custom:Y-m]' 16 | providers: 17 | - YouTube 18 | - Vimeo 19 | field_map: 20 | title: name 21 | -------------------------------------------------------------------------------- /apps/drupal-js-sdk-server/web/index.php: -------------------------------------------------------------------------------- 1 | handle($request); 20 | $response->send(); 21 | 22 | $kernel->terminate($request, $response); 23 | --------------------------------------------------------------------------------