@eventcatalog/core 1.2.6 → 2.0.0
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.
- package/.changeset/config.json +11 -0
- package/.github/CODEOWNERS +3 -0
- package/.github/ISSUE_TEMPLATE.md +1 -0
- package/.github/PULL_REQUEST_TEMPLATE.md +18 -0
- package/.github/funding.yml +1 -0
- package/.github/workflows/lint.yml +22 -0
- package/.github/workflows/release.yml +34 -0
- package/.github/workflows/verify-build.yml +27 -0
- package/.prettierignore +7 -0
- package/.prettierrc +10 -0
- package/CHANGELOG.md +10 -571
- package/LICENSE.md +21 -0
- package/README.md +192 -5
- package/astro.config.mjs +57 -0
- package/bin/dist/eventcatalog.cjs +3139 -0
- package/bin/dist/eventcatalog.d.cts +1 -0
- package/bin/dist/eventcatalog.d.ts +1 -0
- package/bin/dist/eventcatalog.js +3141 -0
- package/images/example.png +0 -0
- package/package.json +59 -52
- package/public/icons/github.svg +1 -0
- package/public/icons/x-twitter.svg +1 -0
- package/public/logo.png +0 -0
- package/public/slack-icon.svg +1 -0
- package/scripts/build-ci.js +22 -0
- package/scripts/catalog-to-astro-content-directory.js +188 -0
- package/scripts/default-files-for-collections/commands.md +8 -0
- package/scripts/default-files-for-collections/domains.md +8 -0
- package/scripts/default-files-for-collections/events.md +8 -0
- package/scripts/default-files-for-collections/services.md +8 -0
- package/scripts/default-files-for-collections/teams.md +11 -0
- package/scripts/default-files-for-collections/users.md +11 -0
- package/scripts/start-catalog-locally.js +23 -0
- package/scripts/watcher.js +53 -0
- package/src/components/DocsNavigation.astro +110 -0
- package/src/components/Header.astro +65 -0
- package/src/components/Lists/BasicList.tsx +59 -0
- package/src/components/Lists/OwnersList.tsx +101 -0
- package/src/components/Lists/PillList.tsx +67 -0
- package/src/components/Lists/VersionList.astro +29 -0
- package/src/components/MDX/Accordion/Accordion.astro +10 -0
- package/src/components/MDX/Accordion/Accordion.tsx +29 -0
- package/src/components/MDX/Accordion/AccordionGroup.astro +16 -0
- package/{components/Mdx → src/components/MDX}/Admonition.tsx +6 -5
- package/src/components/MDX/File.tsx +43 -0
- package/src/components/MDX/NodeGraph/DownloadButton.tsx +58 -0
- package/src/components/MDX/NodeGraph/NodeGraph.astro +82 -0
- package/src/components/MDX/NodeGraph/NodeGraph.tsx +135 -0
- package/src/components/MDX/NodeGraph/NodeGraphPortal.tsx +15 -0
- package/src/components/MDX/NodeGraph/Nodes/Command.tsx +74 -0
- package/src/components/MDX/NodeGraph/Nodes/Event.tsx +74 -0
- package/src/components/MDX/NodeGraph/Nodes/Service.tsx +83 -0
- package/src/components/MDX/OpenAPI/OpenAPI.tsx +35 -0
- package/src/components/MDX/Schema.tsx +45 -0
- package/src/components/MDX/components.tsx +24 -0
- package/src/components/Search.astro +108 -0
- package/src/components/Seo.astro +79 -0
- package/src/components/SideBars/DomainSideBar.astro +42 -0
- package/src/components/SideBars/MessageSideBar.astro +81 -0
- package/src/components/SideBars/ServiceSideBar.astro +93 -0
- package/src/components/Tables/DebouncedInput.tsx +32 -0
- package/src/components/Tables/Table.tsx +228 -0
- package/src/components/Tables/columns/DomainTableColumns.tsx +118 -0
- package/src/components/Tables/columns/MessageTableColumns.tsx +159 -0
- package/src/components/Tables/columns/ServiceTableColumns.tsx +162 -0
- package/src/components/Tables/columns/index.tsx +17 -0
- package/src/components/Tables/filters/custom-filters.ts +14 -0
- package/src/content/config.ts +119 -0
- package/src/env.d.ts +2 -0
- package/src/layouts/CustomDocsPageLayout.astro +100 -0
- package/src/layouts/DiscoverLayout.astro +120 -0
- package/src/layouts/DocsLayout.astro +59 -0
- package/src/layouts/PlainPage.astro +29 -0
- package/src/layouts/VisualiserLayout.astro +73 -0
- package/src/pages/discover/[type]/index.astro +36 -0
- package/src/pages/docs/[type]/[id]/[version]/index.astro +215 -0
- package/src/pages/docs/[type]/[id]/[version]/spec/index.astro +93 -0
- package/src/pages/docs/index.md +4 -0
- package/src/pages/docs/teams/[id]/index.astro +127 -0
- package/src/pages/docs/users/[id]/index.astro +132 -0
- package/src/pages/visualiser/[type]/[id]/[version]/index.astro +46 -0
- package/src/pages/visualiser/index.astro +25 -0
- package/src/remark-plugins/mermaid.ts +27 -0
- package/src/remark-plugins/remark-modified-time.mjs +9 -0
- package/src/types/index.ts +2 -0
- package/src/utils/collections/util.ts +22 -0
- package/src/utils/colors.ts +14 -0
- package/src/utils/commands/node-graph.ts +107 -0
- package/src/utils/commands.ts +60 -0
- package/src/utils/config/catalog.ts +2 -0
- package/src/utils/domains/domains.ts +50 -0
- package/src/utils/domains/node-graph.ts +60 -0
- package/src/utils/events/node-graph.ts +108 -0
- package/src/utils/events.ts +62 -0
- package/src/utils/example-remark-plugin.mjs +6 -0
- package/src/utils/messages.ts +7 -0
- package/src/utils/node-graph-utils/utils.ts +31 -0
- package/src/utils/services/node-graph.ts +133 -0
- package/src/utils/services/services.ts +88 -0
- package/src/utils/teams.ts +47 -0
- package/src/utils/users.ts +59 -0
- package/tailwind.config.mjs +24 -0
- package/tsconfig.json +11 -26
- package/.next/BUILD_ID +0 -1
- package/.next/build-manifest.json +0 -246
- package/.next/cache/.tsbuildinfo +0 -1
- package/.next/cache/config.json +0 -7
- package/.next/cache/eslint/.cache_1bay4w0 +0 -1
- package/.next/cache/next-server.js.nft.json +0 -1
- package/.next/cache/webpack/client-production/0.pack +0 -0
- package/.next/cache/webpack/client-production/index.pack +0 -0
- package/.next/cache/webpack/server-production/0.pack +0 -0
- package/.next/cache/webpack/server-production/index.pack +0 -0
- package/.next/export-detail.json +0 -1
- package/.next/export-marker.json +0 -1
- package/.next/images-manifest.json +0 -1
- package/.next/next-server.js.nft.json +0 -1
- package/.next/package.json +0 -1
- package/.next/prerender-manifest.json +0 -1
- package/.next/react-loadable-manifest.json +0 -2082
- package/.next/required-server-files.json +0 -1
- package/.next/routes-manifest.json +0 -1
- package/.next/server/chunks/109.js +0 -608
- package/.next/server/chunks/237.js +0 -109
- package/.next/server/chunks/267.js +0 -257
- package/.next/server/chunks/274.js +0 -32
- package/.next/server/chunks/29.js +0 -675
- package/.next/server/chunks/331.js +0 -750
- package/.next/server/chunks/362.js +0 -570
- package/.next/server/chunks/428.js +0 -84
- package/.next/server/chunks/50.js +0 -466
- package/.next/server/chunks/526.js +0 -159
- package/.next/server/chunks/537.js +0 -136
- package/.next/server/chunks/788.js +0 -162
- package/.next/server/chunks/797.js +0 -92
- package/.next/server/chunks/8.js +0 -173
- package/.next/server/chunks/854.js +0 -107
- package/.next/server/chunks/938.js +0 -140
- package/.next/server/chunks/944.js +0 -721
- package/.next/server/chunks/962.js +0 -13
- package/.next/server/chunks/97.js +0 -2829
- package/.next/server/chunks/992.js +0 -50
- package/.next/server/chunks/font-manifest.json +0 -1
- package/.next/server/font-manifest.json +0 -1
- package/.next/server/middleware-manifest.json +0 -6
- package/.next/server/pages/404.html +0 -12
- package/.next/server/pages/500.html +0 -12
- package/.next/server/pages/_app.js +0 -623
- package/.next/server/pages/_app.js.nft.json +0 -1
- package/.next/server/pages/_document.js +0 -120
- package/.next/server/pages/_document.js.nft.json +0 -1
- package/.next/server/pages/_error.js +0 -148
- package/.next/server/pages/_error.js.nft.json +0 -1
- package/.next/server/pages/domains/Orders/events/OrderComplete/logs.html +0 -1
- package/.next/server/pages/domains/Orders/events/OrderComplete/logs.json +0 -1
- package/.next/server/pages/domains/Orders/events/OrderComplete.html +0 -40
- package/.next/server/pages/domains/Orders/events/OrderComplete.json +0 -1
- package/.next/server/pages/domains/Orders/events/OrderConfirmed/logs.html +0 -1
- package/.next/server/pages/domains/Orders/events/OrderConfirmed/logs.json +0 -1
- package/.next/server/pages/domains/Orders/events/OrderConfirmed.html +0 -40
- package/.next/server/pages/domains/Orders/events/OrderConfirmed.json +0 -1
- package/.next/server/pages/domains/Orders/events/OrderCreated/logs.html +0 -1
- package/.next/server/pages/domains/Orders/events/OrderCreated/logs.json +0 -1
- package/.next/server/pages/domains/Orders/events/OrderCreated.html +0 -2
- package/.next/server/pages/domains/Orders/events/OrderCreated.json +0 -1
- package/.next/server/pages/domains/Orders/events/OrderRequested/logs.html +0 -1
- package/.next/server/pages/domains/Orders/events/OrderRequested/logs.json +0 -1
- package/.next/server/pages/domains/Orders/events/OrderRequested.html +0 -40
- package/.next/server/pages/domains/Orders/events/OrderRequested.json +0 -1
- package/.next/server/pages/domains/Orders/services/Orders Service.html +0 -2
- package/.next/server/pages/domains/Orders/services/Orders Service.json +0 -1
- package/.next/server/pages/domains/Orders.html +0 -2
- package/.next/server/pages/domains/Orders.json +0 -1
- package/.next/server/pages/domains/Shopping/events/AddedItemToCart/logs.html +0 -1
- package/.next/server/pages/domains/Shopping/events/AddedItemToCart/logs.json +0 -1
- package/.next/server/pages/domains/Shopping/events/AddedItemToCart/v/0.0.1.html +0 -59
- package/.next/server/pages/domains/Shopping/events/AddedItemToCart/v/0.0.1.json +0 -1
- package/.next/server/pages/domains/Shopping/events/AddedItemToCart/v/0.0.2.html +0 -66
- package/.next/server/pages/domains/Shopping/events/AddedItemToCart/v/0.0.2.json +0 -1
- package/.next/server/pages/domains/Shopping/events/AddedItemToCart.html +0 -65
- package/.next/server/pages/domains/Shopping/events/AddedItemToCart.json +0 -1
- package/.next/server/pages/domains/Shopping/events/RemovedItemFromCart/logs.html +0 -1
- package/.next/server/pages/domains/Shopping/events/RemovedItemFromCart/logs.json +0 -1
- package/.next/server/pages/domains/Shopping/events/RemovedItemFromCart.html +0 -48
- package/.next/server/pages/domains/Shopping/events/RemovedItemFromCart.json +0 -1
- package/.next/server/pages/domains/Shopping.html +0 -2
- package/.next/server/pages/domains/Shopping.json +0 -1
- package/.next/server/pages/domains/[domain]/events/[name]/logs.js +0 -345
- package/.next/server/pages/domains/[domain]/events/[name]/logs.js.nft.json +0 -1
- package/.next/server/pages/domains/[domain]/events/[name]/v/[version].js +0 -435
- package/.next/server/pages/domains/[domain]/events/[name]/v/[version].js.nft.json +0 -1
- package/.next/server/pages/domains/[domain]/events/[name].js +0 -354
- package/.next/server/pages/domains/[domain]/events/[name].js.nft.json +0 -1
- package/.next/server/pages/domains/[domain]/services/[name].js +0 -402
- package/.next/server/pages/domains/[domain]/services/[name].js.nft.json +0 -1
- package/.next/server/pages/domains/[domain].js +0 -549
- package/.next/server/pages/domains/[domain].js.nft.json +0 -1
- package/.next/server/pages/domains.html +0 -3
- package/.next/server/pages/domains.js +0 -576
- package/.next/server/pages/domains.js.nft.json +0 -1
- package/.next/server/pages/domains.json +0 -1
- package/.next/server/pages/events/PaymentProcessed/logs.html +0 -1
- package/.next/server/pages/events/PaymentProcessed/logs.json +0 -1
- package/.next/server/pages/events/PaymentProcessed.html +0 -44
- package/.next/server/pages/events/PaymentProcessed.json +0 -1
- package/.next/server/pages/events/ShipmentDelivered/logs.html +0 -1
- package/.next/server/pages/events/ShipmentDelivered/logs.json +0 -1
- package/.next/server/pages/events/ShipmentDelivered.html +0 -44
- package/.next/server/pages/events/ShipmentDelivered.json +0 -1
- package/.next/server/pages/events/ShipmentDispatched/logs.html +0 -1
- package/.next/server/pages/events/ShipmentDispatched/logs.json +0 -1
- package/.next/server/pages/events/ShipmentDispatched.html +0 -44
- package/.next/server/pages/events/ShipmentDispatched.json +0 -1
- package/.next/server/pages/events/ShipmentPrepared/logs.html +0 -1
- package/.next/server/pages/events/ShipmentPrepared/logs.json +0 -1
- package/.next/server/pages/events/ShipmentPrepared.html +0 -2
- package/.next/server/pages/events/ShipmentPrepared.json +0 -1
- package/.next/server/pages/events/[name]/logs.js +0 -263
- package/.next/server/pages/events/[name]/logs.js.nft.json +0 -1
- package/.next/server/pages/events/[name]/v/[version].js +0 -431
- package/.next/server/pages/events/[name]/v/[version].js.nft.json +0 -1
- package/.next/server/pages/events/[name].js +0 -354
- package/.next/server/pages/events/[name].js.nft.json +0 -1
- package/.next/server/pages/events.html +0 -11
- package/.next/server/pages/events.js +0 -789
- package/.next/server/pages/events.js.nft.json +0 -1
- package/.next/server/pages/events.json +0 -1
- package/.next/server/pages/index.html +0 -1
- package/.next/server/pages/index.js.nft.json +0 -1
- package/.next/server/pages/overview.html +0 -1
- package/.next/server/pages/overview.js +0 -240
- package/.next/server/pages/overview.js.nft.json +0 -1
- package/.next/server/pages/overview.json +0 -1
- package/.next/server/pages/services/Orders Service.html +0 -1
- package/.next/server/pages/services/Orders Service.json +0 -1
- package/.next/server/pages/services/Payment Service.html +0 -2
- package/.next/server/pages/services/Payment Service.json +0 -1
- package/.next/server/pages/services/Shipping Service.html +0 -2
- package/.next/server/pages/services/Shipping Service.json +0 -1
- package/.next/server/pages/services/[name].js +0 -319
- package/.next/server/pages/services/[name].js.nft.json +0 -1
- package/.next/server/pages/services.html +0 -4
- package/.next/server/pages/services.js +0 -741
- package/.next/server/pages/services.js.nft.json +0 -1
- package/.next/server/pages/services.json +0 -1
- package/.next/server/pages/users/[id].js +0 -475
- package/.next/server/pages/users/[id].js.nft.json +0 -1
- package/.next/server/pages/users/dboyne.html +0 -16
- package/.next/server/pages/users/dboyne.json +0 -1
- package/.next/server/pages/users/mSmith.html +0 -13
- package/.next/server/pages/users/mSmith.json +0 -1
- package/.next/server/pages/users.html +0 -1
- package/.next/server/pages/users.js.nft.json +0 -1
- package/.next/server/pages/visualiser.html +0 -16
- package/.next/server/pages/visualiser.js +0 -739
- package/.next/server/pages/visualiser.js.nft.json +0 -1
- package/.next/server/pages/visualiser.json +0 -1
- package/.next/server/pages-manifest.json +0 -23
- package/.next/server/webpack-runtime.js +0 -259
- package/.next/static/chunks/020d8314.2bae2f29ef0060e4.js +0 -1
- package/.next/static/chunks/1178-011609b6f3b123b3.js +0 -1
- package/.next/static/chunks/1476.eb11ab1feb4c5940.js +0 -1
- package/.next/static/chunks/1484.274df63eb11d9d68.js +0 -1
- package/.next/static/chunks/172-940ad0353b57ff98.js +0 -1
- package/.next/static/chunks/1750.a25eb3336a8c3a36.js +0 -1
- package/.next/static/chunks/2017.1b67898bd26fe157.js +0 -1
- package/.next/static/chunks/2027.80b01f1a7005a770.js +0 -1
- package/.next/static/chunks/2076.21cb0bf760a8055d.js +0 -1
- package/.next/static/chunks/2583.56889bb376087220.js +0 -1
- package/.next/static/chunks/2620-21775e17d8a6a407.js +0 -1
- package/.next/static/chunks/2765.dda8bae3343b6d41.js +0 -1
- package/.next/static/chunks/2edb282b-45c56c19221816df.js +0 -1
- package/.next/static/chunks/3082.62ff47793d562412.js +0 -1
- package/.next/static/chunks/3116-e9a578a270d9e013.js +0 -1
- package/.next/static/chunks/3260.00ac1405e82b8dd9.js +0 -1
- package/.next/static/chunks/3706.64742528652de3dd.js +0 -1
- package/.next/static/chunks/3ede58a6.ff6c02b372da8155.js +0 -1
- package/.next/static/chunks/4042.98f113bfbf744466.js +0 -1
- package/.next/static/chunks/4079.75a5db02e1a11105.js +0 -1
- package/.next/static/chunks/438.dea6dada9bd4b683.js +0 -1
- package/.next/static/chunks/4384-8a28a71e7e3b8d8a.js +0 -1
- package/.next/static/chunks/4637.6819aa53bf80d6ff.js +0 -1
- package/.next/static/chunks/4816.03f53c476d2a5924.js +0 -1
- package/.next/static/chunks/5048.73fa7a6d734ba5ef.js +0 -1
- package/.next/static/chunks/5202.6f686702cbb58a65.js +0 -1
- package/.next/static/chunks/5464.4c916df2382b5ba9.js +0 -1
- package/.next/static/chunks/5493-b00dc3d50ab46716.js +0 -1
- package/.next/static/chunks/5644.b4ffa0632405fc9f.js +0 -1
- package/.next/static/chunks/5a7b57ef.d0702578743545b0.js +0 -1
- package/.next/static/chunks/60.40ff539d26f28401.js +0 -1
- package/.next/static/chunks/6101.a35579324b3356df.js +0 -1
- package/.next/static/chunks/6194.045435de6d19fc72.js +0 -1
- package/.next/static/chunks/6772-fba69ba8e4fa1ef4.js +0 -1
- package/.next/static/chunks/6778.7885dc0a314c5a9c.js +0 -1
- package/.next/static/chunks/6790-f4527d80153a3e25.js +0 -1
- package/.next/static/chunks/7005-09e42f99859b8d03.js +0 -1
- package/.next/static/chunks/7109-c8d3fde4c3b6798e.js +0 -1
- package/.next/static/chunks/7195.2768b2bb31a65f2f.js +0 -1
- package/.next/static/chunks/7458.1de01a44cd67f6f0.js +0 -1
- package/.next/static/chunks/7f5d3f51-659399fe6f04b9eb.js +0 -1
- package/.next/static/chunks/8264-a1b0376ff4b3d4da.js +0 -1
- package/.next/static/chunks/828-ef0e36f29db31dde.js +0 -1
- package/.next/static/chunks/8341-b8d844d6f606aed5.js +0 -1
- package/.next/static/chunks/8720.e06d4cca843573db.js +0 -1
- package/.next/static/chunks/8785.1331b2a6d4be82c3.js +0 -1
- package/.next/static/chunks/8829-386c887227aab68c.js +0 -1
- package/.next/static/chunks/9054.ae9ffec47aacae76.js +0 -1
- package/.next/static/chunks/9097.1efc23284d82765c.js +0 -1
- package/.next/static/chunks/9231.af30fa4fedab9f01.js +0 -1
- package/.next/static/chunks/9497.49670ee9a8bd76f7.js +0 -1
- package/.next/static/chunks/9600.f70c0583d23764a8.js +0 -1
- package/.next/static/chunks/9822.0ad553e5c697208c.js +0 -1
- package/.next/static/chunks/9930.28415573db2b7806.js +0 -7
- package/.next/static/chunks/b9e0c7b4-52b02c0d4f161186.js +0 -1
- package/.next/static/chunks/d57e5a30-463f9ed8df724792.js +0 -1
- package/.next/static/chunks/eb6e03f4.2276f931f02e235c.js +0 -1
- package/.next/static/chunks/f4df0e03.56d1c15b5532ab26.js +0 -1
- package/.next/static/chunks/framework-6cc1bceeaaf75e91.js +0 -1
- package/.next/static/chunks/main-da37322a396d572a.js +0 -1
- package/.next/static/chunks/pages/_app-d40841fd52b70886.js +0 -1
- package/.next/static/chunks/pages/_error-c36fa6f7fd569cf6.js +0 -1
- package/.next/static/chunks/pages/domains/[domain]/events/[name]/logs-350f383eed1cf3f8.js +0 -1
- package/.next/static/chunks/pages/domains/[domain]/events/[name]/v/[version]-175a58a05deb2eda.js +0 -1
- package/.next/static/chunks/pages/domains/[domain]/events/[name]-7c7c2526e7d63883.js +0 -1
- package/.next/static/chunks/pages/domains/[domain]/services/[name]-f447208842a47b40.js +0 -1
- package/.next/static/chunks/pages/domains/[domain]-ea20e2daae1794fc.js +0 -1
- package/.next/static/chunks/pages/domains-71179cbdb719a0f8.js +0 -1
- package/.next/static/chunks/pages/events/[name]/logs-695c5b2cfd996539.js +0 -1
- package/.next/static/chunks/pages/events/[name]/v/[version]-af687afaafd7fd45.js +0 -1
- package/.next/static/chunks/pages/events/[name]-24bc568718357116.js +0 -1
- package/.next/static/chunks/pages/events-05ca59359ab07aa2.js +0 -1
- package/.next/static/chunks/pages/index-68062a10328e7d10.js +0 -1
- package/.next/static/chunks/pages/overview-68b31b232c5ef1ff.js +0 -1
- package/.next/static/chunks/pages/services/[name]-b59b95836832898e.js +0 -1
- package/.next/static/chunks/pages/services-2c63507ae596def3.js +0 -1
- package/.next/static/chunks/pages/users/[id]-7306f8a1d8a7012a.js +0 -1
- package/.next/static/chunks/pages/users-412f257b1de51363.js +0 -1
- package/.next/static/chunks/pages/visualiser-8474d03175cf9d12.js +0 -1
- package/.next/static/chunks/polyfills-c67a75d1b6f99dc8.js +0 -1
- package/.next/static/chunks/webpack-7e93d0cba2ccf996.js +0 -1
- package/.next/static/css/7e14b4dede1671ad.css +0 -1
- package/.next/static/css/94b9a747218712b2.css +0 -3
- package/.next/static/css/ae8abf3666c55019.css +0 -5
- package/.next/static/css/cc3c8fcadcf7a58b.css +0 -1
- package/.next/static/css/deb57cf90a65a90f.css +0 -1
- package/.next/static/css/ed97de5465a152bb.css +0 -1
- package/.next/static/rP51t_ISuRqZMVs4QvwfY/_buildManifest.js +0 -1
- package/.next/static/rP51t_ISuRqZMVs4QvwfY/_ssgManifest.js +0 -1
- package/.next/trace +0 -141
- package/bin/eventcatalog.js +0 -141
- package/components/BreadCrumbs.tsx +0 -50
- package/components/ContentView.tsx +0 -123
- package/components/Footer.tsx +0 -31
- package/components/Grids/DomainGrid.tsx +0 -61
- package/components/Grids/EventGrid.tsx +0 -102
- package/components/Grids/ServiceGrid.tsx +0 -84
- package/components/Grids/UserGrid.tsx +0 -55
- package/components/Header.tsx +0 -74
- package/components/Mdx/AsyncApiSpec.tsx +0 -25
- package/components/Mdx/Examples.tsx +0 -70
- package/components/Mdx/NodeGraph/GraphElements.tsx +0 -294
- package/components/Mdx/NodeGraph/GraphLayout.ts +0 -110
- package/components/Mdx/NodeGraph/Node.tsx +0 -15
- package/components/Mdx/NodeGraph/NodeGraph.tsx +0 -168
- package/components/Mdx/NodeGraph/__tests__/GraphElements.spec.ts +0 -102
- package/components/Mdx/NodeGraph/__tests__/GraphLayout.spec.ts +0 -115
- package/components/Mdx/NodeGraph/__tests__/__snapshots__/GraphElements.spec.ts.snap +0 -559
- package/components/Mdx/NodeGraph/__tests__/__snapshots__/GraphLayout.spec.ts.snap +0 -81
- package/components/Mdx/OpenApiSpec.tsx +0 -21
- package/components/Mdx/SchemaViewer/SchemaViewer.module.css +0 -5
- package/components/Mdx/SchemaViewer/SchemaViewer.tsx +0 -34
- package/components/Mermaid/index.tsx +0 -58
- package/components/NotFound/index.tsx +0 -40
- package/components/Sidebars/DomainSidebar.tsx +0 -55
- package/components/Sidebars/EventSidebar.tsx +0 -172
- package/components/Sidebars/ServiceSidebar.tsx +0 -128
- package/components/Sidebars/components/ExternalLinks.tsx +0 -28
- package/components/Sidebars/components/ItemList.tsx +0 -32
- package/components/Sidebars/components/Owners.tsx +0 -38
- package/components/Sidebars/components/Tags.tsx +0 -45
- package/components/SyntaxHighlighter.tsx +0 -42
- package/eventcatalog.config.js +0 -58
- package/eventcatalog.styles.css +0 -15
- package/hooks/EventCatalog.tsx +0 -54
- package/lib/__tests__/assets/domains/User/events/UserCreated/index.md +0 -20
- package/lib/__tests__/assets/domains/User/events/UserRemoved/examples/Basic.cs +0 -31
- package/lib/__tests__/assets/domains/User/events/UserRemoved/examples/Basic.js +0 -1
- package/lib/__tests__/assets/domains/User/events/UserRemoved/index.md +0 -16
- package/lib/__tests__/assets/domains/User/events/UserRemoved/schema.json +0 -4
- package/lib/__tests__/assets/domains/User/index.md +0 -16
- package/lib/__tests__/assets/domains/User/services/User Service/index.md +0 -19
- package/lib/__tests__/assets/events/AddedItemToCart/index.md +0 -25
- package/lib/__tests__/assets/events/EmailSent/index.md +0 -15
- package/lib/__tests__/assets/events/EventWithSchemaAndExamples/examples/Basic.cs +0 -31
- package/lib/__tests__/assets/events/EventWithSchemaAndExamples/examples/Basic.js +0 -1
- package/lib/__tests__/assets/events/EventWithSchemaAndExamples/index.md +0 -8
- package/lib/__tests__/assets/events/EventWithSchemaAndExamples/schema.json +0 -4
- package/lib/__tests__/assets/events/EventWithVersions/index.md +0 -10
- package/lib/__tests__/assets/events/EventWithVersions/versioned/0.0.1/index.md +0 -10
- package/lib/__tests__/assets/services/Basket Service/index.md +0 -26
- package/lib/__tests__/assets/services/Email Platform/index.md +0 -17
- package/lib/__tests__/assets/services/Payment Service/index.md +0 -7
- package/lib/__tests__/domains.spec.ts +0 -416
- package/lib/__tests__/events.spec.ts +0 -514
- package/lib/__tests__/file-reader.spec.ts +0 -69
- package/lib/__tests__/graphs.spec.ts +0 -88
- package/lib/__tests__/services.spec.ts +0 -268
- package/lib/analytics.ts +0 -30
- package/lib/domains.ts +0 -160
- package/lib/events.ts +0 -313
- package/lib/file-reader.ts +0 -76
- package/lib/graphs.ts +0 -92
- package/lib/services.ts +0 -126
- package/next-env.d.ts +0 -5
- package/next.config.js +0 -11
- package/out/404/index.html +0 -12
- package/out/404.html +0 -12
- package/out/_next/data/rP51t_ISuRqZMVs4QvwfY/domains/Orders/events/OrderComplete/logs.json +0 -1
- package/out/_next/data/rP51t_ISuRqZMVs4QvwfY/domains/Orders/events/OrderComplete.json +0 -1
- package/out/_next/data/rP51t_ISuRqZMVs4QvwfY/domains/Orders/events/OrderConfirmed/logs.json +0 -1
- package/out/_next/data/rP51t_ISuRqZMVs4QvwfY/domains/Orders/events/OrderConfirmed.json +0 -1
- package/out/_next/data/rP51t_ISuRqZMVs4QvwfY/domains/Orders/events/OrderCreated/logs.json +0 -1
- package/out/_next/data/rP51t_ISuRqZMVs4QvwfY/domains/Orders/events/OrderCreated.json +0 -1
- package/out/_next/data/rP51t_ISuRqZMVs4QvwfY/domains/Orders/events/OrderRequested/logs.json +0 -1
- package/out/_next/data/rP51t_ISuRqZMVs4QvwfY/domains/Orders/events/OrderRequested.json +0 -1
- package/out/_next/data/rP51t_ISuRqZMVs4QvwfY/domains/Orders/services/Orders Service.json +0 -1
- package/out/_next/data/rP51t_ISuRqZMVs4QvwfY/domains/Orders.json +0 -1
- package/out/_next/data/rP51t_ISuRqZMVs4QvwfY/domains/Shopping/events/AddedItemToCart/logs.json +0 -1
- package/out/_next/data/rP51t_ISuRqZMVs4QvwfY/domains/Shopping/events/AddedItemToCart/v/0.0.1.json +0 -1
- package/out/_next/data/rP51t_ISuRqZMVs4QvwfY/domains/Shopping/events/AddedItemToCart/v/0.0.2.json +0 -1
- package/out/_next/data/rP51t_ISuRqZMVs4QvwfY/domains/Shopping/events/AddedItemToCart.json +0 -1
- package/out/_next/data/rP51t_ISuRqZMVs4QvwfY/domains/Shopping/events/RemovedItemFromCart/logs.json +0 -1
- package/out/_next/data/rP51t_ISuRqZMVs4QvwfY/domains/Shopping/events/RemovedItemFromCart.json +0 -1
- package/out/_next/data/rP51t_ISuRqZMVs4QvwfY/domains/Shopping.json +0 -1
- package/out/_next/data/rP51t_ISuRqZMVs4QvwfY/domains.json +0 -1
- package/out/_next/data/rP51t_ISuRqZMVs4QvwfY/events/PaymentProcessed/logs.json +0 -1
- package/out/_next/data/rP51t_ISuRqZMVs4QvwfY/events/PaymentProcessed.json +0 -1
- package/out/_next/data/rP51t_ISuRqZMVs4QvwfY/events/ShipmentDelivered/logs.json +0 -1
- package/out/_next/data/rP51t_ISuRqZMVs4QvwfY/events/ShipmentDelivered.json +0 -1
- package/out/_next/data/rP51t_ISuRqZMVs4QvwfY/events/ShipmentDispatched/logs.json +0 -1
- package/out/_next/data/rP51t_ISuRqZMVs4QvwfY/events/ShipmentDispatched.json +0 -1
- package/out/_next/data/rP51t_ISuRqZMVs4QvwfY/events/ShipmentPrepared/logs.json +0 -1
- package/out/_next/data/rP51t_ISuRqZMVs4QvwfY/events/ShipmentPrepared.json +0 -1
- package/out/_next/data/rP51t_ISuRqZMVs4QvwfY/events.json +0 -1
- package/out/_next/data/rP51t_ISuRqZMVs4QvwfY/overview.json +0 -1
- package/out/_next/data/rP51t_ISuRqZMVs4QvwfY/services/Orders Service.json +0 -1
- package/out/_next/data/rP51t_ISuRqZMVs4QvwfY/services/Payment Service.json +0 -1
- package/out/_next/data/rP51t_ISuRqZMVs4QvwfY/services/Shipping Service.json +0 -1
- package/out/_next/data/rP51t_ISuRqZMVs4QvwfY/services.json +0 -1
- package/out/_next/data/rP51t_ISuRqZMVs4QvwfY/users/dboyne.json +0 -1
- package/out/_next/data/rP51t_ISuRqZMVs4QvwfY/users/mSmith.json +0 -1
- package/out/_next/data/rP51t_ISuRqZMVs4QvwfY/visualiser.json +0 -1
- package/out/_next/static/chunks/020d8314.2bae2f29ef0060e4.js +0 -1
- package/out/_next/static/chunks/1178-011609b6f3b123b3.js +0 -1
- package/out/_next/static/chunks/1476.eb11ab1feb4c5940.js +0 -1
- package/out/_next/static/chunks/1484.274df63eb11d9d68.js +0 -1
- package/out/_next/static/chunks/172-940ad0353b57ff98.js +0 -1
- package/out/_next/static/chunks/1750.a25eb3336a8c3a36.js +0 -1
- package/out/_next/static/chunks/2017.1b67898bd26fe157.js +0 -1
- package/out/_next/static/chunks/2027.80b01f1a7005a770.js +0 -1
- package/out/_next/static/chunks/2076.21cb0bf760a8055d.js +0 -1
- package/out/_next/static/chunks/2583.56889bb376087220.js +0 -1
- package/out/_next/static/chunks/2620-21775e17d8a6a407.js +0 -1
- package/out/_next/static/chunks/2765.dda8bae3343b6d41.js +0 -1
- package/out/_next/static/chunks/2edb282b-45c56c19221816df.js +0 -1
- package/out/_next/static/chunks/3082.62ff47793d562412.js +0 -1
- package/out/_next/static/chunks/3116-e9a578a270d9e013.js +0 -1
- package/out/_next/static/chunks/3260.00ac1405e82b8dd9.js +0 -1
- package/out/_next/static/chunks/3706.64742528652de3dd.js +0 -1
- package/out/_next/static/chunks/3ede58a6.ff6c02b372da8155.js +0 -1
- package/out/_next/static/chunks/4042.98f113bfbf744466.js +0 -1
- package/out/_next/static/chunks/4079.75a5db02e1a11105.js +0 -1
- package/out/_next/static/chunks/438.dea6dada9bd4b683.js +0 -1
- package/out/_next/static/chunks/4384-8a28a71e7e3b8d8a.js +0 -1
- package/out/_next/static/chunks/4637.6819aa53bf80d6ff.js +0 -1
- package/out/_next/static/chunks/4816.03f53c476d2a5924.js +0 -1
- package/out/_next/static/chunks/5048.73fa7a6d734ba5ef.js +0 -1
- package/out/_next/static/chunks/5202.6f686702cbb58a65.js +0 -1
- package/out/_next/static/chunks/5464.4c916df2382b5ba9.js +0 -1
- package/out/_next/static/chunks/5493-b00dc3d50ab46716.js +0 -1
- package/out/_next/static/chunks/5644.b4ffa0632405fc9f.js +0 -1
- package/out/_next/static/chunks/5a7b57ef.d0702578743545b0.js +0 -1
- package/out/_next/static/chunks/60.40ff539d26f28401.js +0 -1
- package/out/_next/static/chunks/6101.a35579324b3356df.js +0 -1
- package/out/_next/static/chunks/6194.045435de6d19fc72.js +0 -1
- package/out/_next/static/chunks/6772-fba69ba8e4fa1ef4.js +0 -1
- package/out/_next/static/chunks/6778.7885dc0a314c5a9c.js +0 -1
- package/out/_next/static/chunks/6790-f4527d80153a3e25.js +0 -1
- package/out/_next/static/chunks/7005-09e42f99859b8d03.js +0 -1
- package/out/_next/static/chunks/7109-c8d3fde4c3b6798e.js +0 -1
- package/out/_next/static/chunks/7195.2768b2bb31a65f2f.js +0 -1
- package/out/_next/static/chunks/7458.1de01a44cd67f6f0.js +0 -1
- package/out/_next/static/chunks/7f5d3f51-659399fe6f04b9eb.js +0 -1
- package/out/_next/static/chunks/8264-a1b0376ff4b3d4da.js +0 -1
- package/out/_next/static/chunks/828-ef0e36f29db31dde.js +0 -1
- package/out/_next/static/chunks/8341-b8d844d6f606aed5.js +0 -1
- package/out/_next/static/chunks/8720.e06d4cca843573db.js +0 -1
- package/out/_next/static/chunks/8785.1331b2a6d4be82c3.js +0 -1
- package/out/_next/static/chunks/8829-386c887227aab68c.js +0 -1
- package/out/_next/static/chunks/9054.ae9ffec47aacae76.js +0 -1
- package/out/_next/static/chunks/9097.1efc23284d82765c.js +0 -1
- package/out/_next/static/chunks/9231.af30fa4fedab9f01.js +0 -1
- package/out/_next/static/chunks/9497.49670ee9a8bd76f7.js +0 -1
- package/out/_next/static/chunks/9600.f70c0583d23764a8.js +0 -1
- package/out/_next/static/chunks/9822.0ad553e5c697208c.js +0 -1
- package/out/_next/static/chunks/9930.28415573db2b7806.js +0 -7
- package/out/_next/static/chunks/b9e0c7b4-52b02c0d4f161186.js +0 -1
- package/out/_next/static/chunks/d57e5a30-463f9ed8df724792.js +0 -1
- package/out/_next/static/chunks/eb6e03f4.2276f931f02e235c.js +0 -1
- package/out/_next/static/chunks/f4df0e03.56d1c15b5532ab26.js +0 -1
- package/out/_next/static/chunks/framework-6cc1bceeaaf75e91.js +0 -1
- package/out/_next/static/chunks/main-da37322a396d572a.js +0 -1
- package/out/_next/static/chunks/pages/_app-d40841fd52b70886.js +0 -1
- package/out/_next/static/chunks/pages/_error-c36fa6f7fd569cf6.js +0 -1
- package/out/_next/static/chunks/pages/domains/[domain]/events/[name]/logs-350f383eed1cf3f8.js +0 -1
- package/out/_next/static/chunks/pages/domains/[domain]/events/[name]/v/[version]-175a58a05deb2eda.js +0 -1
- package/out/_next/static/chunks/pages/domains/[domain]/events/[name]-7c7c2526e7d63883.js +0 -1
- package/out/_next/static/chunks/pages/domains/[domain]/services/[name]-f447208842a47b40.js +0 -1
- package/out/_next/static/chunks/pages/domains/[domain]-ea20e2daae1794fc.js +0 -1
- package/out/_next/static/chunks/pages/domains-71179cbdb719a0f8.js +0 -1
- package/out/_next/static/chunks/pages/events/[name]/logs-695c5b2cfd996539.js +0 -1
- package/out/_next/static/chunks/pages/events/[name]/v/[version]-af687afaafd7fd45.js +0 -1
- package/out/_next/static/chunks/pages/events/[name]-24bc568718357116.js +0 -1
- package/out/_next/static/chunks/pages/events-05ca59359ab07aa2.js +0 -1
- package/out/_next/static/chunks/pages/index-68062a10328e7d10.js +0 -1
- package/out/_next/static/chunks/pages/overview-68b31b232c5ef1ff.js +0 -1
- package/out/_next/static/chunks/pages/services/[name]-b59b95836832898e.js +0 -1
- package/out/_next/static/chunks/pages/services-2c63507ae596def3.js +0 -1
- package/out/_next/static/chunks/pages/users/[id]-7306f8a1d8a7012a.js +0 -1
- package/out/_next/static/chunks/pages/users-412f257b1de51363.js +0 -1
- package/out/_next/static/chunks/pages/visualiser-8474d03175cf9d12.js +0 -1
- package/out/_next/static/chunks/polyfills-c67a75d1b6f99dc8.js +0 -1
- package/out/_next/static/chunks/webpack-7e93d0cba2ccf996.js +0 -1
- package/out/_next/static/css/7e14b4dede1671ad.css +0 -1
- package/out/_next/static/css/94b9a747218712b2.css +0 -3
- package/out/_next/static/css/ae8abf3666c55019.css +0 -5
- package/out/_next/static/css/cc3c8fcadcf7a58b.css +0 -1
- package/out/_next/static/css/deb57cf90a65a90f.css +0 -1
- package/out/_next/static/css/ed97de5465a152bb.css +0 -1
- package/out/_next/static/rP51t_ISuRqZMVs4QvwfY/_buildManifest.js +0 -1
- package/out/_next/static/rP51t_ISuRqZMVs4QvwfY/_ssgManifest.js +0 -1
- package/out/domains/Orders/events/OrderComplete/index.html +0 -40
- package/out/domains/Orders/events/OrderComplete/logs/index.html +0 -1
- package/out/domains/Orders/events/OrderConfirmed/index.html +0 -40
- package/out/domains/Orders/events/OrderConfirmed/logs/index.html +0 -1
- package/out/domains/Orders/events/OrderCreated/index.html +0 -2
- package/out/domains/Orders/events/OrderCreated/logs/index.html +0 -1
- package/out/domains/Orders/events/OrderRequested/index.html +0 -40
- package/out/domains/Orders/events/OrderRequested/logs/index.html +0 -1
- package/out/domains/Orders/index.html +0 -2
- package/out/domains/Orders/services/Orders Service/index.html +0 -2
- package/out/domains/Shopping/events/AddedItemToCart/index.html +0 -65
- package/out/domains/Shopping/events/AddedItemToCart/logs/index.html +0 -1
- package/out/domains/Shopping/events/AddedItemToCart/v/0.0.1/index.html +0 -59
- package/out/domains/Shopping/events/AddedItemToCart/v/0.0.2/index.html +0 -66
- package/out/domains/Shopping/events/RemovedItemFromCart/index.html +0 -48
- package/out/domains/Shopping/events/RemovedItemFromCart/logs/index.html +0 -1
- package/out/domains/Shopping/index.html +0 -2
- package/out/domains/index.html +0 -3
- package/out/events/PaymentProcessed/index.html +0 -44
- package/out/events/PaymentProcessed/logs/index.html +0 -1
- package/out/events/ShipmentDelivered/index.html +0 -44
- package/out/events/ShipmentDelivered/logs/index.html +0 -1
- package/out/events/ShipmentDispatched/index.html +0 -44
- package/out/events/ShipmentDispatched/logs/index.html +0 -1
- package/out/events/ShipmentPrepared/index.html +0 -2
- package/out/events/ShipmentPrepared/logs/index.html +0 -1
- package/out/events/index.html +0 -11
- package/out/favicon.ico +0 -0
- package/out/index.html +0 -1
- package/out/logo-random.svg +0 -114
- package/out/logo.svg +0 -44
- package/out/opengraph.png +0 -0
- package/out/overview/index.html +0 -1
- package/out/services/Orders Service/index.html +0 -1
- package/out/services/Payment Service/index.html +0 -2
- package/out/services/Shipping Service/index.html +0 -2
- package/out/services/index.html +0 -4
- package/out/users/dboyne/index.html +0 -16
- package/out/users/index.html +0 -1
- package/out/users/mSmith/index.html +0 -13
- package/out/visualiser/index.html +0 -16
- package/pages/_app.tsx +0 -111
- package/pages/_document.tsx +0 -18
- package/pages/domains/[domain]/events/[name]/logs.tsx +0 -35
- package/pages/domains/[domain]/events/[name]/v/[version].tsx +0 -39
- package/pages/domains/[domain]/events/[name].tsx +0 -46
- package/pages/domains/[domain]/index.tsx +0 -137
- package/pages/domains/[domain]/services/[name].tsx +0 -42
- package/pages/domains.tsx +0 -210
- package/pages/events/[name]/logs.tsx +0 -177
- package/pages/events/[name]/v/[version].tsx +0 -38
- package/pages/events/[name].tsx +0 -223
- package/pages/events.tsx +0 -357
- package/pages/index.tsx +0 -56
- package/pages/overview.tsx +0 -89
- package/pages/services/[name].tsx +0 -164
- package/pages/services.tsx +0 -311
- package/pages/users/[id].tsx +0 -101
- package/pages/users.tsx +0 -43
- package/pages/visualiser.tsx +0 -322
- package/postcss.config.js +0 -6
- package/public/logo-random.svg +0 -114
- package/public/logo.svg +0 -44
- package/scripts/__tests__/assets/eventcatalog.config.js +0 -32
- package/scripts/__tests__/generate.spec.ts +0 -36
- package/scripts/generate.js +0 -28
- package/scripts/move-schemas-for-download.js +0 -80
- package/styles/Home.module.css +0 -116
- package/styles/globals.css +0 -85
- package/tailwind.config.js +0 -36
- package/types/index.ts +0 -7
- package/utils/random-bg.ts +0 -13
- /package/{lib/__tests__/assets/services/Payment Service/openapi.yaml → public/openapi.yml} +0 -0
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
---
|
|
2
|
+
import OwnersList from '@components/Lists/OwnersList';
|
|
3
|
+
import PillList from '@components/Lists/PillList';
|
|
4
|
+
import VersionList from '@components/Lists/VersionList.astro';
|
|
5
|
+
import { getEntry, type CollectionEntry } from 'astro:content';
|
|
6
|
+
interface Props {
|
|
7
|
+
domain: CollectionEntry<'domains'>;
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
const { domain } = Astro.props;
|
|
11
|
+
|
|
12
|
+
// @ts-ignore
|
|
13
|
+
const services = domain.data.services as CollectionEntry<'services'>[] || [];
|
|
14
|
+
|
|
15
|
+
const ownersRaw = domain.data?.owners || [];
|
|
16
|
+
const owners = await Promise.all(ownersRaw.map((o) => getEntry(o)));
|
|
17
|
+
|
|
18
|
+
const serviceList = services.map((p) => ({
|
|
19
|
+
label: p.data.id,
|
|
20
|
+
badge: p.collection,
|
|
21
|
+
tag: `v${p.data.version}`,
|
|
22
|
+
href: `/docs/${p.collection}/${p.data.id}`,
|
|
23
|
+
}));
|
|
24
|
+
|
|
25
|
+
const ownersList = owners.map((o) => ({
|
|
26
|
+
label: o.data.name,
|
|
27
|
+
type: o.collection,
|
|
28
|
+
badge: o.collection === 'users' ? o.data.role : 'Team',
|
|
29
|
+
avatarUrl: o.collection === 'users' ? o.data.avatarUrl : '',
|
|
30
|
+
href: `/docs/${o.collection}/${o.data.id}`,
|
|
31
|
+
}));
|
|
32
|
+
|
|
33
|
+
---
|
|
34
|
+
|
|
35
|
+
<aside class="sticky top-28 left-0 space-y-8 h-full overflow-y-auto">
|
|
36
|
+
<div>
|
|
37
|
+
<PillList title={`Services (${services.length})`} pills={serviceList} emptyMessage={`This domain does not contain any services.`} color="pink" client:load />
|
|
38
|
+
<OwnersList title={`Service owners (${ownersList.length})`} owners={ownersList} emptyMessage={`This domain does not have any documented owners.`} client:load />
|
|
39
|
+
{domain.data.versions && <VersionList versions={domain.data.versions} collectionItem={domain} />}
|
|
40
|
+
<a href={`/visualiser/${domain.collection}/${domain.data.id}/${domain.data.version}`} class="block text-center rounded-md w-full bg-white px-3.5 py-2.5 text-sm font-semibold text-gray-900 shadow-sm ring-1 ring-inset ring-gray-300 hover:bg-gray-100/60 hover:text-purple-500">View in Visualiser</a>
|
|
41
|
+
</div>
|
|
42
|
+
</aside>
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
---
|
|
2
|
+
import { getEntry, type CollectionEntry } from 'astro:content';
|
|
3
|
+
import PillList from '@components/Lists/PillList';
|
|
4
|
+
import OwnersList from '@components/Lists/OwnersList';
|
|
5
|
+
import type { CollectionMessageTypes } from '@types';
|
|
6
|
+
import * as path from 'path';
|
|
7
|
+
import VersionList from '@components/Lists/VersionList.astro';
|
|
8
|
+
interface Props {
|
|
9
|
+
message: CollectionEntry<CollectionMessageTypes>;
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
const { message } = Astro.props;
|
|
13
|
+
|
|
14
|
+
const producers = (message.data.producers as CollectionEntry<'services'>[]) || [];
|
|
15
|
+
const consumers = (message.data.consumers as CollectionEntry<'services'>[]) || [];
|
|
16
|
+
|
|
17
|
+
const ownersRaw = message.data?.owners || [];
|
|
18
|
+
const owners = await Promise.all(ownersRaw.map((o) => getEntry(o)));
|
|
19
|
+
|
|
20
|
+
const producerList = producers.map((p) => ({
|
|
21
|
+
label: `${p.data.name} (service)`,
|
|
22
|
+
tag: `v${p.data.version}`,
|
|
23
|
+
href: `/docs/services/${p.data.id}/${p.data.version}`,
|
|
24
|
+
}));
|
|
25
|
+
|
|
26
|
+
const consumerList = consumers.map((p) => ({
|
|
27
|
+
label: `${p.data.name} (service)`,
|
|
28
|
+
tag: `v${p.data.version}`,
|
|
29
|
+
href: `/docs/services/${p.data.id}/${p.data.version}`,
|
|
30
|
+
}));
|
|
31
|
+
|
|
32
|
+
const ownersList = owners.map((o) => ({
|
|
33
|
+
label: o.data.name,
|
|
34
|
+
type: o.collection,
|
|
35
|
+
badge: o.collection === 'users' ? o.data.role : 'Team',
|
|
36
|
+
avatarUrl: o.collection === 'users' ? o.data.avatarUrl : '',
|
|
37
|
+
href: `/docs/${o.collection}/${o.data.id}`,
|
|
38
|
+
}));
|
|
39
|
+
|
|
40
|
+
const type = message.collection.slice(0, -1);
|
|
41
|
+
|
|
42
|
+
// @ts-ignore
|
|
43
|
+
const publicPath = message?.catalog?.publicPath;
|
|
44
|
+
const schemaFilePath = message?.data?.schemaPath;
|
|
45
|
+
const schemaURL = path.join(publicPath, schemaFilePath || '')
|
|
46
|
+
|
|
47
|
+
---
|
|
48
|
+
|
|
49
|
+
<aside class="sticky top-28 left-0 space-y-8 h-full overflow-y-auto">
|
|
50
|
+
<div class="">
|
|
51
|
+
<PillList color="pink" title={`${type} Producers (${producerList.length})`} pills={producerList} emptyMessage={`This ${type} does not get produced by any services.`} client:load />
|
|
52
|
+
<PillList color="pink" title={`${type} Consumers (${consumerList.length})`} pills={consumerList} emptyMessage={`This ${type} does not get consumed by any services.`} client:load />
|
|
53
|
+
<OwnersList title={`${type} owners (${ownersList.length})`} owners={ownersList} emptyMessage={`This ${type} does not have any documented owners.`} client:load />
|
|
54
|
+
|
|
55
|
+
{message.data.versions && <VersionList versions={message.data.versions} collectionItem={message} />}
|
|
56
|
+
|
|
57
|
+
<div class="space-y-2">
|
|
58
|
+
{
|
|
59
|
+
message?.data?.schemaPath && (
|
|
60
|
+
<a
|
|
61
|
+
href={schemaURL}
|
|
62
|
+
download={`${message.data.name}(${message.data.version})-${schemaFilePath}`}
|
|
63
|
+
class="hidden w-full md:inline-flex h-10 justify-center px-4 py-2 border border-gray-300 shadow-sm text-sm font-medium rounded-md text-gray-200 bg-gray-800 hover:bg-gray-600 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-gray-900"
|
|
64
|
+
>
|
|
65
|
+
<>
|
|
66
|
+
<svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" aria-hidden="true" class="-ml-1 mr-2 h-5 w-5 text-gray-200">
|
|
67
|
+
<path stroke-linecap="round" stroke-linejoin="round" d="M4 16v1a3 3 0 003 3h10a3 3 0 003-3v-1m-4-4l-4 4m0 0l-4-4m4 4V4" />
|
|
68
|
+
</svg>
|
|
69
|
+
<span>Download Schema</span>
|
|
70
|
+
</>
|
|
71
|
+
</a>
|
|
72
|
+
)
|
|
73
|
+
}
|
|
74
|
+
<a
|
|
75
|
+
href={`/visualiser/${message.collection}/${message.data.id}/${message.data.version}`}
|
|
76
|
+
class="block text-center rounded-md w-full bg-white px-3.5 py-2.5 text-sm font-semibold text-gray-900 shadow-sm ring-1 ring-inset ring-gray-300 hover:bg-gray-100/60 hover:text-purple-500"
|
|
77
|
+
>View in Visualiser</a
|
|
78
|
+
>
|
|
79
|
+
</div>
|
|
80
|
+
</div>
|
|
81
|
+
</aside>
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
---
|
|
2
|
+
import OwnersList from '@components/Lists/OwnersList';
|
|
3
|
+
import PillList from '@components/Lists/PillList';
|
|
4
|
+
import VersionList from '@components/Lists/VersionList.astro';
|
|
5
|
+
import { getEntry, type CollectionEntry } from 'astro:content';
|
|
6
|
+
import { join } from 'node:path'
|
|
7
|
+
interface Props {
|
|
8
|
+
service: CollectionEntry<'services'>;
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
const { service } = Astro.props;
|
|
12
|
+
|
|
13
|
+
// @ts-ignore
|
|
14
|
+
const sends = service.data.sends as CollectionEntry<'events'>[] || [];
|
|
15
|
+
// @ts-ignore
|
|
16
|
+
const receives = service.data.receives as CollectionEntry<'events'>[] || [];
|
|
17
|
+
|
|
18
|
+
const ownersRaw = service.data?.owners || [];
|
|
19
|
+
const owners = await Promise.all(ownersRaw.map((o) => getEntry(o)));
|
|
20
|
+
|
|
21
|
+
const sendsList = sends.map((p) => ({
|
|
22
|
+
label: p.data.id,
|
|
23
|
+
badge: p.collection,
|
|
24
|
+
color: p.collection === 'events' ? 'orange' : 'blue',
|
|
25
|
+
tag: `v${p.data.version}`,
|
|
26
|
+
href: `/docs/${p.collection}/${p.data.id}/${p.data.version}`,
|
|
27
|
+
}));
|
|
28
|
+
const receivesList = receives.map((p) => ({
|
|
29
|
+
label: p.data.id,
|
|
30
|
+
badge: p.collection,
|
|
31
|
+
color: p.collection === 'events' ? 'orange' : 'blue',
|
|
32
|
+
tag: `v${p.data.version}`,
|
|
33
|
+
href: `/docs/${p.collection}/${p.data.id}/${p.data.version}`,
|
|
34
|
+
}));
|
|
35
|
+
|
|
36
|
+
const ownersList = owners.map((o) => ({
|
|
37
|
+
label: o.data.name,
|
|
38
|
+
type: o.collection,
|
|
39
|
+
badge: o.collection === 'users' ? o.data.role : 'Team',
|
|
40
|
+
avatarUrl: o.collection === 'users' ? o.data.avatarUrl : '',
|
|
41
|
+
href: `/docs/${o.collection}/${o.data.id}`,
|
|
42
|
+
}));
|
|
43
|
+
|
|
44
|
+
// @ts-ignore
|
|
45
|
+
const publicPath = service?.catalog?.publicPath;
|
|
46
|
+
const schemaFilePath = service?.data?.schemaPath;
|
|
47
|
+
const schemaURL = join(publicPath, schemaFilePath || '')
|
|
48
|
+
|
|
49
|
+
|
|
50
|
+
---
|
|
51
|
+
|
|
52
|
+
<aside class="sticky top-28 left-0 space-y-8 h-full overflow-y-auto">
|
|
53
|
+
<div id="sidebar-cta-portal">
|
|
54
|
+
<PillList title={`Receives Messages (${receivesList.length})`} pills={receivesList} emptyMessage={`This service does not receive any messages.`} color="orange" client:load />
|
|
55
|
+
<PillList title={`Sends Messages (${sendsList.length})`} pills={sendsList} emptyMessage={`This service does not send any messages.`} color="orange" client:load />
|
|
56
|
+
<OwnersList title={`Service owners (${ownersList.length})`} owners={ownersList} emptyMessage={`This service does not have any documented owners.`} client:load />
|
|
57
|
+
|
|
58
|
+
{service.data.versions && <VersionList versions={service.data.versions} collectionItem={service} />}
|
|
59
|
+
|
|
60
|
+
<div class="space-y-2">
|
|
61
|
+
{
|
|
62
|
+
service?.data?.schemaPath && (
|
|
63
|
+
<a
|
|
64
|
+
href={schemaURL}
|
|
65
|
+
download={`${service.data.name}(${service.data.version})-${schemaFilePath}`}
|
|
66
|
+
class="hidden w-full md:inline-flex h-10 justify-center px-4 py-2 border border-gray-300 shadow-sm text-sm font-medium rounded-md text-gray-200 bg-gray-800 hover:bg-gray-600 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-gray-900"
|
|
67
|
+
>
|
|
68
|
+
<>
|
|
69
|
+
<svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" aria-hidden="true" class="-ml-1 mr-2 h-5 w-5 text-gray-200">
|
|
70
|
+
<path stroke-linecap="round" stroke-linejoin="round" d="M4 16v1a3 3 0 003 3h10a3 3 0 003-3v-1m-4-4l-4 4m0 0l-4-4m4 4V4" />
|
|
71
|
+
</svg>
|
|
72
|
+
<span>Download Schema</span>
|
|
73
|
+
</>
|
|
74
|
+
</a>
|
|
75
|
+
)
|
|
76
|
+
}
|
|
77
|
+
<a href={`/visualiser/${service.collection}/${service.data.id}/${service.data.version}`} class="block text-center rounded-md w-full bg-white px-3.5 py-2.5 text-sm font-semibold text-gray-900 shadow-sm ring-1 ring-inset ring-gray-300 hover:bg-gray-100/60 hover:text-purple-500">View in Visualiser</a>
|
|
78
|
+
<a id="open-api-button" href={`/docs/${service.collection}/${service.data.id}/${service.data.version}/spec`} class="hidden text-center rounded-md w-full bg-white px-3.5 py-2.5 text-sm font-semibold text-gray-900 shadow-sm ring-1 ring-inset ring-gray-300 hover:bg-gray-100/60 hover:text-purple-500">View API spec</a>
|
|
79
|
+
</div>
|
|
80
|
+
</div>
|
|
81
|
+
</aside>
|
|
82
|
+
|
|
83
|
+
<script>
|
|
84
|
+
// If openapi-component is in the dom then show the button, when dom has loaded
|
|
85
|
+
document.addEventListener('DOMContentLoaded', () => {
|
|
86
|
+
const openApiComponent = document.getElementById('openapi-component');
|
|
87
|
+
const openApiButton = document.getElementById('open-api-button');
|
|
88
|
+
if (openApiComponent && openApiButton) {
|
|
89
|
+
openApiButton.style.display = 'block';
|
|
90
|
+
}
|
|
91
|
+
});
|
|
92
|
+
|
|
93
|
+
</script>
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { useEffect, useState } from 'react';
|
|
2
|
+
|
|
3
|
+
import React from 'react';
|
|
4
|
+
|
|
5
|
+
const DebouncedInput = ({
|
|
6
|
+
value: initialValue,
|
|
7
|
+
onChange,
|
|
8
|
+
debounce = 500,
|
|
9
|
+
...props
|
|
10
|
+
}: {
|
|
11
|
+
value: string | number;
|
|
12
|
+
onChange: (value: string | number) => void;
|
|
13
|
+
debounce?: number;
|
|
14
|
+
} & Omit<React.InputHTMLAttributes<HTMLInputElement>, 'onChange'>) => {
|
|
15
|
+
const [value, setValue] = useState(initialValue);
|
|
16
|
+
|
|
17
|
+
useEffect(() => {
|
|
18
|
+
setValue(initialValue);
|
|
19
|
+
}, [initialValue]);
|
|
20
|
+
|
|
21
|
+
useEffect(() => {
|
|
22
|
+
const timeout = setTimeout(() => {
|
|
23
|
+
onChange(value);
|
|
24
|
+
}, debounce);
|
|
25
|
+
|
|
26
|
+
return () => clearTimeout(timeout);
|
|
27
|
+
}, [value]);
|
|
28
|
+
|
|
29
|
+
return <input {...props} value={value} onChange={(e) => setValue(e.target.value)} />;
|
|
30
|
+
};
|
|
31
|
+
|
|
32
|
+
export default DebouncedInput;
|
|
@@ -0,0 +1,228 @@
|
|
|
1
|
+
import {
|
|
2
|
+
flexRender,
|
|
3
|
+
getCoreRowModel,
|
|
4
|
+
getFacetedMinMaxValues,
|
|
5
|
+
getFacetedRowModel,
|
|
6
|
+
getFacetedUniqueValues,
|
|
7
|
+
getFilteredRowModel,
|
|
8
|
+
getPaginationRowModel,
|
|
9
|
+
useReactTable,
|
|
10
|
+
type Column,
|
|
11
|
+
type ColumnFiltersState,
|
|
12
|
+
type Row,
|
|
13
|
+
} from '@tanstack/react-table';
|
|
14
|
+
import type { CollectionEntry } from 'astro:content';
|
|
15
|
+
import DebouncedInput from './DebouncedInput';
|
|
16
|
+
|
|
17
|
+
import { getColumnsByCollection } from './columns';
|
|
18
|
+
import { useMemo, useState } from 'react';
|
|
19
|
+
import type { CollectionTypes } from '@types';
|
|
20
|
+
|
|
21
|
+
declare module '@tanstack/react-table' {
|
|
22
|
+
// @ts-ignore
|
|
23
|
+
interface ColumnMeta<TData extends RowData, TValue> {
|
|
24
|
+
filterVariant?: 'collection' | 'name';
|
|
25
|
+
collectionFilterKey?: string;
|
|
26
|
+
showFilter?: boolean;
|
|
27
|
+
className?: string;
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
export const Table = ({
|
|
32
|
+
data: initialData,
|
|
33
|
+
collection,
|
|
34
|
+
mode = 'simple',
|
|
35
|
+
}: {
|
|
36
|
+
data: CollectionEntry<'events'>[];
|
|
37
|
+
collection: string;
|
|
38
|
+
mode: 'simple' | 'full';
|
|
39
|
+
}) => {
|
|
40
|
+
const [data, _setData] = useState(initialData);
|
|
41
|
+
const [columnFilters, setColumnFilters] = useState<ColumnFiltersState>([]);
|
|
42
|
+
|
|
43
|
+
const columns = useMemo(() => getColumnsByCollection(collection), [collection]);
|
|
44
|
+
|
|
45
|
+
const table = useReactTable({
|
|
46
|
+
// @ts-ignore
|
|
47
|
+
data,
|
|
48
|
+
columns,
|
|
49
|
+
onColumnFiltersChange: setColumnFilters,
|
|
50
|
+
getCoreRowModel: getCoreRowModel(),
|
|
51
|
+
getFilteredRowModel: getFilteredRowModel(),
|
|
52
|
+
getFacetedRowModel: getFacetedRowModel(), // client-side faceting
|
|
53
|
+
getFacetedUniqueValues: getFacetedUniqueValues(), // generate unique values for select filter/autocomplete
|
|
54
|
+
getFacetedMinMaxValues: getFacetedMinMaxValues(), // generate min/max values for range filter
|
|
55
|
+
getPaginationRowModel: getPaginationRowModel(),
|
|
56
|
+
state: {
|
|
57
|
+
columnFilters,
|
|
58
|
+
},
|
|
59
|
+
});
|
|
60
|
+
|
|
61
|
+
return (
|
|
62
|
+
<>
|
|
63
|
+
{/* <div className='text-right text-gray-400'>{table.getPrePaginationRowModel().rows.length} results</div> */}
|
|
64
|
+
<div className=" bg-gray-100/20 rounded-md border-2 border-gray-200 shadow-sm ">
|
|
65
|
+
<table className="min-w-full divide-y divide-gray-200 rounded-md ">
|
|
66
|
+
<thead className="bg-gray-200/50">
|
|
67
|
+
{table.getHeaderGroups().map((headerGroup) => (
|
|
68
|
+
<tr key={headerGroup.id} className="rounded-tl-lg">
|
|
69
|
+
{headerGroup.headers.map((header) => (
|
|
70
|
+
<th key={`${header.id}`} className="pl-4 pr-3 text-left text-sm font-semibold text-gray-800 sm:pl-0 ">
|
|
71
|
+
<div className="flex flex-col justify-start px-2 py-2 space-y-2">
|
|
72
|
+
<div className="text-md">
|
|
73
|
+
{header.isPlaceholder ? null : flexRender(header.column.columnDef.header, header.getContext())}
|
|
74
|
+
</div>
|
|
75
|
+
{/* @ts-ignore */}
|
|
76
|
+
<div className="">
|
|
77
|
+
{header.column.columnDef.meta?.showFilter !== false && <Filter column={header.column} />}
|
|
78
|
+
{header.column.columnDef.meta?.showFilter == false && <div className="h-10" />}
|
|
79
|
+
</div>
|
|
80
|
+
</div>
|
|
81
|
+
</th>
|
|
82
|
+
))}
|
|
83
|
+
</tr>
|
|
84
|
+
))}
|
|
85
|
+
</thead>
|
|
86
|
+
|
|
87
|
+
<tbody className="divide-y divide-gray-300 ">
|
|
88
|
+
{table.getRowModel().rows.map((row, index) => (
|
|
89
|
+
<tr key={`${row.id}-${index}`}>
|
|
90
|
+
{row.getVisibleCells().map((cell) => (
|
|
91
|
+
<td
|
|
92
|
+
key={cell.id}
|
|
93
|
+
className={`whitespace-nowrap py-4 pl-4 pr-3 text-sm font-medium text-gray-900 ${cell.column.columnDef.meta?.className}`}
|
|
94
|
+
>
|
|
95
|
+
{flexRender(cell.column.columnDef.cell, cell.getContext())}
|
|
96
|
+
</td>
|
|
97
|
+
))}
|
|
98
|
+
</tr>
|
|
99
|
+
))}
|
|
100
|
+
</tbody>
|
|
101
|
+
</table>
|
|
102
|
+
</div>
|
|
103
|
+
<div>
|
|
104
|
+
<div className="h-8" />
|
|
105
|
+
<div className="flex items-center gap-2 justify-end px-4 ">
|
|
106
|
+
<button
|
|
107
|
+
className="relative inline-flex items-center rounded-l-md bg-white px-2 py-1 text-gray-400 ring-1 ring-inset ring-gray-300 hover:bg-gray-50 focus:z-10"
|
|
108
|
+
onClick={() => table.setPageIndex(0)}
|
|
109
|
+
disabled={!table.getCanPreviousPage()}
|
|
110
|
+
>
|
|
111
|
+
{'<<'}
|
|
112
|
+
</button>
|
|
113
|
+
<button
|
|
114
|
+
className="relative inline-flex items-center bg-white px-2 py-1 text-gray-400 ring-1 ring-inset ring-gray-300 hover:bg-gray-50 focus:z-10"
|
|
115
|
+
onClick={() => table.previousPage()}
|
|
116
|
+
disabled={!table.getCanPreviousPage()}
|
|
117
|
+
>
|
|
118
|
+
{'<'}
|
|
119
|
+
</button>
|
|
120
|
+
<button
|
|
121
|
+
className="relative inline-flex items-center bg-white px-2 py-1 text-gray-400 ring-1 ring-inset ring-gray-300 hover:bg-gray-50 focus:z-10"
|
|
122
|
+
onClick={() => table.nextPage()}
|
|
123
|
+
disabled={!table.getCanNextPage()}
|
|
124
|
+
>
|
|
125
|
+
{'>'}
|
|
126
|
+
</button>
|
|
127
|
+
<button
|
|
128
|
+
className="relative inline-flex items-center rounded-r-md bg-white px-2 py-1 text-gray-400 ring-1 ring-inset ring-gray-300 hover:bg-gray-50 focus:z-10"
|
|
129
|
+
onClick={() => table.setPageIndex(table.getPageCount() - 1)}
|
|
130
|
+
disabled={!table.getCanNextPage()}
|
|
131
|
+
>
|
|
132
|
+
{'>>'}
|
|
133
|
+
</button>
|
|
134
|
+
<span className="flex items-center gap-1">
|
|
135
|
+
<div>Page</div>
|
|
136
|
+
<strong>
|
|
137
|
+
{table.getState().pagination.pageIndex + 1} of {table.getPageCount()}
|
|
138
|
+
</strong>
|
|
139
|
+
</span>
|
|
140
|
+
<span className="flex items-center gap-1">
|
|
141
|
+
| Go to page:
|
|
142
|
+
<input
|
|
143
|
+
type="number"
|
|
144
|
+
defaultValue={table.getState().pagination.pageIndex + 1}
|
|
145
|
+
onChange={(e) => {
|
|
146
|
+
const page = e.target.value ? Number(e.target.value) - 1 : 0;
|
|
147
|
+
table.setPageIndex(page);
|
|
148
|
+
}}
|
|
149
|
+
className="border border-gray-300 p-1 rounded w-16"
|
|
150
|
+
/>
|
|
151
|
+
</span>
|
|
152
|
+
<select
|
|
153
|
+
value={table.getState().pagination.pageSize}
|
|
154
|
+
onChange={(e) => {
|
|
155
|
+
table.setPageSize(Number(e.target.value));
|
|
156
|
+
}}
|
|
157
|
+
>
|
|
158
|
+
{[10, 20, 30, 40, 50].map((pageSize) => (
|
|
159
|
+
<option key={pageSize} value={pageSize}>
|
|
160
|
+
Show {pageSize}
|
|
161
|
+
</option>
|
|
162
|
+
))}
|
|
163
|
+
</select>
|
|
164
|
+
</div>
|
|
165
|
+
</div>
|
|
166
|
+
</>
|
|
167
|
+
);
|
|
168
|
+
};
|
|
169
|
+
|
|
170
|
+
function Filter({ column }: { column: Column<any, unknown> }) {
|
|
171
|
+
const { filterVariant, collectionFilterKey = '' } = column.columnDef.meta ?? {};
|
|
172
|
+
|
|
173
|
+
const columnFilterValue = column.getFilterValue();
|
|
174
|
+
|
|
175
|
+
const sortedUniqueValues = useMemo(() => {
|
|
176
|
+
if (filterVariant === 'collection') {
|
|
177
|
+
const rows = column.getFacetedRowModel().rows;
|
|
178
|
+
const data = rows
|
|
179
|
+
.map((row: Row<CollectionEntry<CollectionTypes>>) => {
|
|
180
|
+
// @ts-ignore
|
|
181
|
+
const items = row.original.data[collectionFilterKey];
|
|
182
|
+
return items as CollectionEntry<CollectionTypes>[];
|
|
183
|
+
})
|
|
184
|
+
.flat();
|
|
185
|
+
|
|
186
|
+
const allItems = data.map((item) => `${item.data.name} (v${item.data.version})`);
|
|
187
|
+
const uniqueItemsInList = Array.from(new Set(allItems));
|
|
188
|
+
|
|
189
|
+
return uniqueItemsInList.sort().slice(0, 2000);
|
|
190
|
+
}
|
|
191
|
+
if (filterVariant === 'name') {
|
|
192
|
+
const rows = column.getFacetedRowModel().rows;
|
|
193
|
+
const data = rows
|
|
194
|
+
.map((row: Row<CollectionEntry<CollectionTypes>>) => {
|
|
195
|
+
// @ts-ignore
|
|
196
|
+
const data = row.original;
|
|
197
|
+
return data as CollectionEntry<CollectionTypes>;
|
|
198
|
+
})
|
|
199
|
+
.flat();
|
|
200
|
+
|
|
201
|
+
const allItems = data.map((item) => `${item.data.name} (v${item.data.version})`);
|
|
202
|
+
const uniqueItemsInList = Array.from(new Set(allItems));
|
|
203
|
+
|
|
204
|
+
return uniqueItemsInList.sort().slice(0, 2000);
|
|
205
|
+
}
|
|
206
|
+
return Array.from(column.getFacetedUniqueValues().keys()).sort().slice(0, 2000);
|
|
207
|
+
}, [column.getFacetedUniqueValues(), filterVariant]);
|
|
208
|
+
|
|
209
|
+
return (
|
|
210
|
+
<>
|
|
211
|
+
{/* Autocomplete suggestions from faceted values feature */}
|
|
212
|
+
<datalist id={column.id + 'list'}>
|
|
213
|
+
{sortedUniqueValues.map((value: any, index) => (
|
|
214
|
+
<option value={value} key={`${value}-${index}`} />
|
|
215
|
+
))}
|
|
216
|
+
</datalist>
|
|
217
|
+
<DebouncedInput
|
|
218
|
+
type="text"
|
|
219
|
+
value={(columnFilterValue ?? '') as string}
|
|
220
|
+
onChange={(value) => column.setFilterValue(value)}
|
|
221
|
+
placeholder={`Search... ${!column?.columnDef?.meta?.filterVariant ? `(${column.getFacetedUniqueValues().size})` : ''}`}
|
|
222
|
+
className="w-full p-2 border shadow rounded"
|
|
223
|
+
list={column.id + 'list'}
|
|
224
|
+
/>
|
|
225
|
+
<div className="h-1" />
|
|
226
|
+
</>
|
|
227
|
+
);
|
|
228
|
+
}
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
import { ServerIcon } from '@heroicons/react/20/solid';
|
|
2
|
+
import { RectangleGroupIcon } from '@heroicons/react/20/solid';
|
|
3
|
+
import { createColumnHelper } from '@tanstack/react-table';
|
|
4
|
+
import type { CollectionEntry } from 'astro:content';
|
|
5
|
+
import { filterByName, filterCollectionByName } from '../filters/custom-filters';
|
|
6
|
+
|
|
7
|
+
const columnHelper = createColumnHelper<CollectionEntry<'domains'>>();
|
|
8
|
+
|
|
9
|
+
export const columns = () => [
|
|
10
|
+
columnHelper.accessor('data.name', {
|
|
11
|
+
id: 'name',
|
|
12
|
+
header: () => <span>Domain</span>,
|
|
13
|
+
cell: (info) => {
|
|
14
|
+
const messageRaw = info.row.original;
|
|
15
|
+
const color = 'yellow';
|
|
16
|
+
return (
|
|
17
|
+
<div className=" group ">
|
|
18
|
+
<a
|
|
19
|
+
href={`/docs/${messageRaw.collection}/${messageRaw.data.id}/${messageRaw.data.version}`}
|
|
20
|
+
className={`group-hover:text-${color}-500 flex space-x-1 items-center`}
|
|
21
|
+
>
|
|
22
|
+
<div className={`flex items-center border border-gray-300 shadow-sm rounded-md group-hover:border-${color}-400`}>
|
|
23
|
+
<span className="flex items-center">
|
|
24
|
+
<span className={`bg-${color}-500 group-hover:bg-${color}-600 h-full rounded-tl rounded-bl p-1`}>
|
|
25
|
+
<RectangleGroupIcon className="h-4 w-4 text-white" />
|
|
26
|
+
</span>
|
|
27
|
+
<span className="leading-none px-2 group-hover:underline group-hover:text-purple-500 font-light">
|
|
28
|
+
{messageRaw.data.name} (v{messageRaw.data.version})
|
|
29
|
+
</span>
|
|
30
|
+
</span>
|
|
31
|
+
</div>
|
|
32
|
+
</a>
|
|
33
|
+
</div>
|
|
34
|
+
);
|
|
35
|
+
},
|
|
36
|
+
footer: (info) => info.column.id,
|
|
37
|
+
meta: {
|
|
38
|
+
filterVariant: 'name',
|
|
39
|
+
},
|
|
40
|
+
filterFn: filterByName,
|
|
41
|
+
}),
|
|
42
|
+
// columnHelper.accessor('data.version', {
|
|
43
|
+
// header: () => <span>Version</span>,
|
|
44
|
+
// cell: (info) => {
|
|
45
|
+
// const service = info.row.original;
|
|
46
|
+
// return <div className="text-left font-light">{`v${info.getValue()} ${service.data.latestVersion === service.data.version ? '(latest)': ''}`}</div>
|
|
47
|
+
// },
|
|
48
|
+
// footer: (info) => info.column.id,
|
|
49
|
+
// }),
|
|
50
|
+
columnHelper.accessor('data.summary', {
|
|
51
|
+
id: 'summary',
|
|
52
|
+
header: () => 'Summary',
|
|
53
|
+
cell: (info) => <span className="font-light ">{info.renderValue()}</span>,
|
|
54
|
+
footer: (info) => info.column.id,
|
|
55
|
+
meta: {
|
|
56
|
+
showFilter: false,
|
|
57
|
+
},
|
|
58
|
+
}),
|
|
59
|
+
columnHelper.accessor('data.services', {
|
|
60
|
+
header: () => <span>Services</span>,
|
|
61
|
+
meta: {
|
|
62
|
+
filterVariant: 'collection',
|
|
63
|
+
collectionFilterKey: 'services',
|
|
64
|
+
},
|
|
65
|
+
cell: (info) => {
|
|
66
|
+
const services = info.getValue();
|
|
67
|
+
if (services?.length === 0 || !services)
|
|
68
|
+
return <div className="text-sm text-gray-400/80 text-left italic">Domain has no services.</div>;
|
|
69
|
+
|
|
70
|
+
return (
|
|
71
|
+
<ul>
|
|
72
|
+
{services.map((consumer: any) => {
|
|
73
|
+
const color = 'pink';
|
|
74
|
+
return (
|
|
75
|
+
<li key={consumer.data.id} className="py-1 group ">
|
|
76
|
+
<a
|
|
77
|
+
href={`/docs/${consumer.collection}/${consumer.data.id}/${consumer.data.version}`}
|
|
78
|
+
className="group-hover:text-purple-500 flex space-x-1 items-center "
|
|
79
|
+
>
|
|
80
|
+
<div className={`flex items-center border border-gray-300 rounded-md`}>
|
|
81
|
+
<span className="flex items-center">
|
|
82
|
+
<span className={`bg-${color}-500 h-full rounded-tl rounded-bl p-1`}>
|
|
83
|
+
<ServerIcon className="h-4 w-4 text-white" />
|
|
84
|
+
</span>
|
|
85
|
+
<span className="leading-none px-2 group-hover:underline font-light ">
|
|
86
|
+
{consumer.data.name} (v{consumer.data.version})
|
|
87
|
+
</span>
|
|
88
|
+
</span>
|
|
89
|
+
</div>
|
|
90
|
+
</a>
|
|
91
|
+
</li>
|
|
92
|
+
);
|
|
93
|
+
})}
|
|
94
|
+
</ul>
|
|
95
|
+
);
|
|
96
|
+
},
|
|
97
|
+
// footer: (info) => info.column.id,
|
|
98
|
+
filterFn: filterCollectionByName('services'),
|
|
99
|
+
}),
|
|
100
|
+
columnHelper.accessor('data.name', {
|
|
101
|
+
header: () => <span />,
|
|
102
|
+
cell: (info) => {
|
|
103
|
+
const domain = info.row.original;
|
|
104
|
+
return (
|
|
105
|
+
<a
|
|
106
|
+
className="hover:text-purple-500 hover:underline px-4 font-light"
|
|
107
|
+
href={`/visualiser/${domain.collection}/${domain.data.id}/${domain.data.version}`}
|
|
108
|
+
>
|
|
109
|
+
Visualiser →
|
|
110
|
+
</a>
|
|
111
|
+
);
|
|
112
|
+
},
|
|
113
|
+
id: 'actions',
|
|
114
|
+
meta: {
|
|
115
|
+
showFilter: false,
|
|
116
|
+
},
|
|
117
|
+
}),
|
|
118
|
+
];
|