This is an automated email from the ASF dual-hosted git repository.
junma pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/pulsar-site.git
The following commit(s) were added to refs/heads/main by this push:
new bbbed35e44f [feat] Add client matrix page (#513)
bbbed35e44f is described below
commit bbbed35e44fab3cbc5f2ef673ce7f104e1908392
Author: Li Li <[email protected]>
AuthorDate: Thu May 4 16:37:38 2023 +0800
[feat] Add client matrix page (#513)
* matrix page with demo datas
Signed-off-by: Li Li <[email protected]>
* update
Signed-off-by: Li Li <[email protected]>
* update
Signed-off-by: Li Li <[email protected]>
* update
Signed-off-by: Li Li <[email protected]>
* update
Signed-off-by: Li Li <[email protected]>
* update
Signed-off-by: Li Li <[email protected]>
* update
Signed-off-by: Li Li <[email protected]>
* update
Signed-off-by: Li Li <[email protected]>
* update
Signed-off-by: Li Li <[email protected]>
* update
Signed-off-by: Li Li <[email protected]>
* update
Signed-off-by: Li Li <[email protected]>
* update
Signed-off-by: Li Li <[email protected]>
* update
Signed-off-by: Li Li <[email protected]>
* update
Signed-off-by: Li Li <[email protected]>
* run yarn install
Signed-off-by: tison <[email protected]>
* update
Signed-off-by: Li Li <[email protected]>
* update
Signed-off-by: Li Li <[email protected]>
---------
Signed-off-by: Li Li <[email protected]>
Signed-off-by: tison <[email protected]>
Co-authored-by: tison <[email protected]>
---
client-feature-matrix/index.mdx | 29 ++
data/matrix.js | 886 ++++++++++++++++++++++++++++++++++++++++
docusaurus.config.js | 10 +
package.json | 1 +
src/components/Matrix/matrix.js | 29 ++
src/components/Matrix/util.js | 123 ++++++
src/css/custom.css | 32 +-
yarn.lock | 66 ++-
8 files changed, 1174 insertions(+), 2 deletions(-)
diff --git a/client-feature-matrix/index.mdx b/client-feature-matrix/index.mdx
new file mode 100644
index 00000000000..c7bd669acd4
--- /dev/null
+++ b/client-feature-matrix/index.mdx
@@ -0,0 +1,29 @@
+---
+id: pulsar-client-feaure-matrix
+title: Pulsar Client Feaure Matrix
+sidebar_label: Pulsar Client Feaure Matrix
+---
+
+import Matrix from "../src/components/Matrix/matrix";
+import {
+ languages,
+ client,
+ producer,
+ reader,
+ consumer,
+ tableview,
+} from "../data/matrix.js";
+
+### Client
+
+<Matrix data={client} name="client" />
+
+### Producer
+
+<Matrix data={producer} name="producer" />
+
+### Consumer
+
+<Matrix data={consumer} name="consumer" />
+
+See details and full version
[here](https://docs.google.com/spreadsheets/d/1YHYTkIXR8-Ql103u-IMI18TXLlGStK8uJjDsOOA0T20/edit?usp=sharing)
\ No newline at end of file
diff --git a/data/matrix.js b/data/matrix.js
new file mode 100644
index 00000000000..a007b873313
--- /dev/null
+++ b/data/matrix.js
@@ -0,0 +1,886 @@
+module.exports = {
+ languages: [
+ "Java",
+ "C++",
+ "Go",
+ "Python",
+ "Node.js",
+ "C#/DotPulsar",
+ "Websocket",
+ "REST",
+ ".NET (C#/F#/VB)",
+ ],
+ client: [
+ {
+ Feature: "TLS encryption",
+ Java: 2,
+ "C++": 2,
+ Go: 2,
+ Python: 2,
+ Nodejs: 2,
+ "C#/DotPulsar": 2,
+ Websocket: 0,
+ REST: 0,
+ "NET(C#/F#/VB)": 2,
+ },
+ {
+ Feature: "Authentication",
+ Children: [
+ {
+ Feature: "JWT",
+ Java: 2,
+ "C++": 2,
+ Go: 2,
+ Python: 2,
+ Nodejs: 2,
+ "C#/DotPulsar": 2,
+ Websocket: 0,
+ REST: 0,
+ "NET(C#/F#/VB)": 2,
+ },
+ {
+ Feature: "mTLS",
+ Java: 2,
+ "C++": 2,
+ Go: 2,
+ Python: 2,
+ Nodejs: 2,
+ "C#/DotPulsar": 2,
+ Websocket: 0,
+ REST: 0,
+ "NET(C#/F#/VB)": 2,
+ },
+ {
+ Feature: "Kerberos",
+ Java: 2,
+ "C++": 0,
+ Go: 0,
+ Python: 0,
+ Nodejs: 0,
+ "C#/DotPulsar": 0,
+ Websocket: 0,
+ REST: 0,
+ "NET(C#/F#/VB)": 0,
+ },
+ {
+ Feature: "OAuth2",
+ Java: 2,
+ "C++": 2,
+ Go: 2,
+ Python: 2,
+ Nodejs: 2,
+ "C#/DotPulsar": 0,
+ Websocket: 0,
+ REST: 0,
+ "NET(C#/F#/VB)": 2,
+ },
+ {
+ Feature: "Athenz",
+ Java: 2,
+ "C++": 0,
+ Go: 2,
+ Python: 0,
+ Nodejs: 0,
+ "C#/DotPulsar": 0,
+ Websocket: 0,
+ REST: 0,
+ "NET(C#/F#/VB)": 0,
+ },
+ {
+ Feature: "HTTP Basic",
+ Java: 2,
+ "C++": 2,
+ Go: 2,
+ Python: 2,
+ Nodejs: 0,
+ "C#/DotPulsar": 0,
+ Websocket: 0,
+ REST: 0,
+ "NET(C#/F#/VB)": 0,
+ },
+ ],
+ },
+ {
+ Feature: "Transaction",
+ Java: 2,
+ "C++": 0,
+ Go: 0,
+ Python: 0,
+ Nodejs: 0,
+ "C#/DotPulsar": 0,
+ Websocket: 0,
+ REST: 0,
+ "NET(C#/F#/VB)": 2,
+ },
+ {
+ Feature: "Cluster-level failover",
+ Java: 2,
+ "C++": 0,
+ Go: 0,
+ Python: 0,
+ Nodejs: 0,
+ "C#/DotPulsar": 0,
+ Websocket: 0,
+ REST: 0,
+ "NET(C#/F#/VB)": 0,
+ },
+ {
+ Feature: "Multi-host service",
+ Java: 2,
+ "C++": 2,
+ Go: 2,
+ Python: 2,
+ Nodejs: 2,
+ "C#/DotPulsar": 0,
+ Websocket: 0,
+ REST: 0,
+ "NET(C#/F#/VB)": 2,
+ },
+ {
+ Feature: "Statistics",
+ Java: 2,
+ "C++": 0,
+ Go: 0,
+ Python: 0,
+ Nodejs: 0,
+ "C#/DotPulsar": 0,
+ Websocket: 0,
+ REST: 0,
+ "NET(C#/F#/VB)": 2,
+ },
+ {
+ Feature: "Proxy",
+ Java: 2,
+ "C++": 2,
+ Go: 2,
+ Python: 2,
+ Nodejs: 2,
+ "C#/DotPulsar": 2,
+ Websocket: 2,
+ REST: 0,
+ "NET(C#/F#/VB)": 2,
+ },
+ {
+ Feature: "Reconnection",
+ Java: 2,
+ "C++": 2,
+ Go: 2,
+ Python: 2,
+ Nodejs: 2,
+ "C#/DotPulsar": 2,
+ Websocket: 2,
+ REST: 0,
+ "NET(C#/F#/VB)": 2,
+ },
+ ],
+ producer: [
+ {
+ Feature: "Batching",
+ Java: 2,
+ "C++": 2,
+ Go: 2,
+ Python: 2,
+ Nodejs: 2,
+ "C#/DotPulsar": 0,
+ Websocket: 2,
+ REST: 0,
+ "NET(C#/F#/VB)": 2,
+ },
+ {
+ Feature: "Chunking",
+ Java: 2,
+ "C++": 2,
+ Go: 2,
+ Python: 2,
+ Nodejs: 2,
+ "C#/DotPulsar": 0,
+ Websocket: 0,
+ REST: 0,
+ "NET(C#/F#/VB)": 2,
+ },
+ {
+ Feature: "Delayed message delivery",
+ Java: 2,
+ "C++": 2,
+ Go: 2,
+ Python: 2,
+ Nodejs: 2,
+ "C#/DotPulsar": 2,
+ Websocket: 0,
+ REST: 2,
+ "NET(C#/F#/VB)": 2,
+ },
+ {
+ Feature: "Compression",
+ Children: [
+ {
+ Feature: "LZ4",
+ Java: 2,
+ "C++": 2,
+ Go: 2,
+ Python: 2,
+ Nodejs: 2,
+ "C#/DotPulsar": 2,
+ Websocket: 2,
+ REST: 0,
+ "NET(C#/F#/VB)": 2,
+ },
+ {
+ Feature: "ZLIB",
+ Java: 2,
+ "C++": 2,
+ Go: 2,
+ Python: 2,
+ Nodejs: 2,
+ "C#/DotPulsar": 2,
+ Websocket: 0,
+ REST: 0,
+ "NET(C#/F#/VB)": 2,
+ },
+ {
+ Feature: "ZSTD",
+ Java: 2,
+ "C++": 2,
+ Go: 2,
+ Python: 2,
+ Nodejs: 2,
+ "C#/DotPulsar": 2,
+ Websocket: 0,
+ REST: 0,
+ "NET(C#/F#/VB)": 2,
+ },
+ {
+ Feature: "SNAPPY",
+ Java: 2,
+ "C++": 2,
+ Go: 2,
+ Python: 2,
+ Nodejs: 2,
+ "C#/DotPulsar": 2,
+ Websocket: 0,
+ REST: 0,
+ "NET(C#/F#/VB)": 2,
+ },
+ ],
+ },
+ {
+ Feature: "Schema",
+ Children: [
+ {
+ Feature: "Primitive",
+ Java: 2,
+ "C++": 2,
+ Go: 2,
+ Python: 2,
+ Nodejs: 2,
+ "C#/DotPulsar": 2,
+ Websocket: 0,
+ REST: 2,
+ "NET(C#/F#/VB)": 2,
+ },
+ {
+ Feature: "Avro",
+ Java: 2,
+ "C++": 2,
+ Go: 2,
+ Python: 2,
+ Nodejs: 2,
+ "C#/DotPulsar": 0,
+ Websocket: 0,
+ REST: 2,
+ "NET(C#/F#/VB)": 2,
+ },
+ {
+ Feature: "JSON",
+ Java: 2,
+ "C++": 2,
+ Go: 2,
+ Python: 2,
+ Nodejs: 2,
+ "C#/DotPulsar": 0,
+ Websocket: 0,
+ REST: 2,
+ "NET(C#/F#/VB)": 2,
+ },
+ {
+ Feature: "Protobuf",
+ Java: 2,
+ "C++": 2,
+ Go: 2,
+ Python: 0,
+ Nodejs: 0,
+ "C#/DotPulsar": 0,
+ Websocket: 0,
+ REST: 0,
+ "NET(C#/F#/VB)": 2,
+ },
+ {
+ Feature: "Protobuf-native",
+ Java: 2,
+ "C++": 2,
+ Go: 2,
+ Python: 0,
+ Nodejs: 0,
+ "C#/DotPulsar": 0,
+ Websocket: 0,
+ REST: 0,
+ "NET(C#/F#/VB)": 2,
+ },
+ {
+ Feature: "Native avro",
+ Java: 2,
+ "C++": 0,
+ Go: 0,
+ Python: 0,
+ Nodejs: 0,
+ "C#/DotPulsar": 0,
+ Websocket: 0,
+ REST: 0,
+ "NET(C#/F#/VB)": 0,
+ },
+ {
+ Feature: "KeyValue",
+ Java: 2,
+ "C++": 2,
+ Go: 0,
+ Python: 0,
+ Nodejs: 0,
+ "C#/DotPulsar": 0,
+ Websocket: 2,
+ REST: 2,
+ "NET(C#/F#/VB)": 2,
+ },
+ {
+ Feature: "Autoschema",
+ Java: 2,
+ "C++": 0,
+ Go: 0,
+ Python: 0,
+ Nodejs: 0,
+ "C#/DotPulsar": 0,
+ Websocket: 0,
+ REST: 0,
+ "NET(C#/F#/VB)": 2,
+ },
+ ],
+ },
+ {
+ Feature: "Transaction",
+ Java: 2,
+ "C++": 0,
+ Go: 0,
+ Python: 0,
+ Nodejs: 0,
+ "C#/DotPulsar": 0,
+ Websocket: 0,
+ REST: 0,
+ "NET(C#/F#/VB)": 2,
+ },
+ {
+ Feature: "End-to-end encryption",
+ Java: 2,
+ "C++": 2,
+ Go: 2,
+ Python: 2,
+ Nodejs: 2,
+ "C#/DotPulsar": 0,
+ Websocket: 0,
+ REST: 0,
+ "NET(C#/F#/VB)": 2,
+ },
+ {
+ Feature: "Sync | Async Send",
+ Java: 2,
+ "C++": 2,
+ Go: 2,
+ Python: 2,
+ Nodejs: 2,
+ "C#/DotPulsar": 2,
+ Websocket: 2,
+ REST: 0,
+ "NET(C#/F#/VB)": 2,
+ },
+ ],
+ consumer: [
+ {
+ Feature: "ACK",
+ Children: [
+ {
+ Feature: "Batch-Index ACK",
+ Java: 2,
+ "C++": 0,
+ Go: 0,
+ Python: 0,
+ Nodejs: 0,
+ "C#/DotPulsar": 0,
+ Websocket: 0,
+ REST: 0,
+ "NET(C#/F#/VB)": 2,
+ },
+ {
+ Feature: "ACK Timeout",
+ Java: 2,
+ "C++": 2,
+ Go: 0,
+ Python: 2,
+ Nodejs: 2,
+ "C#/DotPulsar": 0,
+ Websocket: 0,
+ REST: 0,
+ "NET(C#/F#/VB)": 2,
+ },
+ {
+ Feature: "NACK",
+ Java: 2,
+ "C++": 2,
+ Go: 2,
+ Python: 2,
+ Nodejs: 2,
+ "C#/DotPulsar": 0,
+ Websocket: 0,
+ REST: 0,
+ "NET(C#/F#/VB)": 2,
+ },
+ {
+ Feature: "NACK Backoff",
+ Java: 2,
+ "C++": 0,
+ Go: 0,
+ Python: 0,
+ Nodejs: 0,
+ "C#/DotPulsar": 0,
+ Websocket: 0,
+ REST: 0,
+ "NET(C#/F#/VB)": 0,
+ },
+ ],
+ },
+ {
+ Feature: "Batching",
+ Java: 2,
+ "C++": 2,
+ Go: 2,
+ Python: 2,
+ Nodejs: 2,
+ "C#/DotPulsar": 2,
+ Websocket: 2,
+ REST: 0,
+ "NET(C#/F#/VB)": 2,
+ },
+ {
+ Feature: "Chunking",
+ Java: 2,
+ "C++": 2,
+ Go: 2,
+ Python: 2,
+ Nodejs: 2,
+ "C#/DotPulsar": 0,
+ Websocket: 0,
+ REST: 0,
+ "NET(C#/F#/VB)": 2,
+ },
+ {
+ Feature: "Seek",
+ Children: [
+ {
+ Feature: "by timestamp",
+ Java: 2,
+ "C++": 2,
+ Go: 2,
+ Python: 2,
+ Nodejs: 2,
+ "C#/DotPulsar": 2,
+ Websocket: 0,
+ REST: 0,
+ "NET(C#/F#/VB)": 2,
+ },
+ {
+ Feature: "by messageID",
+ Java: 2,
+ "C++": 2,
+ Go: 2,
+ Python: 2,
+ Nodejs: 0,
+ "C#/DotPulsar": 2,
+ Websocket: 0,
+ REST: 0,
+ "NET(C#/F#/VB)": 2,
+ },
+ {
+ Feature: "Inclusive/Non-inclusive",
+ Java: 2,
+ "C++": 2,
+ Go: 2,
+ Python: 2,
+ Nodejs: 0,
+ "C#/DotPulsar": 2,
+ Websocket: 0,
+ REST: 0,
+ "NET(C#/F#/VB)": 2,
+ },
+ ],
+ },
+ {
+ Feature: "Subscription type",
+ Java: 2,
+ "C++": 2,
+ Go: 2,
+ Python: 2,
+ Nodejs: 2,
+ "C#/DotPulsar": 2,
+ Websocket: 2,
+ REST: 0,
+ "NET(C#/F#/VB)": 2,
+ },
+ {
+ Feature: "Subscription mode",
+ Java: 2,
+ "C++": 0,
+ Go: 2,
+ Python: 0,
+ Nodejs: 0,
+ "C#/DotPulsar": 0,
+ Websocket: 0,
+ REST: 0,
+ "NET(C#/F#/VB)": 2,
+ },
+ {
+ Feature: "Retry letter topic",
+ Java: 2,
+ "C++": 0,
+ Go: 2,
+ Python: 0,
+ Nodejs: 0,
+ "C#/DotPulsar": 0,
+ Websocket: 0,
+ REST: 0,
+ "NET(C#/F#/VB)": 2,
+ },
+ {
+ Feature: "Dead letter topic",
+ Java: 2,
+ "C++": 0,
+ Go: 2,
+ Python: 0,
+ Nodejs: 0,
+ "C#/DotPulsar": 0,
+ Websocket: 2,
+ REST: 0,
+ "NET(C#/F#/VB)": 2,
+ },
+ {
+ Feature: "Compression",
+ Children: [
+ {
+ Feature: "LZ4",
+ Java: 2,
+ "C++": 2,
+ Go: 2,
+ Python: 2,
+ Nodejs: 2,
+ "C#/DotPulsar": 2,
+ Websocket: 2,
+ REST: 0,
+ "NET(C#/F#/VB)": 2,
+ },
+ {
+ Feature: "ZLIB",
+ Java: 2,
+ "C++": 2,
+ Go: 2,
+ Python: 2,
+ Nodejs: 2,
+ "C#/DotPulsar": 2,
+ Websocket: 0,
+ REST: 0,
+ "NET(C#/F#/VB)": 2,
+ },
+ {
+ Feature: "ZSTD",
+ Java: 2,
+ "C++": 2,
+ Go: 2,
+ Python: 2,
+ Nodejs: 2,
+ "C#/DotPulsar": 2,
+ Websocket: 0,
+ REST: 0,
+ "NET(C#/F#/VB)": 2,
+ },
+ {
+ Feature: "SNAPPY",
+ Java: 2,
+ "C++": 2,
+ Go: 0,
+ Python: 2,
+ Nodejs: 2,
+ "C#/DotPulsar": 2,
+ Websocket: 0,
+ REST: 0,
+ "NET(C#/F#/VB)": 2,
+ },
+ ],
+ },
+ {
+ Feature: "Compaction",
+ Java: 2,
+ "C++": 2,
+ Go: 2,
+ Python: 2,
+ Nodejs: 2,
+ "C#/DotPulsar": 2,
+ Websocket: 0,
+ REST: 0,
+ "NET(C#/F#/VB)": 2,
+ },
+ {
+ Feature: "Schema",
+ Children: [
+ {
+ Feature: "Primitive",
+ Java: 2,
+ "C++": 2,
+ Go: 2,
+ Python: 2,
+ Nodejs: 2,
+ "C#/DotPulsar": 2,
+ Websocket: 0,
+ REST: 0,
+ "NET(C#/F#/VB)": 2,
+ },
+ {
+ Feature: "Avro",
+ Java: 2,
+ "C++": 2,
+ Go: 2,
+ Python: 2,
+ Nodejs: 2,
+ "C#/DotPulsar": 0,
+ Websocket: 0,
+ REST: 0,
+ "NET(C#/F#/VB)": 2,
+ },
+ {
+ Feature: "JSON",
+ Java: 2,
+ "C++": 2,
+ Go: 2,
+ Python: 2,
+ Nodejs: 2,
+ "C#/DotPulsar": 0,
+ Websocket: 0,
+ REST: 0,
+ "NET(C#/F#/VB)": 2,
+ },
+ {
+ Feature: "Protobuf",
+ Java: 2,
+ "C++": 2,
+ Go: 2,
+ Python: 0,
+ Nodejs: 0,
+ "C#/DotPulsar": 0,
+ Websocket: 0,
+ REST: 0,
+ "NET(C#/F#/VB)": 2,
+ },
+ {
+ Feature: "Protobuf-native",
+ Java: 0,
+ "C++": 0,
+ Go: 0,
+ Python: 0,
+ Nodejs: 0,
+ "C#/DotPulsar": 0,
+ Websocket: 0,
+ REST: 0,
+ "NET(C#/F#/VB)": 2,
+ },
+ {
+ Feature: "Native avro",
+ Java: 0,
+ "C++": 0,
+ Go: 0,
+ Python: 0,
+ Nodejs: 0,
+ "C#/DotPulsar": 0,
+ Websocket: 0,
+ REST: 0,
+ "NET(C#/F#/VB)": 0,
+ },
+ {
+ Feature: "KeyValue",
+ Java: 2,
+ "C++": 2,
+ Go: 0,
+ Python: 0,
+ Nodejs: 0,
+ "C#/DotPulsar": 0,
+ Websocket: 2,
+ REST: 0,
+ "NET(C#/F#/VB)": 2,
+ },
+ {
+ Feature: "Autoschema",
+ Java: 2,
+ "C++": 0,
+ Go: 0,
+ Python: 0,
+ Nodejs: 0,
+ "C#/DotPulsar": 0,
+ Websocket: 0,
+ REST: 0,
+ "NET(C#/F#/VB)": 2,
+ },
+ ],
+ },
+ {
+ Feature: "End-to-end encryption",
+ Java: 2,
+ "C++": 2,
+ Go: 2,
+ Python: 2,
+ Nodejs: 2,
+ "C#/DotPulsar": 2,
+ Websocket: 2,
+ REST: 2,
+ "NET(C#/F#/VB)": 2,
+ },
+ {
+ Feature: "Transaction",
+ Java: 2,
+ "C++": 0,
+ Go: 0,
+ Python: 0,
+ Nodejs: 0,
+ "C#/DotPulsar": 0,
+ Websocket: 0,
+ REST: 0,
+ "NET(C#/F#/VB)": 2,
+ },
+ ],
+ reader: [
+ {
+ Feature: "Batching",
+ Java: 2,
+ "C++": 2,
+ Go: 2,
+ Python: 2,
+ Nodejs: 2,
+ "C#/DotPulsar": 2,
+ Websocket: 2,
+ REST: 0,
+ "NET(C#/F#/VB)": 2,
+ },
+ {
+ Feature: "Chunking",
+ Java: 2,
+ "C++": 0,
+ Go: 2,
+ Python: 0,
+ Nodejs: 0,
+ "C#/DotPulsar": 0,
+ Websocket: 0,
+ REST: 0,
+ "NET(C#/F#/VB)": 2,
+ },
+ {
+ Feature: "Seek",
+ Java: 2,
+ "C++": 2,
+ Go: 2,
+ Python: 1,
+ Nodejs: 1,
+ "C#/DotPulsar": 2,
+ Websocket: 0,
+ REST: 0,
+ "NET(C#/F#/VB)": 2,
+ },
+ {
+ Feature: "Compression",
+ Java: 2,
+ "C++": 2,
+ Go: 1,
+ Python: 2,
+ Nodejs: 2,
+ "C#/DotPulsar": 2,
+ Websocket: 1,
+ REST: 0,
+ "NET(C#/F#/VB)": 2,
+ },
+ {
+ Feature: "Compaction",
+ Java: 2,
+ "C++": 2,
+ Go: 2,
+ Python: 2,
+ Nodejs: 2,
+ "C#/DotPulsar": 2,
+ Websocket: 0,
+ REST: 0,
+ "NET(C#/F#/VB)": 2,
+ },
+ {
+ Feature: "Schema",
+ Java: 2,
+ "C++": 1,
+ Go: 1,
+ Python: 1,
+ Nodejs: 1,
+ "C#/DotPulsar": 1,
+ Websocket: 0,
+ REST: 0,
+ "NET(C#/F#/VB)": 1,
+ },
+ {
+ Feature: "End-to-end encryption",
+ Java: 2,
+ "C++": 2,
+ Go: 2,
+ Python: 2,
+ Nodejs: 0,
+ "C#/DotPulsar": 0,
+ Websocket: 0,
+ REST: 0,
+ "NET(C#/F#/VB)": 2,
+ },
+ ],
+ tableview: [
+ {
+ Feature: "Compaction",
+ Java: 2,
+ "C++": 0,
+ Go: 2,
+ Python: 2,
+ Nodejs: 0,
+ "C#/DotPulsar": 0,
+ Websocket: 0,
+ REST: 0,
+ "NET(C#/F#/VB)": 0,
+ },
+ {
+ Feature: "Schema",
+ Java: 1,
+ "C++": 0,
+ Go: 1,
+ Python: 0,
+ Nodejs: 0,
+ "C#/DotPulsar": 0,
+ Websocket: 0,
+ REST: 0,
+ "NET(C#/F#/VB)": 1,
+ },
+ {
+ Feature: "Listener",
+ Java: 2,
+ "C++": 0,
+ Go: 2,
+ Python: 0,
+ Nodejs: 0,
+ "C#/DotPulsar": 0,
+ Websocket: 0,
+ REST: 0,
+ "NET(C#/F#/VB)": 0,
+ },
+ ],
+};
diff --git a/docusaurus.config.js b/docusaurus.config.js
index 6072dc7eeb2..c74c1273dcd 100644
--- a/docusaurus.config.js
+++ b/docusaurus.config.js
@@ -393,6 +393,16 @@ module.exports = {
sidebarPath: false,
}),
],
+ [
+ "content-docs",
+ /** @type {import('@docusaurus/plugin-content-docs').Options} */
+ ({
+ id: "client-feature-matrix",
+ path: "client-feature-matrix",
+ routeBasePath: "client-feature-matrix",
+ sidebarPath: false,
+ }),
+ ],
],
scripts: [
{src: "/js/sine-waves.min.js", async: true},
diff --git a/package.json b/package.json
index 7346d156081..1247dcf5179 100644
--- a/package.json
+++ b/package.json
@@ -45,6 +45,7 @@
"npm": "^8.1.3",
"prism-react-renderer": "^1.2.1",
"react": "^17.0.2",
+ "react-base-table": "^1.13.4",
"react-dom": "^17.0.2",
"react-markdown": "^8.0.0",
"react-md-file": "^2.0.0",
diff --git a/src/components/Matrix/matrix.js b/src/components/Matrix/matrix.js
new file mode 100644
index 00000000000..91d9b9564dc
--- /dev/null
+++ b/src/components/Matrix/matrix.js
@@ -0,0 +1,29 @@
+import React from "react";
+import "react-base-table/styles.css";
+import BaseTable, { AutoResizer } from "react-base-table";
+import { fixedColumns, getHeight, genData, rowRenderer } from "./util.js";
+
+export default function Matrix(props) {
+ const data = props.data;
+ const name = props.name;
+ return (
+ <div className="tailwind">
+ <div className="mb-8" key={name}>
+ <div className={`w-full ${getHeight(name)}`}>
+ <AutoResizer>
+ {({ width, height }) => (
+ <BaseTable
+ fixed
+ width={width}
+ height={height}
+ columns={fixedColumns}
+ data={genData(data)}
+ rowRenderer={rowRenderer}
+ />
+ )}
+ </AutoResizer>
+ </div>
+ </div>
+ </div>
+ );
+}
diff --git a/src/components/Matrix/util.js b/src/components/Matrix/util.js
new file mode 100644
index 00000000000..e41fcbac524
--- /dev/null
+++ b/src/components/Matrix/util.js
@@ -0,0 +1,123 @@
+import React from "react";
+import "react-base-table/styles.css";
+import { Column } from "react-base-table";
+import { languages } from "../../../data/matrix.js";
+const _key = (language) => language.replace(".", "").replace(" ", "");
+export const genColomns = () => {
+ return ["Feature", "Sub"].concat(languages).map((language, index) => {
+ return {
+ key: _key(language),
+ dataKey: _key(language),
+ title: language === "Sub" ? "" : language,
+ width:
+ index === 0
+ ? 180
+ : index === 1
+ ? 150
+ : index === 7
+ ? 120
+ : index === 8
+ ? 90
+ : index === 10
+ ? 126
+ : 74,
+ dataGetter: ({ column, rowData }) => {
+ if (parseInt(rowData[column.dataKey]) === 0) {
+ return "🚫";
+ } else if (parseInt(rowData[column.dataKey]) === 1) {
+ return "✔️";
+ } else if (parseInt(rowData[column.dataKey]) === 2) {
+ return "✅";
+ }
+ return rowData[column.dataKey];
+ },
+ align: index > 1 ? "center" : "left",
+ };
+ });
+};
+
+export const genData = (values) => {
+ const datas = [];
+ values.forEach((feature) => {
+ if (feature.Children) {
+ feature.Children.forEach((child, index) => {
+ const data = {
+ id: feature.Feature + "-" + child.Feature,
+ Feature: index > 0 ? "" : feature.Feature,
+ Sub: child.Feature,
+ rowSpan: () => (index > 0 ? 1 : feature.Children.length),
+ isLast: index === feature.Children.length - 1,
+ };
+ languages.forEach((language) => {
+ if (language === "Feature") {
+ data["Sub"] = child["Feature"];
+ } else {
+ data[_key(language)] = child[_key(language)];
+ }
+ });
+ datas.push(data);
+ });
+ } else {
+ const data = {
+ id: feature.Feature,
+ Feature: feature.Feature,
+ Sub: "",
+ rowSpan: () => 1,
+ };
+ languages.forEach((language) => {
+ data[_key(language)] = feature[_key(language)];
+ });
+ datas.push(data);
+ }
+ });
+ return datas;
+};
+
+export const genCount = (values) => {
+ let count = 1;
+ values.forEach((feature) => {
+ if (feature.Children) {
+ count = count + feature.Children.length;
+ } else {
+ count = count + 1;
+ }
+ });
+ return count;
+};
+
+export const getHeight = (name) => {
+ if (name === "client") return "h-[700px]";
+ if (name === "producer") return "h-[950px]";
+ // if (name === 'consumer') return "h-[1450px]";
+ if (name === "consumer") return "h-[950px]";
+ if (name === "reader") return "h-[400px]";
+ if (name === "tableview") return "h-[200px]";
+ return "h-[700px]";
+};
+
+const columns = genColomns();
+
+export const fixedColumns = columns.map((column, columnIndex) => {
+ let frozen;
+ if (columnIndex < 2) frozen = Column.FrozenDirection.LEFT;
+ if (columnIndex === 0) {
+ return { ...column, frozen, rowSpan: ({ rowData }) => rowData.rowSpan() };
+ }
+ return { ...column, frozen };
+});
+
+export const rowRenderer = ({ rowData, rowIndex, cells, columns }) => {
+ const rowSpan = columns[0].rowSpan({ rowData, rowIndex });
+ if (rowData.Sub.length > 0 && !rowData.isLast) {
+ const cell = cells[0];
+ const style = {
+ ...cell.props.style,
+ height: rowSpan * 50,
+ alignSelf: "flex-start",
+ zIndex: 1,
+ borderBottom: "0px",
+ };
+ cells[0] = React.cloneElement(cell, { style });
+ }
+ return cells;
+};
diff --git a/src/css/custom.css b/src/css/custom.css
index 37fe6d2a1f5..765be722933 100644
--- a/src/css/custom.css
+++ b/src/css/custom.css
@@ -1267,7 +1267,7 @@ div[role="tabpanel"] {
padding: var(--ifm-alert-padding-vertical)
var(--ifm-alert-padding-horizontal);
}
-.tabs-container>.margin-top--md {
+.tabs-container > .margin-top--md {
margin-top: 0 !important;
}
@@ -1280,3 +1280,33 @@ table th,
table td {
border: none;
}
+
+.BaseTable {
+ background-color: transparent !important;
+}
+
+.BaseTable__table {
+ background-color: transparent !important;
+}
+
+.BaseTable__table-main {
+ outline: 1px solid rgb(209 213 219) !important;
+}
+
+.BaseTable__row {
+ background-color: transparent !important;
+ border-bottom: 0px solid rgb(209 213 219) !important;
+}
+
+.BaseTable__header {
+ background-color: transparent !important;
+}
+
+.BaseTable__header-row {
+ background-color: transparent !important;
+ border-bottom: 1px solid rgb(209 213 219) !important;
+}
+
+.BaseTable__row-cell {
+ border-bottom: 1px solid rgb(209 213 219);
+}
diff --git a/yarn.lock b/yarn.lock
index da91eb0c8ad..ac37470dede 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -1577,6 +1577,15 @@ __metadata:
languageName: node
linkType: hard
+"@babel/runtime@npm:^7.0.0":
+ version: 7.21.0
+ resolution: "@babel/runtime@npm:7.21.0"
+ dependencies:
+ regenerator-runtime: ^0.13.11
+ checksum:
7b33e25bfa9e0e1b9e8828bb61b2d32bdd46b41b07ba7cb43319ad08efc6fda8eb89445193e67d6541814627df0ca59122c0ea795e412b99c5183a0540d338ab
+ languageName: node
+ linkType: hard
+
"@babel/runtime@npm:^7.1.2, @babel/runtime@npm:^7.10.2,
@babel/runtime@npm:^7.10.3, @babel/runtime@npm:^7.12.13,
@babel/runtime@npm:^7.12.5, @babel/runtime@npm:^7.17.9,
@babel/runtime@npm:^7.18.3, @babel/runtime@npm:^7.18.6,
@babel/runtime@npm:^7.20.6, @babel/runtime@npm:^7.20.7,
@babel/runtime@npm:^7.5.5, @babel/runtime@npm:^7.8.4,
@babel/runtime@npm:^7.8.7":
version: 7.20.7
resolution: "@babel/runtime@npm:7.20.7"
@@ -4930,6 +4939,13 @@ __metadata:
languageName: node
linkType: hard
+"classnames@npm:^2.2.5":
+ version: 2.3.2
+ resolution: "classnames@npm:2.3.2"
+ checksum:
2c62199789618d95545c872787137262e741f9db13328e216b093eea91c85ef2bfb152c1f9e63027204e2559a006a92eb74147d46c800a9f96297ae1d9f96f4e
+ languageName: node
+ linkType: hard
+
"clean-css@npm:^5.2.2, clean-css@npm:^5.3.0":
version: 5.3.1
resolution: "clean-css@npm:5.3.1"
@@ -8837,6 +8853,13 @@ __metadata:
languageName: node
linkType: hard
+"memoize-one@npm:>=3.1.1 <6, memoize-one@npm:^5.0.0":
+ version: 5.2.1
+ resolution: "memoize-one@npm:5.2.1"
+ checksum:
a3cba7b824ebcf24cdfcd234aa7f86f3ad6394b8d9be4c96ff756dafb8b51c7f71320785fbc2304f1af48a0467cbbd2a409efc9333025700ed523f254cb52e3d
+ languageName: node
+ linkType: hard
+
"merge-descriptors@npm:1.0.1":
version: 1.0.1
resolution: "merge-descriptors@npm:1.0.1"
@@ -11268,7 +11291,7 @@ __metadata:
languageName: node
linkType: hard
-"prop-types@npm:^15.0.0, prop-types@npm:^15.6.2, prop-types@npm:^15.7.2,
prop-types@npm:^15.8.1":
+"prop-types@npm:^15.0.0, prop-types@npm:^15.6.2, prop-types@npm:^15.7.0,
prop-types@npm:^15.7.2, prop-types@npm:^15.8.1":
version: 15.8.1
resolution: "prop-types@npm:15.8.1"
dependencies:
@@ -11435,6 +11458,23 @@ __metadata:
languageName: node
linkType: hard
+"react-base-table@npm:^1.13.4":
+ version: 1.13.4
+ resolution: "react-base-table@npm:1.13.4"
+ dependencies:
+ "@babel/runtime": ^7.0.0
+ classnames: ^2.2.5
+ memoize-one: ^5.0.0
+ prop-types: ^15.7.0
+ react-virtualized-auto-sizer: ^1.0.2
+ react-window: ^1.8.2
+ peerDependencies:
+ react: ^16.0.0 || ^17.0.0
+ react-dom: ^16.0.0 || ^17.0.0
+ checksum:
bda8eda540847d5e3cb13a0e13120edcfdf54473b552f0470fec73c34845ca646149d8165ed5e6e336c1e7694a01288540cc173581abd26ea9cda99affa99169
+ languageName: node
+ linkType: hard
+
"react-base16-styling@npm:^0.6.0":
version: 0.6.0
resolution: "react-base16-styling@npm:0.6.0"
@@ -11710,6 +11750,29 @@ __metadata:
languageName: node
linkType: hard
+"react-virtualized-auto-sizer@npm:^1.0.2":
+ version: 1.0.15
+ resolution: "react-virtualized-auto-sizer@npm:1.0.15"
+ peerDependencies:
+ react: ^15.3.0 || ^16.0.0-alpha || ^17.0.0 || ^18.0.0-rc
+ react-dom: ^15.3.0 || ^16.0.0-alpha || ^17.0.0 || ^18.0.0-rc
+ checksum:
db6716fff307dcd2b2492ee0539d5fe2922ea067f91a69969aed6ac03f46db105e993e0a9f946e74b1fb3b9caf88ce5629bf1132e3a995457f42b559979d6708
+ languageName: node
+ linkType: hard
+
+"react-window@npm:^1.8.2":
+ version: 1.8.9
+ resolution: "react-window@npm:1.8.9"
+ dependencies:
+ "@babel/runtime": ^7.0.0
+ memoize-one: ">=3.1.1 <6"
+ peerDependencies:
+ react: ^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0
+ react-dom: ^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0
+ checksum:
cefa232f4f37269d292529ef15780fb108123d6bb5beee19eeac657e75cf8d4664be66f2da04baf0cb1bc64c5ab3d83a88199c3358f023b78940acd37b0673b2
+ languageName: node
+ linkType: hard
+
"react@npm:^16.6.0":
version: 16.14.0
resolution: "react@npm:16.14.0"
@@ -14226,6 +14289,7 @@ __metadata:
postcss-preset-env: ^7.1.0
prism-react-renderer: ^1.2.1
react: ^17.0.2
+ react-base-table: ^1.13.4
react-dom: ^17.0.2
react-markdown: ^8.0.0
react-md-file: ^2.0.0