periplus-map 0.2.1__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- periplus/__init__.py +70 -0
- periplus/checkmap.py +80 -0
- periplus/cli.py +658 -0
- periplus/contract/schema/map.schema.json +138 -0
- periplus/contract/schema/navigation.schema.json +200 -0
- periplus/contract/schema/pack-file.schema.json +1405 -0
- periplus/contract/schema/pack-manifest.schema.json +245 -0
- periplus/contract/schema/project-settings.schema.json +85 -0
- periplus/contract/spec/engine.md +151 -0
- periplus/contract/spec/rules.md +352 -0
- periplus/detect.py +228 -0
- periplus/engine/__init__.py +5 -0
- periplus/engine/check.py +481 -0
- periplus/engine/emit.py +368 -0
- periplus/engine/packload.py +2321 -0
- periplus/engine/pattern.py +27 -0
- periplus/engine/rules.py +1946 -0
- periplus/engine/select.py +491 -0
- periplus/engine/source.py +172 -0
- periplus/engine/tree.py +424 -0
- periplus/errors.py +332 -0
- periplus/init.py +358 -0
- periplus/layout.py +28 -0
- periplus/manifest.py +498 -0
- periplus/map.py +364 -0
- periplus/navigate/__init__.py +1 -0
- periplus/navigate/find.py +143 -0
- periplus/navigate/ids.py +30 -0
- periplus/navigate/listing.py +42 -0
- periplus/navigate/mapfile.py +189 -0
- periplus/navigate/path.py +175 -0
- periplus/navigate/show.py +175 -0
- periplus/navigate/types.py +83 -0
- periplus/navigate/walk.py +138 -0
- periplus/packs/advancedqueue_basic@0.0.1/pack.yaml +14 -0
- periplus/packs/advancedqueue_basic@0.0.1/queue_job_type/queue_job_type.yaml +9 -0
- periplus/packs/advancedqueue_basic@0.0.1/queue_job_type/queue_job_type_annotation.yaml +43 -0
- periplus/packs/advancedqueue_basic@0.0.1/queue_job_type/queue_job_type_attribute.yaml +43 -0
- periplus/packs/ai_basic@0.0.1/ai_agent/ai_agent.yaml +8 -0
- periplus/packs/ai_basic@0.0.1/ai_agent/ai_agent_attribute.yaml +43 -0
- periplus/packs/ai_basic@0.0.1/ai_function_call/ai_function_call.yaml +8 -0
- periplus/packs/ai_basic@0.0.1/ai_function_call/ai_function_call_attribute.yaml +43 -0
- periplus/packs/ai_basic@0.0.1/pack.yaml +15 -0
- periplus/packs/config_pages_basic@0.0.1/bundle/config_pages_bundle_config.yaml +54 -0
- periplus/packs/config_pages_basic@0.0.1/pack.yaml +11 -0
- periplus/packs/crop_basic@0.0.1/bundle/crop_bundle_config.yaml +54 -0
- periplus/packs/crop_basic@0.0.1/pack.yaml +11 -0
- periplus/packs/drupal@0.1.0/block/block_placement.yaml +25 -0
- periplus/packs/drupal@0.1.0/block/block_placement_code.yaml +58 -0
- periplus/packs/drupal@0.1.0/block/block_placement_config.yaml +53 -0
- periplus/packs/drupal@0.1.0/block/block_plugin.yaml +52 -0
- periplus/packs/drupal@0.1.0/block/block_plugin_altered.yaml +61 -0
- periplus/packs/drupal@0.1.0/block/block_plugin_annotation.yaml +69 -0
- periplus/packs/drupal@0.1.0/block/block_plugin_attribute.yaml +56 -0
- periplus/packs/drupal@0.1.0/block/block_plugin_content.yaml +46 -0
- periplus/packs/drupal@0.1.0/block/block_plugin_derived.yaml +110 -0
- periplus/packs/drupal@0.1.0/block/block_plugin_deriver.yaml +30 -0
- periplus/packs/drupal@0.1.0/block/block_type.yaml +14 -0
- periplus/packs/drupal@0.1.0/block/block_type_code.yaml +43 -0
- periplus/packs/drupal@0.1.0/block/block_type_config.yaml +45 -0
- periplus/packs/drupal@0.1.0/cache/cache.yaml +18 -0
- periplus/packs/drupal@0.1.0/cache/cache_backend.yaml +31 -0
- periplus/packs/drupal@0.1.0/component/sdc.yaml +19 -0
- periplus/packs/drupal@0.1.0/component/sdc_definition.yaml +25 -0
- periplus/packs/drupal@0.1.0/component/sdc_use.yaml +25 -0
- periplus/packs/drupal@0.1.0/config/config_object.yaml +65 -0
- periplus/packs/drupal@0.1.0/display/display.yaml +32 -0
- periplus/packs/drupal@0.1.0/display/display_code.yaml +53 -0
- periplus/packs/drupal@0.1.0/display/display_config.yaml +95 -0
- periplus/packs/drupal@0.1.0/entity/entity.yaml +33 -0
- periplus/packs/drupal@0.1.0/entity/entity_class.yaml +60 -0
- periplus/packs/drupal@0.1.0/entity/entity_save.yaml +27 -0
- periplus/packs/drupal@0.1.0/entity/entity_type_annotation.yaml +85 -0
- periplus/packs/drupal@0.1.0/entity/entity_type_attribute.yaml +76 -0
- periplus/packs/drupal@0.1.0/field/field_instance_code.yaml +40 -0
- periplus/packs/drupal@0.1.0/field/field_instance_config.yaml +58 -0
- periplus/packs/drupal@0.1.0/field/field_storage.yaml +37 -0
- periplus/packs/drupal@0.1.0/field/field_storage_code.yaml +39 -0
- periplus/packs/drupal@0.1.0/field/field_storage_config.yaml +24 -0
- periplus/packs/drupal@0.1.0/form/form.yaml +48 -0
- periplus/packs/drupal@0.1.0/form/form_class.yaml +50 -0
- periplus/packs/drupal@0.1.0/form/form_id.yaml +48 -0
- periplus/packs/drupal@0.1.0/form/form_methods.yaml +39 -0
- periplus/packs/drupal@0.1.0/hook/hook.yaml +8 -0
- periplus/packs/drupal@0.1.0/hook/hook_attribute.yaml +28 -0
- periplus/packs/drupal@0.1.0/module/module.yaml +8 -0
- periplus/packs/drupal@0.1.0/module/module_info.yaml +50 -0
- periplus/packs/drupal@0.1.0/pack.yaml +184 -0
- periplus/packs/drupal@0.1.0/plugin/plugin.yaml +17 -0
- periplus/packs/drupal@0.1.0/plugin/plugin_annotation.yaml +120 -0
- periplus/packs/drupal@0.1.0/recommendations/recommendations.yaml +14 -0
- periplus/packs/drupal@0.1.0/service/service.yaml +19 -0
- periplus/packs/drupal@0.1.0/service/service_autowire.yaml +28 -0
- periplus/packs/drupal@0.1.0/service/service_definition.yaml +24 -0
- periplus/packs/drupal@0.1.0/service/service_use.yaml +43 -0
- periplus/packs/drupal_basic@0.3.0/action/action.yaml +9 -0
- periplus/packs/drupal_basic@0.3.0/action/action_annotation.yaml +43 -0
- periplus/packs/drupal_basic@0.3.0/action/action_attribute.yaml +43 -0
- periplus/packs/drupal_basic@0.3.0/block/block_placement.yaml +16 -0
- periplus/packs/drupal_basic@0.3.0/block/block_placement_config.yaml +51 -0
- periplus/packs/drupal_basic@0.3.0/block_plugin/block_plugin.yaml +14 -0
- periplus/packs/drupal_basic@0.3.0/block_plugin/block_plugin_annotation.yaml +47 -0
- periplus/packs/drupal_basic@0.3.0/block_plugin/block_plugin_attribute.yaml +43 -0
- periplus/packs/drupal_basic@0.3.0/block_type/block_type.yaml +8 -0
- periplus/packs/drupal_basic@0.3.0/block_type/block_type_config.yaml +54 -0
- periplus/packs/drupal_basic@0.3.0/boundary/boundary_types.yaml +19 -0
- periplus/packs/drupal_basic@0.3.0/bundle/bundle.yaml +20 -0
- periplus/packs/drupal_basic@0.3.0/bundle/bundle_config.yaml +393 -0
- periplus/packs/drupal_basic@0.3.0/call/call.yaml +349 -0
- periplus/packs/drupal_basic@0.3.0/component/component.yaml +30 -0
- periplus/packs/drupal_basic@0.3.0/config/config_object.yaml +119 -0
- periplus/packs/drupal_basic@0.3.0/constraint/constraint.yaml +8 -0
- periplus/packs/drupal_basic@0.3.0/constraint/constraint_annotation.yaml +43 -0
- periplus/packs/drupal_basic@0.3.0/constraint/constraint_attribute.yaml +43 -0
- periplus/packs/drupal_basic@0.3.0/display/display.yaml +30 -0
- periplus/packs/drupal_basic@0.3.0/display/display_config.yaml +203 -0
- periplus/packs/drupal_basic@0.3.0/display/display_mode_config.yaml +60 -0
- periplus/packs/drupal_basic@0.3.0/entity_type/config_entity_type_annotation.yaml +46 -0
- periplus/packs/drupal_basic@0.3.0/entity_type/config_entity_type_attribute.yaml +43 -0
- periplus/packs/drupal_basic@0.3.0/entity_type/content_entity_type_annotation.yaml +46 -0
- periplus/packs/drupal_basic@0.3.0/entity_type/content_entity_type_attribute.yaml +43 -0
- periplus/packs/drupal_basic@0.3.0/entity_type/entity_type.yaml +16 -0
- periplus/packs/drupal_basic@0.3.0/field/field_instance_config.yaml +116 -0
- periplus/packs/drupal_basic@0.3.0/field/field_storage.yaml +21 -0
- periplus/packs/drupal_basic@0.3.0/field/field_storage_config.yaml +45 -0
- periplus/packs/drupal_basic@0.3.0/field_formatter/field_formatter.yaml +8 -0
- periplus/packs/drupal_basic@0.3.0/field_formatter/field_formatter_annotation.yaml +46 -0
- periplus/packs/drupal_basic@0.3.0/field_formatter/field_formatter_attribute.yaml +43 -0
- periplus/packs/drupal_basic@0.3.0/field_type/field_type_annotation.yaml +46 -0
- periplus/packs/drupal_basic@0.3.0/field_type/field_type_attribute.yaml +50 -0
- periplus/packs/drupal_basic@0.3.0/field_widget/field_widget_annotation.yaml +46 -0
- periplus/packs/drupal_basic@0.3.0/field_widget/field_widget_attribute.yaml +50 -0
- periplus/packs/drupal_basic@0.3.0/form/form_id.yaml +80 -0
- periplus/packs/drupal_basic@0.3.0/hook/hook.yaml +100 -0
- periplus/packs/drupal_basic@0.3.0/hook/hook_attribute.yaml +64 -0
- periplus/packs/drupal_basic@0.3.0/hook/hook_theme_include.yaml +34 -0
- periplus/packs/drupal_basic@0.3.0/library/library.yaml +12 -0
- periplus/packs/drupal_basic@0.3.0/library/library_definition.yaml +58 -0
- periplus/packs/drupal_basic@0.3.0/local_action/local_action.yaml +12 -0
- periplus/packs/drupal_basic@0.3.0/local_action/local_action_definition.yaml +49 -0
- periplus/packs/drupal_basic@0.3.0/mail/mail.yaml +8 -0
- periplus/packs/drupal_basic@0.3.0/mail/mail_attribute.yaml +43 -0
- periplus/packs/drupal_basic@0.3.0/media_source/media_source.yaml +8 -0
- periplus/packs/drupal_basic@0.3.0/media_source/media_source_annotation.yaml +43 -0
- periplus/packs/drupal_basic@0.3.0/media_source/media_source_attribute.yaml +79 -0
- periplus/packs/drupal_basic@0.3.0/menu_link/menu_link.yaml +18 -0
- periplus/packs/drupal_basic@0.3.0/menu_link/menu_link_definition.yaml +48 -0
- periplus/packs/drupal_basic@0.3.0/module/module.yaml +7 -0
- periplus/packs/drupal_basic@0.3.0/module/module_info.yaml +58 -0
- periplus/packs/drupal_basic@0.3.0/pack.yaml +528 -0
- periplus/packs/drupal_basic@0.3.0/permission/permission.yaml +7 -0
- periplus/packs/drupal_basic@0.3.0/permission/permission_definition.yaml +27 -0
- periplus/packs/drupal_basic@0.3.0/queue_worker/queue_worker.yaml +9 -0
- periplus/packs/drupal_basic@0.3.0/queue_worker/queue_worker_annotation.yaml +43 -0
- periplus/packs/drupal_basic@0.3.0/queue_worker/queue_worker_attribute.yaml +43 -0
- periplus/packs/drupal_basic@0.3.0/rest_resource/rest_resource.yaml +8 -0
- periplus/packs/drupal_basic@0.3.0/rest_resource/rest_resource_annotation.yaml +43 -0
- periplus/packs/drupal_basic@0.3.0/rest_resource/rest_resource_attribute.yaml +43 -0
- periplus/packs/drupal_basic@0.3.0/role/role.yaml +14 -0
- periplus/packs/drupal_basic@0.3.0/role/role_config.yaml +44 -0
- periplus/packs/drupal_basic@0.3.0/route/route.yaml +42 -0
- periplus/packs/drupal_basic@0.3.0/route/route_definition.yaml +113 -0
- periplus/packs/drupal_basic@0.3.0/route/route_options.yaml +55 -0
- periplus/packs/drupal_basic@0.3.0/route/route_requirements.yaml +108 -0
- periplus/packs/drupal_basic@0.3.0/service/service.yaml +56 -0
- periplus/packs/drupal_basic@0.3.0/service/service_definition.yaml +181 -0
- periplus/packs/drupal_basic@0.3.0/template/template.yaml +86 -0
- periplus/packs/drupal_basic@0.3.0/template/template_route_link.yaml +30 -0
- periplus/packs/drupal_basic@0.3.0/theme/theme.yaml +15 -0
- periplus/packs/drupal_basic@0.3.0/theme/theme_info.yaml +61 -0
- periplus/packs/drupal_basic@0.3.0/theme_hook/template_suggestion.yaml +29 -0
- periplus/packs/drupal_basic@0.3.0/theme_hook/theme_hook.yaml +87 -0
- periplus/packs/drupal_basic@0.3.0/theme_hook/theme_hook_render.yaml +20 -0
- periplus/packs/drupal_basic@0.3.0/url/url.yaml +88 -0
- periplus/packs/drupal_basic@0.3.0/views_plugin/views_field_attribute.yaml +80 -0
- periplus/packs/drupal_basic@0.3.0/views_plugin/views_filter_attribute.yaml +80 -0
- periplus/packs/drupal_basic@0.3.0/views_plugin/views_plugin.yaml +15 -0
- periplus/packs/drupal_basic@0.3.0/views_plugin/views_style_attribute.yaml +80 -0
- periplus/packs/drupal_js_basic@0.0.1/attachment/attachment.yaml +12 -0
- periplus/packs/drupal_js_basic@0.0.1/attachment/attachment_in_php.yaml +15 -0
- periplus/packs/drupal_js_basic@0.0.1/attachment/attachment_in_php_array.yaml +52 -0
- periplus/packs/drupal_js_basic@0.0.1/attachment/attachment_in_twig.yaml +26 -0
- periplus/packs/drupal_js_basic@0.0.1/attachment/php_function_holder.yaml +13 -0
- periplus/packs/drupal_js_basic@0.0.1/behavior/behavior.yaml +198 -0
- periplus/packs/drupal_js_basic@0.0.1/pack.yaml +153 -0
- periplus/packs/drupal_js_basic@0.0.1/setting/setting.yaml +13 -0
- periplus/packs/drupal_js_basic@0.0.1/setting/setting_in_js.yaml +15 -0
- periplus/packs/drupal_js_basic@0.0.1/setting/setting_in_php.yaml +92 -0
- periplus/packs/drush_basic@0.0.1/command/command.yaml +15 -0
- periplus/packs/drush_basic@0.0.1/command/command_annotation.yaml +60 -0
- periplus/packs/drush_basic@0.0.1/command/command_attribute.yaml +88 -0
- periplus/packs/drush_basic@0.0.1/pack.yaml +29 -0
- periplus/packs/eck_basic@0.0.1/bundle/eck_bundle_config.yaml +56 -0
- periplus/packs/eck_basic@0.0.1/entity_type/eck_entity_type_config.yaml +26 -0
- periplus/packs/eck_basic@0.0.1/pack.yaml +28 -0
- periplus/packs/go@0.0.2/interfaces/satisfies.yaml +47 -0
- periplus/packs/go@0.0.2/pack.yaml +51 -0
- periplus/packs/go@0.0.2/types/find_declarations.yaml +137 -0
- periplus/packs/go@0.0.2/types/node_types.yaml +36 -0
- periplus/packs/go_basic@0.0.3/pack.yaml +104 -0
- periplus/packs/go_basic@0.0.3/rules/calls.yaml +25 -0
- periplus/packs/go_basic@0.0.3/rules/declarations.yaml +40 -0
- periplus/packs/go_basic@0.0.3/rules/imports.yaml +16 -0
- periplus/packs/go_basic@0.0.3/types/node_types.yaml +15 -0
- periplus/packs/js_basic@0.0.1/function/function.yaml +68 -0
- periplus/packs/js_basic@0.0.1/pack.yaml +50 -0
- periplus/packs/laravel_basic@0.0.5/pack.yaml +313 -0
- periplus/packs/laravel_basic@0.0.5/rules/classes.yaml +42 -0
- periplus/packs/laravel_basic@0.0.5/rules/config.yaml +229 -0
- periplus/packs/laravel_basic@0.0.5/rules/routes.yaml +210 -0
- periplus/packs/laravel_basic@0.0.5/rules/types.yaml +50 -0
- periplus/packs/laravel_basic@0.0.5/rules/views.yaml +100 -0
- periplus/packs/paragraphs_basic@0.0.1/bundle/paragraph_bundle_config.yaml +54 -0
- periplus/packs/paragraphs_basic@0.0.1/pack.yaml +12 -0
- periplus/packs/php@0.1.0/edges/edge_kinds.yaml +64 -0
- periplus/packs/php@0.1.0/edges/find_calls.yaml +34 -0
- periplus/packs/php@0.1.0/edges/find_imports.yaml +18 -0
- periplus/packs/php@0.1.0/edges/find_member_access.yaml +22 -0
- periplus/packs/php@0.1.0/edges/find_structure.yaml +38 -0
- periplus/packs/php@0.1.0/embedded/embedded_regions.yaml +19 -0
- periplus/packs/php@0.1.0/imports/imports.yaml +20 -0
- periplus/packs/php@0.1.0/pack.yaml +117 -0
- periplus/packs/php@0.1.0/resolution/excluded_tokens.yaml +23 -0
- periplus/packs/php@0.1.0/resolution/resolution.yaml +35 -0
- periplus/packs/php@0.1.0/types/find_declarations.yaml +102 -0
- periplus/packs/php@0.1.0/types/node_types.yaml +55 -0
- periplus/packs/php_basic@0.2.0/edges/edge_kinds.yaml +48 -0
- periplus/packs/php_basic@0.2.0/edges/find_structure.yaml +750 -0
- periplus/packs/php_basic@0.2.0/imports/imports.yaml +19 -0
- periplus/packs/php_basic@0.2.0/pack.yaml +94 -0
- periplus/packs/php_basic@0.2.0/types/find_declarations.yaml +267 -0
- periplus/packs/php_basic@0.2.0/types/node_types.yaml +55 -0
- periplus/packs/profile_basic@0.0.1/bundle/profile_bundle_config.yaml +54 -0
- periplus/packs/profile_basic@0.0.1/pack.yaml +12 -0
- periplus/packs/salesforce_basic@0.0.1/event/salesforce_event.yaml +36 -0
- periplus/packs/salesforce_basic@0.0.1/pack.yaml +31 -0
- periplus/packs/salesforce_basic@0.0.1/salesforce_mapping/salesforce_mapping.yaml +19 -0
- periplus/packs/salesforce_basic@0.0.1/salesforce_mapping/salesforce_mapping_config.yaml +83 -0
- periplus/packs/salesforce_basic@0.0.1/salesforce_mapping_field/salesforce_mapping_field.yaml +8 -0
- periplus/packs/salesforce_basic@0.0.1/salesforce_mapping_field/salesforce_mapping_field_annotation.yaml +43 -0
- periplus/packs/twig@0.0.1/pack.yaml +26 -0
- periplus/packs/twig@0.0.1/types/template.yaml +57 -0
- periplus/packs/twig_basic@0.1.0/pack.yaml +11 -0
- periplus/packs/twig_tweak_basic@0.0.1/pack.yaml +27 -0
- periplus/packs/twig_tweak_basic@0.0.1/rules/block.yaml +20 -0
- periplus/packs/twig_tweak_basic@0.0.1/rules/entity.yaml +35 -0
- periplus/packs/twig_tweak_basic@0.0.1/rules/field.yaml +21 -0
- periplus/packs/twig_tweak_basic@0.0.1/rules/menu.yaml +21 -0
- periplus/packs/webform_basic@0.0.1/bundle/webform_submission_bundle_config.yaml +54 -0
- periplus/packs/webform_basic@0.0.1/pack.yaml +20 -0
- periplus/packs/webform_basic@0.0.1/webform_handler/webform_handler.yaml +8 -0
- periplus/packs/webform_basic@0.0.1/webform_handler/webform_handler_annotation.yaml +43 -0
- periplus/packs/yaml@0.0.1/pack.yaml +72 -0
- periplus/packs/yaml@0.0.1/types/find_mapping_entry.yaml +21 -0
- periplus/packs/yaml@0.0.1/types/yaml_types.yaml +44 -0
- periplus/packs/yaml_basic@0.1.0/pack.yaml +10 -0
- periplus/packs.py +447 -0
- periplus/preflight.py +102 -0
- periplus/py.typed +0 -0
- periplus/report.py +596 -0
- periplus/resolution.py +355 -0
- periplus/settings.py +617 -0
- periplus/settings.stub.yml +99 -0
- periplus/spec.py +774 -0
- periplus/update.py +197 -0
- periplus/validate.py +655 -0
- periplus_map-0.2.1.dist-info/METADATA +566 -0
- periplus_map-0.2.1.dist-info/RECORD +272 -0
- periplus_map-0.2.1.dist-info/WHEEL +4 -0
- periplus_map-0.2.1.dist-info/entry_points.txt +2 -0
- periplus_map-0.2.1.dist-info/licenses/LICENSE +202 -0
- periplus_map-0.2.1.dist-info/licenses/NOTICE +2 -0
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
$schema: "https://periplus.dev/schema/0/pack-file.schema.json"
|
|
2
|
+
|
|
3
|
+
# drupal pack — declares the config object and the catch-all that finds every config file.
|
|
4
|
+
#
|
|
5
|
+
# The catch-all is the reason a gap is visible instead of silent. Every file in the config
|
|
6
|
+
# folders becomes a node here, and the specific rules elsewhere refine the ones they
|
|
7
|
+
# understand. Measured on a private Drupal site: 431 files in, 162 refined by a specific rule,
|
|
8
|
+
# 269 left as plain drupal.config_object — present, named, not understood.
|
|
9
|
+
#
|
|
10
|
+
# The path used to be written into this rule as **/config/{install,sync}/*.yml. All three
|
|
11
|
+
# real sites keep config somewhere else, so it matched nothing and 431 files vanished
|
|
12
|
+
# without a word. That is exactly the failure the catch-all exists to prevent.
|
|
13
|
+
|
|
14
|
+
node_types:
|
|
15
|
+
- name: drupal.config_object
|
|
16
|
+
id_namespace: drupal.config
|
|
17
|
+
edge_kinds:
|
|
18
|
+
- kind: config_depends
|
|
19
|
+
from: drupal.config_object
|
|
20
|
+
to: drupal.config_object
|
|
21
|
+
- kind: depends_on_module
|
|
22
|
+
from:
|
|
23
|
+
- drupal.module
|
|
24
|
+
- drupal.config_object
|
|
25
|
+
to: drupal.module
|
|
26
|
+
rules:
|
|
27
|
+
- rule: any_config_file
|
|
28
|
+
reads: file
|
|
29
|
+
in:
|
|
30
|
+
- config
|
|
31
|
+
- module_config
|
|
32
|
+
match:
|
|
33
|
+
file: '*'
|
|
34
|
+
filetype: yaml
|
|
35
|
+
id: &id001
|
|
36
|
+
from: file_stem
|
|
37
|
+
emits:
|
|
38
|
+
- node:
|
|
39
|
+
type: drupal.config_object
|
|
40
|
+
confidence: declared
|
|
41
|
+
- rule: any_config_file_edges
|
|
42
|
+
reads: file
|
|
43
|
+
in:
|
|
44
|
+
- config
|
|
45
|
+
- module_config
|
|
46
|
+
match:
|
|
47
|
+
file: '*'
|
|
48
|
+
filetype: yaml
|
|
49
|
+
emits:
|
|
50
|
+
- edge:
|
|
51
|
+
kind: config_depends
|
|
52
|
+
from: this_node
|
|
53
|
+
to:
|
|
54
|
+
from:
|
|
55
|
+
key: dependencies.config
|
|
56
|
+
each: true
|
|
57
|
+
- edge:
|
|
58
|
+
kind: depends_on_module
|
|
59
|
+
from: this_node
|
|
60
|
+
to:
|
|
61
|
+
from:
|
|
62
|
+
key: dependencies.module
|
|
63
|
+
each: true
|
|
64
|
+
confidence: declared
|
|
65
|
+
id: *id001
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
$schema: "https://periplus.dev/schema/0/pack-file.schema.json"
|
|
2
|
+
|
|
3
|
+
# drupal pack — declares entity displays. Finds nothing.
|
|
4
|
+
#
|
|
5
|
+
# A display says how a bundle is edited or rendered, one config object per mode. Two kinds,
|
|
6
|
+
# and they are genuinely two: a form display and a view display of the same bundle and mode
|
|
7
|
+
# carry the SAME internal id.
|
|
8
|
+
#
|
|
9
|
+
# core.entity_form_display.block_content.block_ways_note.default.yml:9
|
|
10
|
+
# core.entity_view_display.block_content.block_ways_note.default.yml:9
|
|
11
|
+
# both: id: block_content.block_ways_note.default
|
|
12
|
+
#
|
|
13
|
+
# That is the evidence for minting config ids from the file name rather than from the file's
|
|
14
|
+
# own id key, and it was found by transcribing a map rather than by reading the schema.
|
|
15
|
+
|
|
16
|
+
node_types:
|
|
17
|
+
|
|
18
|
+
- name: drupal.form_display
|
|
19
|
+
parent: drupal.config_object
|
|
20
|
+
|
|
21
|
+
- name: drupal.view_display
|
|
22
|
+
parent: drupal.config_object
|
|
23
|
+
|
|
24
|
+
edge_kinds:
|
|
25
|
+
|
|
26
|
+
- kind: displays
|
|
27
|
+
from: [drupal.form_display, drupal.view_display]
|
|
28
|
+
to: drupal.block_type
|
|
29
|
+
|
|
30
|
+
- kind: shows_field
|
|
31
|
+
from: [drupal.form_display, drupal.view_display]
|
|
32
|
+
to: drupal.field_instance
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
$schema: "https://periplus.dev/schema/0/pack-file.schema.json"
|
|
2
|
+
|
|
3
|
+
# drupal pack — displays built by PHP. One rule, and the one that does not fit the shape.
|
|
4
|
+
#
|
|
5
|
+
# Every other PHP rule in this pack matches a config entity class, ::create, and an array.
|
|
6
|
+
# This one does not. A display is built through a service and a fluent chain:
|
|
7
|
+
#
|
|
8
|
+
# block_type_ways.install:51 $display_repository = \Drupal::service('entity_display.repository');
|
|
9
|
+
# block_type_ways.install:53 $form_display = $display_repository->getFormDisplay('block_content', 'type_way_code');
|
|
10
|
+
# block_type_ways.install:54-58 ->setComponent(…)->setComponent(…)->save();
|
|
11
|
+
#
|
|
12
|
+
# So it is written here rather than folded into a shared ::create rule, and it is the
|
|
13
|
+
# evidence that a single generic "config entity created in PHP" rule would not cover
|
|
14
|
+
# everything.
|
|
15
|
+
|
|
16
|
+
needs:
|
|
17
|
+
types:
|
|
18
|
+
- drupal.form_display
|
|
19
|
+
- drupal.view_display
|
|
20
|
+
rules:
|
|
21
|
+
- rule: display_from_code
|
|
22
|
+
reads: file
|
|
23
|
+
in:
|
|
24
|
+
- custom_module
|
|
25
|
+
match:
|
|
26
|
+
method_call: getFormDisplay
|
|
27
|
+
where:
|
|
28
|
+
- on_service: entity_display.repository
|
|
29
|
+
id: &id001
|
|
30
|
+
from:
|
|
31
|
+
- argument: 0
|
|
32
|
+
- argument: 1
|
|
33
|
+
template: core.entity_form_display.{0}.{1}.default
|
|
34
|
+
on_miss: unresolved
|
|
35
|
+
emits:
|
|
36
|
+
- node:
|
|
37
|
+
type: drupal.form_display
|
|
38
|
+
confidence: inferred
|
|
39
|
+
- rule: display_from_code_edges
|
|
40
|
+
reads: file
|
|
41
|
+
in:
|
|
42
|
+
- custom_module
|
|
43
|
+
match:
|
|
44
|
+
method_call: getFormDisplay
|
|
45
|
+
where:
|
|
46
|
+
- on_service: entity_display.repository
|
|
47
|
+
emits:
|
|
48
|
+
- edge:
|
|
49
|
+
kind: declares
|
|
50
|
+
from: enclosing_callable
|
|
51
|
+
to: this_node
|
|
52
|
+
confidence: inferred
|
|
53
|
+
id: *id001
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
$schema: "https://periplus.dev/schema/0/pack-file.schema.json"
|
|
2
|
+
|
|
3
|
+
# drupal pack — displays from config files. Two rules, one per kind.
|
|
4
|
+
|
|
5
|
+
needs:
|
|
6
|
+
types:
|
|
7
|
+
- drupal.form_display
|
|
8
|
+
- drupal.view_display
|
|
9
|
+
- drupal.block_type
|
|
10
|
+
- drupal.field_instance
|
|
11
|
+
rules:
|
|
12
|
+
- rule: form_display_from_config
|
|
13
|
+
reads: file
|
|
14
|
+
in:
|
|
15
|
+
- config
|
|
16
|
+
- module_config
|
|
17
|
+
match:
|
|
18
|
+
file: core.entity_form_display.*
|
|
19
|
+
filetype: yaml
|
|
20
|
+
id: &id001
|
|
21
|
+
from: file_stem
|
|
22
|
+
emits:
|
|
23
|
+
- node:
|
|
24
|
+
type: drupal.form_display
|
|
25
|
+
confidence: declared
|
|
26
|
+
- rule: view_display_from_config
|
|
27
|
+
reads: file
|
|
28
|
+
in:
|
|
29
|
+
- config
|
|
30
|
+
- module_config
|
|
31
|
+
match:
|
|
32
|
+
file: core.entity_view_display.*
|
|
33
|
+
filetype: yaml
|
|
34
|
+
id: &id002
|
|
35
|
+
from: file_stem
|
|
36
|
+
emits:
|
|
37
|
+
- node:
|
|
38
|
+
type: drupal.view_display
|
|
39
|
+
confidence: declared
|
|
40
|
+
- rule: form_display_from_config_edges
|
|
41
|
+
reads: file
|
|
42
|
+
in:
|
|
43
|
+
- config
|
|
44
|
+
- module_config
|
|
45
|
+
match:
|
|
46
|
+
file: core.entity_form_display.*
|
|
47
|
+
filetype: yaml
|
|
48
|
+
emits:
|
|
49
|
+
- edge:
|
|
50
|
+
kind: displays
|
|
51
|
+
from: this_node
|
|
52
|
+
to:
|
|
53
|
+
from:
|
|
54
|
+
- key: targetEntityType
|
|
55
|
+
- key: bundle
|
|
56
|
+
template: '{targetEntityType}.type.{bundle}'
|
|
57
|
+
- edge:
|
|
58
|
+
kind: shows_field
|
|
59
|
+
from: this_node
|
|
60
|
+
to:
|
|
61
|
+
from:
|
|
62
|
+
- key: targetEntityType
|
|
63
|
+
- key: bundle
|
|
64
|
+
- each: content.*
|
|
65
|
+
template: field.field.{targetEntityType}.{bundle}.{key}
|
|
66
|
+
confidence: declared
|
|
67
|
+
id: *id001
|
|
68
|
+
- rule: view_display_from_config_edges
|
|
69
|
+
reads: file
|
|
70
|
+
in:
|
|
71
|
+
- config
|
|
72
|
+
- module_config
|
|
73
|
+
match:
|
|
74
|
+
file: core.entity_view_display.*
|
|
75
|
+
filetype: yaml
|
|
76
|
+
emits:
|
|
77
|
+
- edge:
|
|
78
|
+
kind: displays
|
|
79
|
+
from: this_node
|
|
80
|
+
to:
|
|
81
|
+
from:
|
|
82
|
+
- key: targetEntityType
|
|
83
|
+
- key: bundle
|
|
84
|
+
template: '{targetEntityType}.type.{bundle}'
|
|
85
|
+
- edge:
|
|
86
|
+
kind: shows_field
|
|
87
|
+
from: this_node
|
|
88
|
+
to:
|
|
89
|
+
from:
|
|
90
|
+
- key: targetEntityType
|
|
91
|
+
- key: bundle
|
|
92
|
+
- each: content.*
|
|
93
|
+
template: field.field.{targetEntityType}.{bundle}.{key}
|
|
94
|
+
confidence: declared
|
|
95
|
+
id: *id002
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
$schema: "https://periplus.dev/schema/0/pack-file.schema.json"
|
|
2
|
+
|
|
3
|
+
# drupal pack — declares the Entity API types and edges. Finds nothing.
|
|
4
|
+
#
|
|
5
|
+
# The entity type is NOT the class that implements it, and the file this replaces got that
|
|
6
|
+
# wrong. It made the class the node and treated id = "redirect" as the class's identity.
|
|
7
|
+
#
|
|
8
|
+
# References say otherwise. Everything that names an entity type names the machine name:
|
|
9
|
+
# field.storage.node.body -> node
|
|
10
|
+
# core.entity_view_display.node.article.… -> node
|
|
11
|
+
# Nothing anywhere writes Drupal\node\Entity\Node. So the entity type is its own node, the
|
|
12
|
+
# class is another, and an edge joins them — the same finding as block plugin versus block
|
|
13
|
+
# class, which was made first and not carried across.
|
|
14
|
+
|
|
15
|
+
node_types:
|
|
16
|
+
- name: drupal.entity_type
|
|
17
|
+
id_namespace: drupal.entity_type
|
|
18
|
+
- name: drupal.content_entity_type
|
|
19
|
+
parent: drupal.entity_type
|
|
20
|
+
- name: drupal.config_entity_type
|
|
21
|
+
parent: drupal.entity_type
|
|
22
|
+
- name: drupal.entity_class
|
|
23
|
+
parent: php.class
|
|
24
|
+
- name: drupal.content_entity_class
|
|
25
|
+
parent: drupal.entity_class
|
|
26
|
+
- name: drupal.config_entity_class
|
|
27
|
+
parent: drupal.entity_class
|
|
28
|
+
- name: drupal.entity_save
|
|
29
|
+
parent: php.method
|
|
30
|
+
edge_kinds:
|
|
31
|
+
- kind: entity_class
|
|
32
|
+
from: drupal.entity_type
|
|
33
|
+
to: php.class
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
$schema: "https://periplus.dev/schema/0/pack-file.schema.json"
|
|
2
|
+
|
|
3
|
+
# drupal pack — classifies a class as an entity class. One rule, and it reads the map.
|
|
4
|
+
#
|
|
5
|
+
# This is the rule that settled a question the old file got wrong by omission. It looks
|
|
6
|
+
# like a rule about one file, and it is not.
|
|
7
|
+
#
|
|
8
|
+
# A class becomes an entity class because of what it extends, and the chain has to be
|
|
9
|
+
# followed. In the common case that is one hop into a class the pack already describes:
|
|
10
|
+
# all 19 custom entities in a private Drupal site write `extends ContentEntityBase` directly,
|
|
11
|
+
# so the pack's own hierarchy table answers it without the map.
|
|
12
|
+
#
|
|
13
|
+
# But the same rule shape, applied to the rest of that codebase, chains through FIRST-PARTY
|
|
14
|
+
# base classes:
|
|
15
|
+
# OrgScopedEntityAccessControlHandler extended 7 times, itself first-party
|
|
16
|
+
# JobTypeBase extended 9 times
|
|
17
|
+
# ChatToolLoop extended 7 times
|
|
18
|
+
# A class extending one of those cannot be classified until that base has been, and nothing
|
|
19
|
+
# tells you in advance which case a file is.
|
|
20
|
+
#
|
|
21
|
+
# So transitive classification is ALWAYS a map rule. Not sometimes. The fixpoint sorts the
|
|
22
|
+
# order out, and no pack author has to think about it.
|
|
23
|
+
|
|
24
|
+
needs:
|
|
25
|
+
types: [drupal.entity_class, drupal.content_entity_class, drupal.config_entity_class]
|
|
26
|
+
|
|
27
|
+
rules:
|
|
28
|
+
|
|
29
|
+
- rule: entity_class_content
|
|
30
|
+
reads: map
|
|
31
|
+
match:
|
|
32
|
+
node_type: php.class
|
|
33
|
+
where:
|
|
34
|
+
- ancestor_reaches: "Drupal\\Core\\Entity\\ContentEntityInterface"
|
|
35
|
+
emits:
|
|
36
|
+
- type: drupal.content_entity_class
|
|
37
|
+
confidence: declared
|
|
38
|
+
# Verified: a private Drupal site has 19 classes reaching this through ContentEntityBase,
|
|
39
|
+
# and not one of them writes `implements ContentEntityInterface` at its own declaration.
|
|
40
|
+
# A rule matching the written clause would match nothing real.
|
|
41
|
+
|
|
42
|
+
- rule: entity_class_config
|
|
43
|
+
reads: map
|
|
44
|
+
match:
|
|
45
|
+
node_type: php.class
|
|
46
|
+
where:
|
|
47
|
+
- ancestor_reaches: "Drupal\\Core\\Config\\Entity\\ConfigEntityInterface"
|
|
48
|
+
emits:
|
|
49
|
+
- type: drupal.config_entity_class
|
|
50
|
+
confidence: declared
|
|
51
|
+
# contrib pathauto PathautoPattern.php:74 extends ConfigEntityBase.
|
|
52
|
+
|
|
53
|
+
# ------------------------------------------------------------------------------------
|
|
54
|
+
# Deduplication is engine behaviour, not a switch.
|
|
55
|
+
#
|
|
56
|
+
# The old file carried `dedupe_paths: true` on one rule. It exists because EntityForm
|
|
57
|
+
# reaches FormInterface twice — through FormBase, and through EntityFormInterface which
|
|
58
|
+
# extends BaseFormIdInterface. Following both paths and counting the hit twice is never
|
|
59
|
+
# what anyone wants, so the engine always dedupes and a pack never says so.
|
|
60
|
+
# ------------------------------------------------------------------------------------
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
$schema: "https://periplus.dev/schema/0/pack-file.schema.json"
|
|
2
|
+
|
|
3
|
+
# drupal pack — the entity save method. One rule, and it reads the map.
|
|
4
|
+
#
|
|
5
|
+
# The case that proves a rule cannot key on a name. Core has two methods called `save` that
|
|
6
|
+
# differ only in what their containing class is:
|
|
7
|
+
# EntityBase.php:368 save()
|
|
8
|
+
# EntityForm.php:293 save(array $form, FormStateInterface $form_state)
|
|
9
|
+
# A name-only rule matches both and distinguishes neither.
|
|
10
|
+
|
|
11
|
+
needs:
|
|
12
|
+
types: [drupal.entity_class]
|
|
13
|
+
|
|
14
|
+
rules:
|
|
15
|
+
|
|
16
|
+
- rule: entity_save
|
|
17
|
+
reads: map
|
|
18
|
+
match:
|
|
19
|
+
node_type: php.method
|
|
20
|
+
where:
|
|
21
|
+
- name: save
|
|
22
|
+
- contained_by_type: drupal.entity_class
|
|
23
|
+
emits:
|
|
24
|
+
- type: drupal.entity_save
|
|
25
|
+
confidence: declared
|
|
26
|
+
# `reads: map` because the containing class's type is what decides it, and that type is
|
|
27
|
+
# itself assigned by a map rule. Two passes, and the old file said neither.
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
$schema: "https://periplus.dev/schema/0/pack-file.schema.json"
|
|
2
|
+
|
|
3
|
+
# drupal pack — entity type declared by a docblock annotation. One rule.
|
|
4
|
+
#
|
|
5
|
+
# Not a legacy tail, and the measurement that says so is the strongest argument in this
|
|
6
|
+
# directory. A private Drupal site, a 2026 codebase:
|
|
7
|
+
#
|
|
8
|
+
# 20 files carry @ContentEntityType
|
|
9
|
+
# 0 files carry #[ContentEntityType]
|
|
10
|
+
#
|
|
11
|
+
# A pack supporting attributes only would map that site's entire entity layer as nothing.
|
|
12
|
+
|
|
13
|
+
needs:
|
|
14
|
+
types:
|
|
15
|
+
- drupal.content_entity_type
|
|
16
|
+
- drupal.config_entity_type
|
|
17
|
+
rules:
|
|
18
|
+
- rule: content_entity_type_from_annotation
|
|
19
|
+
reads: file
|
|
20
|
+
in:
|
|
21
|
+
- custom_module
|
|
22
|
+
match:
|
|
23
|
+
annotation: ContentEntityType
|
|
24
|
+
grammar: doctrine-annotation
|
|
25
|
+
where:
|
|
26
|
+
- applies_to: class_declaration
|
|
27
|
+
id: &id001
|
|
28
|
+
from:
|
|
29
|
+
annotation_key: id
|
|
30
|
+
must_be: string_literal
|
|
31
|
+
on_miss: unresolved
|
|
32
|
+
emits:
|
|
33
|
+
- node:
|
|
34
|
+
type: drupal.content_entity_type
|
|
35
|
+
confidence: declared
|
|
36
|
+
- rule: config_entity_type_from_annotation
|
|
37
|
+
reads: file
|
|
38
|
+
in:
|
|
39
|
+
- custom_module
|
|
40
|
+
match:
|
|
41
|
+
annotation: ConfigEntityType
|
|
42
|
+
grammar: doctrine-annotation
|
|
43
|
+
where:
|
|
44
|
+
- applies_to: class_declaration
|
|
45
|
+
id: &id002
|
|
46
|
+
from:
|
|
47
|
+
annotation_key: id
|
|
48
|
+
must_be: string_literal
|
|
49
|
+
on_miss: unresolved
|
|
50
|
+
emits:
|
|
51
|
+
- node:
|
|
52
|
+
type: drupal.config_entity_type
|
|
53
|
+
confidence: declared
|
|
54
|
+
- rule: content_entity_type_from_annotation_edges
|
|
55
|
+
reads: file
|
|
56
|
+
in:
|
|
57
|
+
- custom_module
|
|
58
|
+
match:
|
|
59
|
+
annotation: ContentEntityType
|
|
60
|
+
grammar: doctrine-annotation
|
|
61
|
+
where:
|
|
62
|
+
- applies_to: class_declaration
|
|
63
|
+
emits:
|
|
64
|
+
- edge:
|
|
65
|
+
kind: entity_class
|
|
66
|
+
from: this_node
|
|
67
|
+
to: enclosing_class
|
|
68
|
+
confidence: declared
|
|
69
|
+
id: *id001
|
|
70
|
+
- rule: config_entity_type_from_annotation_edges
|
|
71
|
+
reads: file
|
|
72
|
+
in:
|
|
73
|
+
- custom_module
|
|
74
|
+
match:
|
|
75
|
+
annotation: ConfigEntityType
|
|
76
|
+
grammar: doctrine-annotation
|
|
77
|
+
where:
|
|
78
|
+
- applies_to: class_declaration
|
|
79
|
+
emits:
|
|
80
|
+
- edge:
|
|
81
|
+
kind: entity_class
|
|
82
|
+
from: this_node
|
|
83
|
+
to: enclosing_class
|
|
84
|
+
confidence: declared
|
|
85
|
+
id: *id002
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
$schema: "https://periplus.dev/schema/0/pack-file.schema.json"
|
|
2
|
+
|
|
3
|
+
# drupal pack — entity type declared by a PHP attribute. One rule.
|
|
4
|
+
#
|
|
5
|
+
# The current core form. Supplementary to entity_type_annotation.yaml: a class carries one
|
|
6
|
+
# or the other, both mint the same id, and neither needs the other.
|
|
7
|
+
|
|
8
|
+
needs:
|
|
9
|
+
types:
|
|
10
|
+
- drupal.content_entity_type
|
|
11
|
+
- drupal.config_entity_type
|
|
12
|
+
rules:
|
|
13
|
+
- rule: content_entity_type_from_attribute
|
|
14
|
+
reads: file
|
|
15
|
+
in:
|
|
16
|
+
- custom_module
|
|
17
|
+
match:
|
|
18
|
+
attribute: Drupal\Core\Entity\Attribute\ContentEntityType
|
|
19
|
+
where:
|
|
20
|
+
- applies_to: class_declaration
|
|
21
|
+
id: &id001
|
|
22
|
+
from:
|
|
23
|
+
attribute_argument: id
|
|
24
|
+
must_be: string_literal
|
|
25
|
+
on_miss: unresolved
|
|
26
|
+
emits:
|
|
27
|
+
- node:
|
|
28
|
+
type: drupal.content_entity_type
|
|
29
|
+
confidence: declared
|
|
30
|
+
- rule: config_entity_type_from_attribute
|
|
31
|
+
reads: file
|
|
32
|
+
in:
|
|
33
|
+
- custom_module
|
|
34
|
+
match:
|
|
35
|
+
attribute: Drupal\Core\Entity\Attribute\ConfigEntityType
|
|
36
|
+
where:
|
|
37
|
+
- applies_to: class_declaration
|
|
38
|
+
id: &id002
|
|
39
|
+
from:
|
|
40
|
+
attribute_argument: id
|
|
41
|
+
must_be: string_literal
|
|
42
|
+
on_miss: unresolved
|
|
43
|
+
emits:
|
|
44
|
+
- node:
|
|
45
|
+
type: drupal.config_entity_type
|
|
46
|
+
confidence: declared
|
|
47
|
+
- rule: content_entity_type_from_attribute_edges
|
|
48
|
+
reads: file
|
|
49
|
+
in:
|
|
50
|
+
- custom_module
|
|
51
|
+
match:
|
|
52
|
+
attribute: Drupal\Core\Entity\Attribute\ContentEntityType
|
|
53
|
+
where:
|
|
54
|
+
- applies_to: class_declaration
|
|
55
|
+
emits:
|
|
56
|
+
- edge:
|
|
57
|
+
kind: entity_class
|
|
58
|
+
from: this_node
|
|
59
|
+
to: enclosing_class
|
|
60
|
+
confidence: declared
|
|
61
|
+
id: *id001
|
|
62
|
+
- rule: config_entity_type_from_attribute_edges
|
|
63
|
+
reads: file
|
|
64
|
+
in:
|
|
65
|
+
- custom_module
|
|
66
|
+
match:
|
|
67
|
+
attribute: Drupal\Core\Entity\Attribute\ConfigEntityType
|
|
68
|
+
where:
|
|
69
|
+
- applies_to: class_declaration
|
|
70
|
+
emits:
|
|
71
|
+
- edge:
|
|
72
|
+
kind: entity_class
|
|
73
|
+
from: this_node
|
|
74
|
+
to: enclosing_class
|
|
75
|
+
confidence: declared
|
|
76
|
+
id: *id002
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
$schema: "https://periplus.dev/schema/0/pack-file.schema.json"
|
|
2
|
+
|
|
3
|
+
# drupal pack — field instance created by PHP. One rule.
|
|
4
|
+
|
|
5
|
+
needs:
|
|
6
|
+
types:
|
|
7
|
+
- drupal.field_instance
|
|
8
|
+
rules:
|
|
9
|
+
- rule: field_instance_from_code
|
|
10
|
+
reads: file
|
|
11
|
+
in:
|
|
12
|
+
- custom_module
|
|
13
|
+
match:
|
|
14
|
+
static_call: Drupal\field\Entity\FieldConfig::create
|
|
15
|
+
argument: 0
|
|
16
|
+
id: &id001
|
|
17
|
+
from:
|
|
18
|
+
- argument_key: entity_type
|
|
19
|
+
- argument_key: bundle
|
|
20
|
+
- argument_key: field_name
|
|
21
|
+
template: field.field.{entity_type}.{bundle}.{field_name}
|
|
22
|
+
on_miss: unresolved
|
|
23
|
+
emits:
|
|
24
|
+
- node:
|
|
25
|
+
type: drupal.field_instance
|
|
26
|
+
confidence: declared
|
|
27
|
+
- rule: field_instance_from_code_edges
|
|
28
|
+
reads: file
|
|
29
|
+
in:
|
|
30
|
+
- custom_module
|
|
31
|
+
match:
|
|
32
|
+
static_call: Drupal\field\Entity\FieldConfig::create
|
|
33
|
+
argument: 0
|
|
34
|
+
emits:
|
|
35
|
+
- edge:
|
|
36
|
+
kind: declares
|
|
37
|
+
from: enclosing_callable
|
|
38
|
+
to: this_node
|
|
39
|
+
confidence: declared
|
|
40
|
+
id: *id001
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
$schema: "https://periplus.dev/schema/0/pack-file.schema.json"
|
|
2
|
+
|
|
3
|
+
# drupal pack — field instance from a config file. One rule.
|
|
4
|
+
#
|
|
5
|
+
# The best example in the pack of a name carrying several facts at once, and so the case
|
|
6
|
+
# that earns the regex.
|
|
7
|
+
|
|
8
|
+
needs:
|
|
9
|
+
types:
|
|
10
|
+
- drupal.field_instance
|
|
11
|
+
- drupal.field_storage
|
|
12
|
+
- drupal.block_type
|
|
13
|
+
rules:
|
|
14
|
+
- rule: field_instance_from_config
|
|
15
|
+
reads: file
|
|
16
|
+
in:
|
|
17
|
+
- config
|
|
18
|
+
- module_config
|
|
19
|
+
match:
|
|
20
|
+
file: field.field.*
|
|
21
|
+
filetype: yaml
|
|
22
|
+
id: &id001
|
|
23
|
+
from: file_stem
|
|
24
|
+
emits:
|
|
25
|
+
- node:
|
|
26
|
+
type: drupal.field_instance
|
|
27
|
+
- attribute:
|
|
28
|
+
name: label
|
|
29
|
+
from:
|
|
30
|
+
key: label
|
|
31
|
+
confidence: declared
|
|
32
|
+
- rule: field_instance_from_config_edges
|
|
33
|
+
reads: file
|
|
34
|
+
in:
|
|
35
|
+
- config
|
|
36
|
+
- module_config
|
|
37
|
+
match:
|
|
38
|
+
file: field.field.*
|
|
39
|
+
filetype: yaml
|
|
40
|
+
emits:
|
|
41
|
+
- edge:
|
|
42
|
+
kind: stored_by
|
|
43
|
+
from: this_node
|
|
44
|
+
to:
|
|
45
|
+
from:
|
|
46
|
+
key: dependencies.config
|
|
47
|
+
where:
|
|
48
|
+
- matches: field.storage.*
|
|
49
|
+
- edge:
|
|
50
|
+
kind: field_of
|
|
51
|
+
from: this_node
|
|
52
|
+
to:
|
|
53
|
+
from:
|
|
54
|
+
- key: entity_type
|
|
55
|
+
- key: bundle
|
|
56
|
+
template: '{entity_type}.type.{bundle}'
|
|
57
|
+
confidence: declared
|
|
58
|
+
id: *id001
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
$schema: "https://periplus.dev/schema/0/pack-file.schema.json"
|
|
2
|
+
|
|
3
|
+
# drupal pack — declares field storage. Finds nothing.
|
|
4
|
+
#
|
|
5
|
+
# A storage is the field itself: its type, its cardinality, one per entity type. Many
|
|
6
|
+
# bundles point at one storage, and the fan-in is information the individual files do not
|
|
7
|
+
# carry.
|
|
8
|
+
#
|
|
9
|
+
# Verified in the export — one core storage, three instances, three different origins:
|
|
10
|
+
# field.storage.block_content.body core's own (_core hash at line 8)
|
|
11
|
+
# field.field.block_content.basic.body core's basic type
|
|
12
|
+
# field.field.block_content.block_ways_note.body block_ways config/install
|
|
13
|
+
# field.field.block_content.type_way_code.body added through the UI, label 'Body extra'
|
|
14
|
+
#
|
|
15
|
+
# The module's own storages are the opposite shape. field_tw_code_head has exactly one
|
|
16
|
+
# instance, and so does every other field the three test modules create.
|
|
17
|
+
|
|
18
|
+
node_types:
|
|
19
|
+
|
|
20
|
+
- name: drupal.field_storage
|
|
21
|
+
parent: drupal.config_object
|
|
22
|
+
|
|
23
|
+
- name: drupal.field_instance
|
|
24
|
+
parent: drupal.config_object
|
|
25
|
+
|
|
26
|
+
edge_kinds:
|
|
27
|
+
|
|
28
|
+
- kind: stored_by
|
|
29
|
+
from: drupal.field_instance
|
|
30
|
+
to: drupal.field_storage
|
|
31
|
+
|
|
32
|
+
- kind: field_of
|
|
33
|
+
from: drupal.field_instance
|
|
34
|
+
to: drupal.block_type
|
|
35
|
+
# Narrow on purpose. The bundle a field belongs to is an entity bundle, and block types
|
|
36
|
+
# are the only bundles this pack currently declares. When node types and media types
|
|
37
|
+
# arrive the endpoint list widens; it must not be guessed ahead of them.
|