@eventcatalog/core 4.2.2 → 4.2.4

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.
Files changed (68) hide show
  1. package/dist/analytics/analytics.cjs +1 -1
  2. package/dist/analytics/analytics.js +2 -2
  3. package/dist/analytics/log-build.cjs +1 -1
  4. package/dist/analytics/log-build.js +3 -3
  5. package/dist/{chunk-Z2CMR4HM.js → chunk-5MIGBCON.js} +1 -1
  6. package/dist/{chunk-ZGQNCIRW.js → chunk-BXEGST4Z.js} +1 -1
  7. package/dist/{chunk-HIQ22EHS.js → chunk-GCEFDCZB.js} +1 -1
  8. package/dist/{chunk-A5LDEHRI.js → chunk-J2MVHSKA.js} +1 -1
  9. package/dist/{chunk-JV33GNVZ.js → chunk-WVIOZDVK.js} +1 -1
  10. package/dist/constants.cjs +1 -1
  11. package/dist/constants.js +1 -1
  12. package/dist/docs/development/00-why-eventcatalog.md +8 -8
  13. package/dist/docs/development/01-fundamentals.md +15 -12
  14. package/dist/docs/development/bring-your-own-documentation/diagrams/07-reference.md +4 -0
  15. package/dist/docs/development/components/components/07-custom-properties.md +85 -0
  16. package/dist/docs/development/components/components/{07-design.md → 08-design.md} +1 -1
  17. package/dist/docs/development/components/components/{08-entitymap.md → 09-entitymap.md} +2 -2
  18. package/dist/docs/development/components/components/{09-flow.md → 10-flow.md} +1 -1
  19. package/dist/docs/development/components/components/{10-link.md → 11-link.md} +1 -1
  20. package/dist/docs/development/components/components/{11-mermaid-file-loader.md → 12-mermaid-file-loader.md} +1 -1
  21. package/dist/docs/development/components/components/{12-message-table.md → 13-message-table.md} +1 -1
  22. package/dist/docs/development/components/components/{13-nodegraph.md → 14-nodegraph.md} +1 -2
  23. package/dist/docs/development/components/components/{14-openapi.md → 15-openapi.md} +1 -1
  24. package/dist/docs/development/components/components/{15-prompt.md → 16-prompt.md} +1 -1
  25. package/dist/docs/development/components/components/{16-remote-schema.md → 17-remote-schema.md} +1 -1
  26. package/dist/docs/development/components/components/{17-resource-group-table.md → 18-resource-group-table.md} +1 -1
  27. package/dist/docs/development/components/components/{18-resource-link.md → 19-resource-link.md} +1 -1
  28. package/dist/docs/development/components/components/{19-schema.md → 20-schema.md} +1 -1
  29. package/dist/docs/development/components/components/{20-schema-viewer.md → 21-schema-viewer.md} +1 -1
  30. package/dist/docs/development/components/components/{21-steps.md → 22-steps.md} +1 -1
  31. package/dist/docs/development/components/components/{22-tabs.md → 23-tabs.md} +1 -1
  32. package/dist/docs/development/components/components/{23-tiles.md → 24-tiles.md} +1 -1
  33. package/dist/docs/development/components/components/{24-visibility.md → 25-visibility.md} +1 -1
  34. package/dist/docs/development/customization/02-themes.md +1 -1
  35. package/dist/docs/development/customization/06-customize-tables.md +1 -1
  36. package/dist/docs/development/customization/07-resource-icons.md +1 -1
  37. package/dist/docs/development/customization/08-custom-properties.md +176 -0
  38. package/dist/docs/development/customization/customize-visualizer/_category_.json +1 -1
  39. package/dist/docs/development/deployment/build-ssr-mode.md +9 -1
  40. package/dist/docs/development/guides/domains/09-reference.md +4 -0
  41. package/dist/docs/development/guides/resources/adrs/06-reference.md +4 -0
  42. package/dist/docs/development/guides/resources/agents/11-reference.md +4 -0
  43. package/dist/docs/development/guides/resources/data/04-reference.md +4 -0
  44. package/dist/docs/development/guides/resources/data-products/07-reference.md +4 -0
  45. package/dist/docs/development/guides/resources/entities/06-reference.md +4 -0
  46. package/dist/docs/development/guides/resources/flows/06-reference.md +4 -0
  47. package/dist/docs/development/guides/resources/messages/04-connect-messages/02-shared-messages-across-boundaries.md +1 -0
  48. package/dist/docs/development/guides/resources/messages/04-connect-messages/04-map-commands-to-events.md +95 -0
  49. package/dist/docs/development/guides/resources/messages/04-message-channels/05-reference.md +4 -0
  50. package/dist/docs/development/guides/resources/messages/10-reference.md +4 -0
  51. package/dist/docs/development/guides/resources/services/08-reference.md +12 -0
  52. package/dist/docs/development/guides/systems/06-reference.md +4 -0
  53. package/dist/eventcatalog.cjs +1 -1
  54. package/dist/eventcatalog.js +5 -5
  55. package/dist/generate.cjs +1 -1
  56. package/dist/generate.js +3 -3
  57. package/dist/utils/cli-logger.cjs +1 -1
  58. package/dist/utils/cli-logger.js +2 -2
  59. package/eventcatalog/src/components/MDX/CustomProperties/CustomProperties.astro +39 -0
  60. package/eventcatalog/src/components/MDX/CustomProperties/CustomProperty.astro +37 -0
  61. package/eventcatalog/src/components/MDX/CustomProperties/CustomPropertyRow.astro +37 -0
  62. package/eventcatalog/src/components/MDX/CustomProperties/CustomPropertyValue.astro +51 -0
  63. package/eventcatalog/src/components/MDX/CustomProperties/custom-properties.spec.ts +38 -0
  64. package/eventcatalog/src/components/MDX/CustomProperties/custom-properties.ts +39 -0
  65. package/eventcatalog/src/components/MDX/components.tsx +4 -0
  66. package/eventcatalog/src/content.config.ts +402 -373
  67. package/eventcatalog/src/utils/collections/extension-properties.ts +25 -0
  68. package/package.json +12 -12
@@ -0,0 +1,51 @@
1
+ ---
2
+ import { formatCustomPropertyLabel } from './custom-properties';
3
+
4
+ interface Props {
5
+ value: unknown;
6
+ }
7
+
8
+ const { value } = Astro.props;
9
+ const isArray = Array.isArray(value);
10
+ const isDate = value instanceof Date;
11
+ const isObject = value !== null && typeof value === 'object' && !isArray && !isDate;
12
+ const entries = isObject ? Object.entries(value as Record<string, unknown>) : [];
13
+ const scalarValue = value === null || value === undefined ? '—' : isDate ? value.toISOString() : String(value);
14
+ ---
15
+
16
+ {
17
+ isArray ? (
18
+ value.length > 0 ? (
19
+ <ul class="m-0 list-disc space-y-1 pl-5 text-[rgb(var(--ec-page-text))]">
20
+ {value.map((item) => (
21
+ <li>
22
+ <Astro.self value={item} />
23
+ </li>
24
+ ))}
25
+ </ul>
26
+ ) : (
27
+ <span class="text-[rgb(var(--ec-page-text-muted))]">—</span>
28
+ )
29
+ ) : isObject ? (
30
+ entries.length > 0 ? (
31
+ <dl class="m-0 space-y-2">
32
+ {entries.map(([name, nestedValue]) => (
33
+ <div class="grid gap-1 sm:grid-cols-[minmax(0,10rem)_minmax(0,1fr)]">
34
+ <dt class="font-medium text-[rgb(var(--ec-page-text-muted))]">{formatCustomPropertyLabel(name)}</dt>
35
+ <dd class="m-0 min-w-0 text-[rgb(var(--ec-page-text))]">
36
+ <Astro.self value={nestedValue} />
37
+ </dd>
38
+ </div>
39
+ ))}
40
+ </dl>
41
+ ) : (
42
+ <span class="text-[rgb(var(--ec-page-text-muted))]">—</span>
43
+ )
44
+ ) : typeof value === 'boolean' ? (
45
+ <span class="inline-flex rounded-full bg-[rgb(var(--ec-content-hover))] px-2 py-0.5 text-xs font-medium text-[rgb(var(--ec-page-text))]">
46
+ {scalarValue}
47
+ </span>
48
+ ) : (
49
+ <span class="break-words text-[rgb(var(--ec-page-text))]">{scalarValue}</span>
50
+ )
51
+ }
@@ -0,0 +1,38 @@
1
+ import { describe, expect, it } from 'vitest';
2
+ import { formatCustomPropertyLabel, getCustomProperties, getCustomProperty, isCustomPropertyName } from './custom-properties';
3
+
4
+ describe('custom properties MDX components', () => {
5
+ it('recognizes extension property names', () => {
6
+ expect(isCustomPropertyName('x-owner')).toBe(true);
7
+ expect(isCustomPropertyName('x-')).toBe(false);
8
+ expect(isCustomPropertyName('owner')).toBe(false);
9
+ });
10
+
11
+ it('creates a readable label without changing uppercase text', () => {
12
+ expect(formatCustomPropertyLabel('x-operational-tier')).toBe('Operational Tier');
13
+ expect(formatCustomPropertyLabel('x-PII_classification')).toBe('PII Classification');
14
+ });
15
+
16
+ it('extracts only custom properties and preserves their values', () => {
17
+ const properties = getCustomProperties({
18
+ id: 'payment-api',
19
+ 'x-operational-tier': 1,
20
+ 'x-on-call': { schedule: 'payments-primary' },
21
+ });
22
+
23
+ expect(properties).toEqual([
24
+ { name: 'x-operational-tier', label: 'Operational Tier', value: 1 },
25
+ { name: 'x-on-call', label: 'On Call', value: { schedule: 'payments-primary' } },
26
+ ]);
27
+ });
28
+
29
+ it('gets a named custom property', () => {
30
+ expect(getCustomProperty({ 'x-owner': 'payments' }, 'x-owner')).toEqual({
31
+ name: 'x-owner',
32
+ label: 'Owner',
33
+ value: 'payments',
34
+ });
35
+ expect(getCustomProperty({ owner: 'payments' }, 'owner')).toBeUndefined();
36
+ expect(getCustomProperty({ 'x-owner': 'payments' }, 'x-missing')).toBeUndefined();
37
+ });
38
+ });
@@ -0,0 +1,39 @@
1
+ export type CustomProperty = {
2
+ name: string;
3
+ label: string;
4
+ value: unknown;
5
+ };
6
+
7
+ export const isCustomPropertyName = (name: string) => name.startsWith('x-') && name.length > 2;
8
+
9
+ export const formatCustomPropertyLabel = (name: string) => {
10
+ const propertyName = isCustomPropertyName(name) ? name.slice(2) : name;
11
+
12
+ return propertyName
13
+ .split(/[-_.\s]+/)
14
+ .filter(Boolean)
15
+ .map((part) => `${part.charAt(0).toUpperCase()}${part.slice(1)}`)
16
+ .join(' ');
17
+ };
18
+
19
+ export const getCustomProperties = (data?: Record<string, unknown>): CustomProperty[] => {
20
+ if (!data) return [];
21
+
22
+ return Object.entries(data)
23
+ .filter(([name]) => isCustomPropertyName(name))
24
+ .map(([name, value]) => ({
25
+ name,
26
+ label: formatCustomPropertyLabel(name),
27
+ value,
28
+ }));
29
+ };
30
+
31
+ export const getCustomProperty = (data: Record<string, unknown> | undefined, name: string): CustomProperty | undefined => {
32
+ if (!data || !isCustomPropertyName(name) || !Object.prototype.hasOwnProperty.call(data, name)) return undefined;
33
+
34
+ return {
35
+ name,
36
+ label: formatCustomPropertyLabel(name),
37
+ value: data[name],
38
+ };
39
+ };
@@ -41,6 +41,8 @@ import SchemaViewerPortal from '@components/MDX/SchemaViewer/SchemaViewerPortal'
41
41
  import { jsx } from 'astro/jsx-runtime';
42
42
  import RemoteSchema from '@components/MDX/RemoteSchema.astro';
43
43
  import Visibility from '@components/MDX/Visibility';
44
+ import CustomProperties from '@components/MDX/CustomProperties/CustomProperties.astro';
45
+ import CustomProperty from '@components/MDX/CustomProperties/CustomProperty.astro';
44
46
 
45
47
  const getEntityMapCollection = (props: any, mdxProp: any) => {
46
48
  const collection = mdxProp.collection ?? props.collection;
@@ -50,6 +52,8 @@ const getEntityMapCollection = (props: any, mdxProp: any) => {
50
52
  const components = (props: any) => {
51
53
  return {
52
54
  Attachments: (mdxProp: any) => jsx(Attachments, { ...props, ...mdxProp }),
55
+ CustomProperties: (mdxProp: any) => jsx(CustomProperties, { ...props, ...mdxProp }),
56
+ CustomProperty: (mdxProp: any) => jsx(CustomProperty, { ...props, ...mdxProp }),
53
57
  Accordion,
54
58
  AccordionGroup,
55
59
  Admonition,