elastic / kibana

Your window into the Elastic Stack
https://www.elastic.co/products/kibana
Other
19.71k stars 8.13k forks source link

Remove `any` from data plugin's public API #99519

Open stacey-gammon opened 3 years ago

stacey-gammon commented 3 years ago

any type is always a bad idea, but particularly in a public API item, and even more so if there are no comments.

Screen Shot 2021-05-06 at 2 11 28 PM

Data plugin has quite a few

Screen Shot 2021-05-06 at 2 14 29 PM

Run node scripts/build_api_docs --stats any --plugin data to get a list of every specific API item:

Screen Shot 2021-05-06 at 2 19 02 PM
elasticmachine commented 3 years ago

Pinging @elastic/kibana-app-services (Team:AppServices)

RA80533 commented 3 years ago

What's the first screenshot from?

stacey-gammon commented 3 years ago

@RA80533 - The meme? I found it on the interwebs 😄 Or are you referring to the visualization?

RA80533 commented 3 years ago

Visualization. I figured the meme was just a picture of the TypeScript compiler at work here in the project repo :eyes:

stacey-gammon commented 3 years ago

haha. :) The visualization is from an internal Kibana instance that tracks any types in a plugin's public API on each ci build (this code here).

mattkime commented 3 years ago
┌─────────┬─────────────────────────────────────────────────────────────────────────────┬──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐
│ (index) │                                     id                                      │                                                                   link                                                                   │
├─────────┼─────────────────────────────────────────────────────────────────────────────┼──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┤
│    0    │                       'def-public.KueryNode.Unnamed'                        │                   'https://github.com/elastic/kibana/tree/master/src/plugins/data/common/es_query/kuery/types.ts#L13'                    │
│    1    │                        'def-public.FieldFormat.type'                        │                'https://github.com/elastic/kibana/tree/master/src/plugins/data/common/field_formats/field_format.ts#L74'                 │
│    2    │                      'def-public.FieldFormat._params'                       │                'https://github.com/elastic/kibana/tree/master/src/plugins/data/common/field_formats/field_format.ts#L77'                 │
│    3    │                     'def-public.FieldFormat.convert.$1'                     │                'https://github.com/elastic/kibana/tree/master/src/plugins/data/common/field_formats/field_format.ts#L99'                 │
│    4    │             'def-public.FieldFormat.isInstanceOfFieldFormat.$1'             │                'https://github.com/elastic/kibana/tree/master/src/plugins/data/common/field_formats/field_format.ts#L204'                │
│    5    │                       'def-public.IFieldType.format'                        │                'https://github.com/elastic/kibana/tree/master/src/plugins/data/common/index_patterns/fields/types.ts#L30'                │
│    6    │                        'def-public.TypeMeta.Unnamed'                        │                   'https://github.com/elastic/kibana/tree/master/src/plugins/data/common/index_patterns/types.ts#L160'                   │
│    7    │              'def-public.QuerySuggestionGetFnArgs.boolFilter'               │     'https://github.com/elastic/kibana/tree/master/src/plugins/data/public/autocomplete/providers/query_suggestion_provider.ts#L32'      │
│    8    │                        'def-public.AggConfig.params'                        │                  'https://github.com/elastic/kibana/tree/master/src/plugins/data/common/search/aggs/agg_config.ts#L95'                   │
│    9    │                     'def-public.AggConfig.setParams.$1'                     │                  'https://github.com/elastic/kibana/tree/master/src/plugins/data/common/search/aggs/agg_config.ts#L134'                  │
│   10    │                     'def-public.AggConfig.getValue.$1'                      │                  'https://github.com/elastic/kibana/tree/master/src/plugins/data/common/search/aggs/agg_config.ts#L383'                  │
│   11    │                      'def-public.AggConfig.getKey.$1'                       │                  'https://github.com/elastic/kibana/tree/master/src/plugins/data/common/search/aggs/agg_config.ts#L387'                  │
│   12    │                  'def-public.SearchSourceFields.highlight'                  │                'https://github.com/elastic/kibana/tree/master/src/plugins/data/common/search/search_source/types.ts#L84'                 │
│   13    │                          'def-public.isEsError.$1'                          │                    'https://github.com/elastic/kibana/tree/master/src/plugins/data/public/search/errors/types.ts#L51'                    │
│   14    │                 'def-public.QueryStringInputProps.prepend'                  │         'https://github.com/elastic/kibana/tree/master/src/plugins/data/public/ui/query_string_input/query_string_input.tsx#L47'         │
│   15    │                       'def-server.KueryNode.Unnamed'                        │                   'https://github.com/elastic/kibana/tree/master/src/plugins/data/common/es_query/kuery/types.ts#L13'                    │
│   16    │ 'def-server.mergeCapabilitiesWithFields.$1.rollupIndexCapabilities.Unnamed' │ 'https://github.com/elastic/kibana/tree/master/src/plugins/data/server/index_patterns/fetcher/lib/merge_capabilities_with_fields.ts#L14' │
│   17    │ 'def-server.mergeCapabilitiesWithFields.$2.fieldsFromFieldCapsApi.Unnamed'  │ 'https://github.com/elastic/kibana/tree/master/src/plugins/data/server/index_patterns/fetcher/lib/merge_capabilities_with_fields.ts#L15' │
│   18    │       'def-server.getCapabilitiesForRollupIndices.$1.indices.Unnamed'       │        'https://github.com/elastic/kibana/tree/master/src/plugins/data/server/index_patterns/fetcher/lib/map_capabilities.ts#L11'        │
│   19    │                       'def-server.IFieldType.format'                        │                'https://github.com/elastic/kibana/tree/master/src/plugins/data/common/index_patterns/fields/types.ts#L30'                │
│   20    │                      'def-common.luceneStringToDsl.$1'                      │          'https://github.com/elastic/kibana/tree/master/src/plugins/data/common/es_query/es_query/lucene_string_to_dsl.ts#L12'           │
│   21    │                         'def-common.buildFilter.$6'                         │              'https://github.com/elastic/kibana/tree/master/src/plugins/data/common/es_query/filters/build_filters.ts#L27'               │
│   22    │                      'def-common.buildCustomFilter.$2'                      │              'https://github.com/elastic/kibana/tree/master/src/plugins/data/common/es_query/filters/build_filters.ts#L43'               │
│   23    │                   'def-common.FilterExistsProperty.field'                   │              'https://github.com/elastic/kibana/tree/master/src/plugins/data/common/es_query/filters/exists_filter.ts#L15'               │
│   24    │                       'def-common.isExistsFilter.$1'                        │              'https://github.com/elastic/kibana/tree/master/src/plugins/data/common/es_query/filters/exists_filter.ts#L23'               │
│   25    │                   'def-common.isGeoBoundingBoxFilter.$1'                    │         'https://github.com/elastic/kibana/tree/master/src/plugins/data/common/es_query/filters/geo_bounding_box_filter.ts#L23'          │
│   26    │                     'def-common.isGeoPolygonFilter.$1'                      │            'https://github.com/elastic/kibana/tree/master/src/plugins/data/common/es_query/filters/geo_polygon_filter.ts#L22'            │
│   27    │                    'def-common.MatchAllFilterMeta.field'                    │             'https://github.com/elastic/kibana/tree/master/src/plugins/data/common/es_query/filters/match_all_filter.ts#L12'             │
│   28    │                      'def-common.isMatchAllFilter.$1'                       │             'https://github.com/elastic/kibana/tree/master/src/plugins/data/common/es_query/filters/match_all_filter.ts#L21'             │
│   29    │                       'def-common.isMissingFilter.$1'                       │              'https://github.com/elastic/kibana/tree/master/src/plugins/data/common/es_query/filters/missing_filter.ts#L18'              │
│   30    │                       'def-common.isPhraseFilter.$1'                        │              'https://github.com/elastic/kibana/tree/master/src/plugins/data/common/es_query/filters/phrase_filter.ts#L34'               │
│   31    │                   'def-common.isScriptedPhraseFilter.$1'                    │              'https://github.com/elastic/kibana/tree/master/src/plugins/data/common/es_query/filters/phrase_filter.ts#L46'               │
│   32    │                      'def-common.buildPhraseFilter.$2'                      │              'https://github.com/elastic/kibana/tree/master/src/plugins/data/common/es_query/filters/phrase_filter.ts#L62'               │
│   33    │                       'def-common.isPhrasesFilter.$1'                       │              'https://github.com/elastic/kibana/tree/master/src/plugins/data/common/es_query/filters/phrases_filter.ts#L23'              │
│   34    │                     'def-common.isQueryStringFilter.$1'                     │           'https://github.com/elastic/kibana/tree/master/src/plugins/data/common/es_query/filters/query_string_filter.ts#L22'            │
│   35    │                      'def-common.buildQueryFilter.$1'                       │           'https://github.com/elastic/kibana/tree/master/src/plugins/data/common/es_query/filters/query_string_filter.ts#L26'            │
│   36    │                        'def-common.isRangeFilter.$1'                        │               'https://github.com/elastic/kibana/tree/master/src/plugins/data/common/es_query/filters/range_filter.ts#L73'               │
│   37    │                    'def-common.isScriptedRangeFilter.$1'                    │               'https://github.com/elastic/kibana/tree/master/src/plugins/data/common/es_query/filters/range_filter.ts#L75'               │
│   38    │                   'def-common.KQLSyntaxError.Unnamed.$2'                    │             'https://github.com/elastic/kibana/tree/master/src/plugins/data/common/es_query/kuery/kuery_syntax_error.ts#L44'             │
│   39    │                    'def-common.fromLiteralExpression.$1'                    │                  'https://github.com/elastic/kibana/tree/master/src/plugins/data/common/es_query/kuery/ast/ast.ts#L31'                   │
│   40    │                     'def-common.fromKueryExpression.$1'                     │                  'https://github.com/elastic/kibana/tree/master/src/plugins/data/common/es_query/kuery/ast/ast.ts#L45'                   │
│   41    │                       'def-common.KueryNode.Unnamed'                        │                   'https://github.com/elastic/kibana/tree/master/src/plugins/data/common/es_query/kuery/types.ts#L13'                    │
│   42    │          'def-common.FieldFormatsRegistry.parseDefaultTypeMap.$1'           │           'https://github.com/elastic/kibana/tree/master/src/plugins/data/common/field_formats/field_formats_registry.ts#L244'           │
│   43    │                        'def-common.FieldFormat.type'                        │                'https://github.com/elastic/kibana/tree/master/src/plugins/data/common/field_formats/field_format.ts#L74'                 │
│   44    │                      'def-common.FieldFormat._params'                       │                'https://github.com/elastic/kibana/tree/master/src/plugins/data/common/field_formats/field_format.ts#L77'                 │
│   45    │                     'def-common.FieldFormat.convert.$1'                     │                'https://github.com/elastic/kibana/tree/master/src/plugins/data/common/field_formats/field_format.ts#L99'                 │
│   46    │             'def-common.FieldFormat.isInstanceOfFieldFormat.$1'             │                'https://github.com/elastic/kibana/tree/master/src/plugins/data/common/field_formats/field_format.ts#L204'                │
│   47    │                   'def-common.BoolFormat.textConvert.$1'                    │             'https://github.com/elastic/kibana/tree/master/src/plugins/data/common/field_formats/converters/boolean.ts#L22'              │
│   48    │               'def-common.ColorFormat.findColorRuleForVal.$1'               │              'https://github.com/elastic/kibana/tree/master/src/plugins/data/common/field_formats/converters/color.tsx#L33'              │
│   49    │                   'def-common.ColorFormat.htmlConvert.$1'                   │              'https://github.com/elastic/kibana/tree/master/src/plugins/data/common/field_formats/converters/color.tsx#L52'              │
│   50    │                 'def-common.DurationFormat.textConvert.$1'                  │            'https://github.com/elastic/kibana/tree/master/src/plugins/data/common/field_formats/converters/duration.ts#L178'             │
│   51    │                    'def-common.IpFormat.textConvert.$1'                     │                'https://github.com/elastic/kibana/tree/master/src/plugins/data/common/field_formats/converters/ip.ts#L21'                │
│   52    │                  'def-common.PercentFormat.textConvert.$1'                  │             'https://github.com/elastic/kibana/tree/master/src/plugins/data/common/field_formats/converters/percent.ts#L29'              │
│   53    │               'def-common.RelativeDateFormat.textConvert.$1'                │          'https://github.com/elastic/kibana/tree/master/src/plugins/data/common/field_formats/converters/relative_date.ts#L22'           │
│   54    │                  'def-common.SourceFormat.textConvert.$1'                   │             'https://github.com/elastic/kibana/tree/master/src/plugins/data/common/field_formats/converters/source.tsx#L43'              │
│   55    │                  'def-common.SourceFormat.htmlConvert.$1'                   │             'https://github.com/elastic/kibana/tree/master/src/plugins/data/common/field_formats/converters/source.tsx#L45'              │
│   56    │               'def-common.StaticLookupFormat.textConvert.$1'                │          'https://github.com/elastic/kibana/tree/master/src/plugins/data/common/field_formats/converters/static_lookup.ts#L43'           │
│   57    │                    'def-common.UrlFormat.textConvert.$1'                    │               'https://github.com/elastic/kibana/tree/master/src/plugins/data/common/field_formats/converters/url.ts#L131'               │
│   58    │                    'def-common.UrlFormat.htmlConvert.$1'                    │               'https://github.com/elastic/kibana/tree/master/src/plugins/data/common/field_formats/converters/url.ts#L133'               │
│   59    │                  'def-common.StringFormat.textConvert.$1'                   │             'https://github.com/elastic/kibana/tree/master/src/plugins/data/common/field_formats/converters/string.ts#L105'              │
│   60    │                 'def-common.TruncateFormat.textConvert.$1'                  │             'https://github.com/elastic/kibana/tree/master/src/plugins/data/common/field_formats/converters/truncate.ts#L24'             │
│   61    │                 'def-common.HistogramFormat.textConvert.$1'                 │            'https://github.com/elastic/kibana/tree/master/src/plugins/data/common/field_formats/converters/histogram.ts#L36'             │
│   62    │                     'def-common.getHighlightRequest.$1'                     │      'https://github.com/elastic/kibana/tree/master/src/plugins/data/common/field_formats/utils/highlight/highlight_request.ts#L13'      │
│   63    │                       'def-common.IFieldType.format'                        │                'https://github.com/elastic/kibana/tree/master/src/plugins/data/common/index_patterns/fields/types.ts#L30'                │
│   64    │                       'def-common.FieldAttrs.Unnamed'                       │                   'https://github.com/elastic/kibana/tree/master/src/plugins/data/common/index_patterns/types.ts#L75'                    │
│   65    │                        'def-common.TypeMeta.Unnamed'                        │                   'https://github.com/elastic/kibana/tree/master/src/plugins/data/common/index_patterns/types.ts#L160'                   │
│   66    │                         'def-common.uniqFilters.$2'                         │             'https://github.com/elastic/kibana/tree/master/src/plugins/data/common/query/filter_manager/uniq_filters.ts#L21'             │
│   67    │                        'def-common.AggConfig.params'                        │                  'https://github.com/elastic/kibana/tree/master/src/plugins/data/common/search/aggs/agg_config.ts#L95'                   │
│   68    │                     'def-common.AggConfig.setParams.$1'                     │                  'https://github.com/elastic/kibana/tree/master/src/plugins/data/common/search/aggs/agg_config.ts#L134'                  │
│   69    │                     'def-common.AggConfig.getValue.$1'                      │                  'https://github.com/elastic/kibana/tree/master/src/plugins/data/common/search/aggs/agg_config.ts#L383'                  │
│   70    │                      'def-common.AggConfig.getKey.$1'                       │                  'https://github.com/elastic/kibana/tree/master/src/plugins/data/common/search/aggs/agg_config.ts#L387'                  │
│   71    │                     'def-common.AggTypeConfig.ordered'                      │                   'https://github.com/elastic/kibana/tree/master/src/plugins/data/common/search/aggs/agg_type.ts#L44'                    │
│   72    │                        'def-common.AggType.ordered'                         │                   'https://github.com/elastic/kibana/tree/master/src/plugins/data/common/search/aggs/agg_type.ts#L127'                   │
│   73    │                       'def-common.isBucketAggType.$1'                       │            'https://github.com/elastic/kibana/tree/master/src/plugins/data/common/search/aggs/buckets/bucket_agg_type.ts#L49'            │
│   74    │               'def-common.isDateHistogramBucketAggConfig.$1'                │            'https://github.com/elastic/kibana/tree/master/src/plugins/data/common/search/aggs/buckets/date_histogram.ts#L57'             │
│   75    │                       'def-common.isMetricAggType.$1'                       │            'https://github.com/elastic/kibana/tree/master/src/plugins/data/common/search/aggs/metrics/metric_agg_type.ts#L75'            │
│   76    │                     'def-common.BaseParamType.default'                      │               'https://github.com/elastic/kibana/tree/master/src/plugins/data/common/search/aggs/param_types/base.ts#L20'                │
│   77    │                    'def-common.BaseParamType.valueType'                     │               'https://github.com/elastic/kibana/tree/master/src/plugins/data/common/search/aggs/param_types/base.ts#L31'                │
│   78    │                  'def-common.SearchSourceFields.highlight'                  │                'https://github.com/elastic/kibana/tree/master/src/plugins/data/common/search/search_source/types.ts#L84'                 │
│   79    │                     'def-common.shortenDottedString.$1'                     │                'https://github.com/elastic/kibana/tree/master/src/plugins/data/common/utils/shorten_dotted_string.ts#L17'                │
└─────────┴─────────────────────────────────────────────────────────────────────────────┴──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘
elasticmachine commented 8 months ago

Pinging @elastic/kibana-data-discovery (Team:DataDiscovery)

elasticmachine commented 8 months ago

Pinging @elastic/kibana-visualizations (Team:Visualizations)

kertal commented 8 months ago

adding @elastic/kibana-visualizations since we share this plugin together, we could also split this issue, 2 knights , or 2 knights with 2 arrows. result of @davismcphee running the command:

┌─────────┬────────────────────────────────────────────────────────────┬───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐
│ (index) │                             id                             │                                                               link                                                                │
├─────────┼────────────────────────────────────────────────────────────┼───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┤
│    0    │              'def-public.generateFilters.$3'               │ 'https://github.com/elastic/kibana/tree/main/src/plugins/data/public/query/filter_manager/lib/generate_filters.ts#:~:text=values' │
│    1    │               'def-public.AggConfig.params'                │          'https://github.com/elastic/kibana/tree/main/src/plugins/data/common/search/aggs/agg_config.ts#:~:text=params'           │
│    2    │            'def-public.AggConfig.setParams.$1'             │           'https://github.com/elastic/kibana/tree/main/src/plugins/data/common/search/aggs/agg_config.ts#:~:text=from'            │
│    3    │             'def-public.AggConfig.getValue.$1'             │          'https://github.com/elastic/kibana/tree/main/src/plugins/data/common/search/aggs/agg_config.ts#:~:text=bucket'           │
│    4    │              'def-public.AggConfig.getKey.$1'              │          'https://github.com/elastic/kibana/tree/main/src/plugins/data/common/search/aggs/agg_config.ts#:~:text=bucket'           │
│    5    │         'def-public.SearchSourceFields.highlight'          │       'https://github.com/elastic/kibana/tree/main/src/plugins/data/common/search/search_source/types.ts#:~:text=highlight'       │
│    6    │ 'def-public.search.aggs.isDateHistogramBucketAggConfig.$1' │      'https://github.com/elastic/kibana/tree/main/src/plugins/data/common/search/aggs/buckets/date_histogram.ts#:~:text=agg'      │
│    7    │              'def-public.PersistedLog.add.$1'              │      'https://github.com/elastic/kibana/tree/main/src/plugins/data/public/query/persisted_log/persisted_log.ts#:~:text=val'       │
│    8    │               'def-common.AggConfig.params'                │          'https://github.com/elastic/kibana/tree/main/src/plugins/data/common/search/aggs/agg_config.ts#:~:text=params'           │
│    9    │            'def-common.AggConfig.setParams.$1'             │           'https://github.com/elastic/kibana/tree/main/src/plugins/data/common/search/aggs/agg_config.ts#:~:text=from'            │
│   10    │             'def-common.AggConfig.getValue.$1'             │          'https://github.com/elastic/kibana/tree/main/src/plugins/data/common/search/aggs/agg_config.ts#:~:text=bucket'           │
│   11    │              'def-common.AggConfig.getKey.$1'              │          'https://github.com/elastic/kibana/tree/main/src/plugins/data/common/search/aggs/agg_config.ts#:~:text=bucket'           │
│   12    │         'def-common.AggTypeConfig.createFilter.$2'         │             'https://github.com/elastic/kibana/tree/main/src/plugins/data/common/search/aggs/agg_type.ts#:~:text=key'             │
│   13    │         'def-common.AggTypeConfig.createFilter.$3'         │           'https://github.com/elastic/kibana/tree/main/src/plugins/data/common/search/aggs/agg_type.ts#:~:text=params'            │
│   14    │             'def-common.AggTypeConfig.ordered'             │           'https://github.com/elastic/kibana/tree/main/src/plugins/data/common/search/aggs/agg_type.ts#:~:text=ordered'           │
│   15    │           'def-common.AggTypeConfig.getValue.$2'           │           'https://github.com/elastic/kibana/tree/main/src/plugins/data/common/search/aggs/agg_type.ts#:~:text=bucket'            │
│   16    │            'def-common.AggTypeConfig.getKey.$1'            │           'https://github.com/elastic/kibana/tree/main/src/plugins/data/common/search/aggs/agg_type.ts#:~:text=bucket'            │
│   17    │            'def-common.AggTypeConfig.getKey.$2'            │             'https://github.com/elastic/kibana/tree/main/src/plugins/data/common/search/aggs/agg_type.ts#:~:text=key'             │
│   18    │                'def-common.AggType.ordered'                │           'https://github.com/elastic/kibana/tree/main/src/plugins/data/common/search/aggs/agg_type.ts#:~:text=ordered'           │
│   19    │              'def-common.AggType.getValue.$2'              │           'https://github.com/elastic/kibana/tree/main/src/plugins/data/common/search/aggs/agg_type.ts#:~:text=bucket'            │
│   20    │              'def-common.isBucketAggType.$1'               │  'https://github.com/elastic/kibana/tree/main/src/plugins/data/common/search/aggs/buckets/bucket_agg_type.ts#:~:text=aggConfig'   │
│   21    │            'def-common.BucketAggType.getKey.$1'            │    'https://github.com/elastic/kibana/tree/main/src/plugins/data/common/search/aggs/buckets/bucket_agg_type.ts#:~:text=bucket'    │
│   22    │            'def-common.BucketAggType.getKey.$2'            │     'https://github.com/elastic/kibana/tree/main/src/plugins/data/common/search/aggs/buckets/bucket_agg_type.ts#:~:text=key'      │
│   23    │       'def-common.isDateHistogramBucketAggConfig.$1'       │      'https://github.com/elastic/kibana/tree/main/src/plugins/data/common/search/aggs/buckets/date_histogram.ts#:~:text=agg'      │
│   24    │              'def-common.isMetricAggType.$1'               │  'https://github.com/elastic/kibana/tree/main/src/plugins/data/common/search/aggs/metrics/metric_agg_type.ts#:~:text=aggConfig'   │
│   25    │             'def-common.BaseParamType.default'             │       'https://github.com/elastic/kibana/tree/main/src/plugins/data/common/search/aggs/param_types/base.ts#:~:text=default'       │
│   26    │          'def-common.BaseParamType.serialize.$1'           │        'https://github.com/elastic/kibana/tree/main/src/plugins/data/common/search/aggs/param_types/base.ts#:~:text=value'        │
│   27    │         'def-common.BaseParamType.deserialize.$1'          │        'https://github.com/elastic/kibana/tree/main/src/plugins/data/common/search/aggs/param_types/base.ts#:~:text=value'        │
│   28    │     'def-common.getEsdslFn.$1.getStartDependencies.$1'     │    'https://github.com/elastic/kibana/tree/main/src/plugins/data/common/search/expressions/esdsl.ts#:~:text=getKibanaRequest'     │
│   29    │      'def-common.getEqlFn.$1.getStartDependencies.$1'      │     'https://github.com/elastic/kibana/tree/main/src/plugins/data/common/search/expressions/eql.ts#:~:text=getKibanaRequest'      │
│   30    │         'def-common.SearchSourceFields.highlight'          │       'https://github.com/elastic/kibana/tree/main/src/plugins/data/common/search/search_source/types.ts#:~:text=highlight'       │