From db1fda2c42c5218c02252ace821d472931d2244a Mon Sep 17 00:00:00 2001 From: Jamieson Walker Date: Thu, 2 Oct 2025 11:00:33 -0500 Subject: [PATCH 1/4] Added new JCSMP Serdes tutorials Included JSON tutorial but left out AVRO and generic as they are essentially identical --- gatsby-config.js | 2 +- package-lock.json | 530 +++++++++++------- .../tutorials/jcsmp/schema-registry-serdes.md | 113 ++++ 3 files changed, 437 insertions(+), 208 deletions(-) create mode 100644 src/pages/tutorials/jcsmp/schema-registry-serdes.md diff --git a/gatsby-config.js b/gatsby-config.js index cc83a92..59d81d7 100644 --- a/gatsby-config.js +++ b/gatsby-config.js @@ -258,7 +258,7 @@ module.exports = { options: { name: `JCSMP-Samples`, remote: `https://github.com/SolaceSamples/solace-samples-java-jcsmp`, - commit: '7ce4d7edfb53d03e44a8b45a405aa53ed10348ef', + commit: '7333ce5eb44953f41fae402b58045f69134b603b', } }, { diff --git a/package-lock.json b/package-lock.json index d22a646..e654dfd 100644 --- a/package-lock.json +++ b/package-lock.json @@ -297,12 +297,14 @@ } }, "node_modules/@babel/code-frame": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.24.7.tgz", - "integrity": "sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.27.1.tgz", + "integrity": "sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==", + "license": "MIT", "dependencies": { - "@babel/highlight": "^7.24.7", - "picocolors": "^1.0.0" + "@babel/helper-validator-identifier": "^7.27.1", + "js-tokens": "^4.0.0", + "picocolors": "^1.1.1" }, "engines": { "node": ">=6.9.0" @@ -622,17 +624,19 @@ } }, "node_modules/@babel/helper-string-parser": { - "version": "7.24.8", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.24.8.tgz", - "integrity": "sha512-pO9KhhRcuUyGnJWwyEgnRJTSIZHiT+vMD0kPeD+so0l7mxkMT19g3pjY9GTnHySck/hDzq+dtW/4VgnMkippsQ==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz", + "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==", + "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-validator-identifier": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.7.tgz", - "integrity": "sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.27.1.tgz", + "integrity": "sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==", + "license": "MIT", "engines": { "node": ">=6.9.0" } @@ -659,12 +663,13 @@ } }, "node_modules/@babel/helpers": { - "version": "7.25.6", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.25.6.tgz", - "integrity": "sha512-Xg0tn4HcfTijTwfDwYlvVCl43V6h4KyVVX2aEm4qdO/PC6L2YvzLHFdmxhoeSA3eslcE6+ZVXHgWwopXYLNq4Q==", + "version": "7.28.4", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.28.4.tgz", + "integrity": "sha512-HFN59MmQXGHVyYadKLVumYsA9dBFun/ldYxipEjzA4196jpLZd8UjEEBLkbEkvfYreDqJhZxYAWFPtrfhNpj4w==", + "license": "MIT", "dependencies": { - "@babel/template": "^7.25.0", - "@babel/types": "^7.25.6" + "@babel/template": "^7.27.2", + "@babel/types": "^7.28.4" }, "engines": { "node": ">=6.9.0" @@ -749,11 +754,12 @@ } }, "node_modules/@babel/parser": { - "version": "7.25.6", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.25.6.tgz", - "integrity": "sha512-trGdfBdbD0l1ZPmcJ83eNxB9rbEax4ALFTF7fN386TMYbeCQbyme5cOEXQhbGXKebwGaB/J52w1mrklMcbgy6Q==", + "version": "7.28.4", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.28.4.tgz", + "integrity": "sha512-yZbBqeM6TkpP9du/I2pUZnJsRMGGvOuIrhjzC1AwHwW+6he4mni6Bp/m8ijn0iOuZuPI2BfkCoSRunpyjnrQKg==", + "license": "MIT", "dependencies": { - "@babel/types": "^7.25.6" + "@babel/types": "^7.28.4" }, "bin": { "parser": "bin/babel-parser.js" @@ -2224,24 +2230,23 @@ "integrity": "sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==" }, "node_modules/@babel/runtime": { - "version": "7.25.6", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.25.6.tgz", - "integrity": "sha512-VBj9MYyDb9tuLq7yzqjgzt6Q+IBQLrGZfdjOekyEirZPHxXWoTSGUTMrpsfi58Up73d13NfYLv8HT9vmznjzhQ==", - "dependencies": { - "regenerator-runtime": "^0.14.0" - }, + "version": "7.28.4", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.28.4.tgz", + "integrity": "sha512-Q/N6JNWvIvPnLDvjlE1OUBLPQHH6l3CltCEsHIujp45zQUSSh8K+gHnaEX45yAT1nyngnINhvWtzN+Nb9D8RAQ==", + "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/template": { - "version": "7.25.0", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.25.0.tgz", - "integrity": "sha512-aOOgh1/5XzKvg1jvVz7AVrx2piJ2XBi227DHmbY6y+bM9H2FlN+IfecYu4Xl0cNiiVejlsCri89LUsbj8vJD9Q==", + "version": "7.27.2", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.27.2.tgz", + "integrity": "sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==", + "license": "MIT", "dependencies": { - "@babel/code-frame": "^7.24.7", - "@babel/parser": "^7.25.0", - "@babel/types": "^7.25.0" + "@babel/code-frame": "^7.27.1", + "@babel/parser": "^7.27.2", + "@babel/types": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -2265,13 +2270,13 @@ } }, "node_modules/@babel/types": { - "version": "7.25.6", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.25.6.tgz", - "integrity": "sha512-/l42B1qxpG6RdfYf343Uw1vmDjeNhneUXtzhojE7pDgfpEypmRhI6j1kr17XCVv4Cgl9HdAiQY2x0GwKm7rWCw==", + "version": "7.28.4", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.28.4.tgz", + "integrity": "sha512-bkFqkLhh3pMBUQQkpVgWDWq/lqzc2678eUyDlTBhRqhCHFguYYGM0Efga7tYk4TogG/3x0EEl66/OQ+WGbWB/Q==", + "license": "MIT", "dependencies": { - "@babel/helper-string-parser": "^7.24.8", - "@babel/helper-validator-identifier": "^7.24.7", - "to-fast-properties": "^2.0.0" + "@babel/helper-string-parser": "^7.27.1", + "@babel/helper-validator-identifier": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -6351,45 +6356,86 @@ "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" }, "node_modules/bare-events": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/bare-events/-/bare-events-2.4.2.tgz", - "integrity": "sha512-qMKFd2qG/36aA4GwvKq8MxnPgCQAmBWmSyLWsJcbn8v03wvIPQ/hG1Ms8bPzndZxMDoHpxez5VOS+gC9Yi24/Q==", - "optional": true + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/bare-events/-/bare-events-2.7.0.tgz", + "integrity": "sha512-b3N5eTW1g7vXkw+0CXh/HazGTcO5KYuu/RCNaJbDMPI6LHDi+7qe8EmxKUVe1sUbY2KZOVZFyj62x0OEz9qyAA==", + "license": "Apache-2.0" }, "node_modules/bare-fs": { - "version": "2.3.5", - "resolved": "https://registry.npmjs.org/bare-fs/-/bare-fs-2.3.5.tgz", - "integrity": "sha512-SlE9eTxifPDJrT6YgemQ1WGFleevzwY+XAP1Xqgl56HtcrisC2CHCZ2tq6dBpcH2TnNxwUEUGhweo+lrQtYuiw==", + "version": "4.4.5", + "resolved": "https://registry.npmjs.org/bare-fs/-/bare-fs-4.4.5.tgz", + "integrity": "sha512-TCtu93KGLu6/aiGWzMr12TmSRS6nKdfhAnzTQRbXoSWxkbb9eRd53jQ51jG7g1gYjjtto3hbBrrhzg6djcgiKg==", + "license": "Apache-2.0", "optional": true, "dependencies": { - "bare-events": "^2.0.0", - "bare-path": "^2.0.0", - "bare-stream": "^2.0.0" + "bare-events": "^2.5.4", + "bare-path": "^3.0.0", + "bare-stream": "^2.6.4", + "bare-url": "^2.2.2", + "fast-fifo": "^1.3.2" + }, + "engines": { + "bare": ">=1.16.0" + }, + "peerDependencies": { + "bare-buffer": "*" + }, + "peerDependenciesMeta": { + "bare-buffer": { + "optional": true + } } }, "node_modules/bare-os": { - "version": "2.4.4", - "resolved": "https://registry.npmjs.org/bare-os/-/bare-os-2.4.4.tgz", - "integrity": "sha512-z3UiI2yi1mK0sXeRdc4O1Kk8aOa/e+FNWZcTiPB/dfTWyLypuE99LibgRaQki914Jq//yAWylcAt+mknKdixRQ==", - "optional": true + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/bare-os/-/bare-os-3.6.2.tgz", + "integrity": "sha512-T+V1+1srU2qYNBmJCXZkUY5vQ0B4FSlL3QDROnKQYOqeiQR8UbjNHlPa+TIbM4cuidiN9GaTaOZgSEgsvPbh5A==", + "license": "Apache-2.0", + "optional": true, + "engines": { + "bare": ">=1.14.0" + } }, "node_modules/bare-path": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/bare-path/-/bare-path-2.1.3.tgz", - "integrity": "sha512-lh/eITfU8hrj9Ru5quUp0Io1kJWIk1bTjzo7JH1P5dWmQ2EL4hFUlfI8FonAhSlgIfhn63p84CDY/x+PisgcXA==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/bare-path/-/bare-path-3.0.0.tgz", + "integrity": "sha512-tyfW2cQcB5NN8Saijrhqn0Zh7AnFNsnczRcuWODH0eYAXBsJ5gVxAUuNr7tsHSC6IZ77cA0SitzT+s47kot8Mw==", + "license": "Apache-2.0", "optional": true, "dependencies": { - "bare-os": "^2.1.0" + "bare-os": "^3.0.1" } }, "node_modules/bare-stream": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/bare-stream/-/bare-stream-2.3.0.tgz", - "integrity": "sha512-pVRWciewGUeCyKEuRxwv06M079r+fRjAQjBEK2P6OYGrO43O+Z0LrPZZEjlc4mB6C2RpZ9AxJ1s7NLEtOHO6eA==", + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/bare-stream/-/bare-stream-2.7.0.tgz", + "integrity": "sha512-oyXQNicV1y8nc2aKffH+BUHFRXmx6VrPzlnaEvMhram0nPBrKcEdcyBg5r08D0i8VxngHFAiVyn1QKXpSG0B8A==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "streamx": "^2.21.0" + }, + "peerDependencies": { + "bare-buffer": "*", + "bare-events": "*" + }, + "peerDependenciesMeta": { + "bare-buffer": { + "optional": true + }, + "bare-events": { + "optional": true + } + } + }, + "node_modules/bare-url": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/bare-url/-/bare-url-2.2.2.tgz", + "integrity": "sha512-g+ueNGKkrjMazDG3elZO1pNs3HY5+mMmOet1jtKyhOaCnkLzitxf26z7hoAEkDNgdNmnc1KIlt/dw6Po6xZMpA==", + "license": "Apache-2.0", "optional": true, "dependencies": { - "b4a": "^1.6.6", - "streamx": "^2.20.0" + "bare-path": "^3.0.0" } }, "node_modules/base": { @@ -6410,9 +6456,10 @@ } }, "node_modules/base-x": { - "version": "3.0.10", - "resolved": "https://registry.npmjs.org/base-x/-/base-x-3.0.10.tgz", - "integrity": "sha512-7d0s06rR9rYaIWHkpfLIFICM/tkSVdoPC9qYAQRpxn9DdKNWNsKC0uk++akckyLq16Tx2WIinnZ6WRriAt6njQ==", + "version": "3.0.11", + "resolved": "https://registry.npmjs.org/base-x/-/base-x-3.0.11.tgz", + "integrity": "sha512-xz7wQ8xDhdyP7tQxwdteLYeFfS68tSMNCZ/Y37WJ4bhGfKPpqEIlmIyueQHqOyoPhE6xNUqjzRr8ra0eF9VRvA==", + "license": "MIT", "dependencies": { "safe-buffer": "^5.0.1" } @@ -6640,9 +6687,10 @@ } }, "node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", + "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", + "license": "MIT", "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -6877,6 +6925,19 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/call-bind-apply-helpers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", + "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/call-me-maybe": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/call-me-maybe/-/call-me-maybe-1.0.2.tgz", @@ -7233,9 +7294,10 @@ } }, "node_modules/clipboardy/node_modules/cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", + "license": "MIT", "dependencies": { "path-key": "^3.1.0", "shebang-command": "^2.0.0", @@ -7620,30 +7682,23 @@ } }, "node_modules/compression": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz", - "integrity": "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==", + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/compression/-/compression-1.8.1.tgz", + "integrity": "sha512-9mAqGPHLakhCLeNyxPkK4xVo746zQ/czLH1Ky+vkitMnWfWZps8r0qXuwhwizagCRttsL4lfG4pIOvaWLpAP0w==", + "license": "MIT", "dependencies": { - "accepts": "~1.3.5", - "bytes": "3.0.0", - "compressible": "~2.0.16", + "bytes": "3.1.2", + "compressible": "~2.0.18", "debug": "2.6.9", - "on-headers": "~1.0.2", - "safe-buffer": "5.1.2", + "negotiator": "~0.6.4", + "on-headers": "~1.1.0", + "safe-buffer": "5.2.1", "vary": "~1.1.2" }, "engines": { "node": ">= 0.8.0" } }, - "node_modules/compression/node_modules/bytes": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", - "integrity": "sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==", - "engines": { - "node": ">= 0.8" - } - }, "node_modules/compression/node_modules/debug": { "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", @@ -7657,10 +7712,14 @@ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" }, - "node_modules/compression/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + "node_modules/compression/node_modules/negotiator": { + "version": "0.6.4", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.4.tgz", + "integrity": "sha512-myRT3DiWPHqho5PrJaIRyaMv2kgYf0mUVgBNOYMuCH5Ki1yEiQaf/ZJuQ62nvpc44wL5WDbTX7yGJi1Neevw8w==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } }, "node_modules/concat-map": { "version": "0.0.1", @@ -7868,9 +7927,10 @@ } }, "node_modules/create-gatsby": { - "version": "3.13.1", - "resolved": "https://registry.npmjs.org/create-gatsby/-/create-gatsby-3.13.1.tgz", - "integrity": "sha512-CCg8Vz/iQs1cgMEzyRlVGMvNs8ivE/2w+TL6yS56FVe1JjOou8nKYHzxnWxRmBUtC7rTfjxVaTESIotuYBsltQ==", + "version": "3.15.0", + "resolved": "https://registry.npmjs.org/create-gatsby/-/create-gatsby-3.15.0.tgz", + "integrity": "sha512-EjScC6GRDvL/mgbURFxv7gCkJmNqU1q+pptKx2ry11JbSzx1vvFIFXpiID3JxuM3fCzPcqh2GnCPUk+PU7lvLg==", + "license": "MIT", "dependencies": { "@babel/runtime": "^7.20.13" }, @@ -7903,10 +7963,11 @@ } }, "node_modules/cross-spawn": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", - "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", + "version": "6.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.6.tgz", + "integrity": "sha512-VqCUuhcd1iB+dsv8gxPttb5iZh/D0iubSP21g36KXdEuf6I5JiioesUVjpCdHV9MZRUfVFlvwtIUyPfxo5trtw==", "dev": true, + "license": "MIT", "dependencies": { "nice-try": "^1.0.4", "path-key": "^2.0.1", @@ -8787,6 +8848,20 @@ "resolved": "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-5.1.0.tgz", "integrity": "sha512-YXQl1DSa4/PQyRfgrv6aoNjhasp/p4qs9FjJ4q4cQk+8m4r6k4ZSiEyytKG8f8W9gi8WsQtIObNmKd+tMzNTmA==" }, + "node_modules/dunder-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", + "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.1", + "es-errors": "^1.3.0", + "gopd": "^1.2.0" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/duplexer": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz", @@ -9033,12 +9108,10 @@ } }, "node_modules/es-define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", - "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==", - "dependencies": { - "get-intrinsic": "^1.2.4" - }, + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", + "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", + "license": "MIT", "engines": { "node": ">= 0.4" } @@ -9100,9 +9173,10 @@ "integrity": "sha512-MVNK56NiMrOwitFB7cqDwq0CQutbw+0BvLshJSse0MUNU+y1FC3bUS/AQg7oUng+/wKrrki7JfmwtVHkVfPLlw==" }, "node_modules/es-object-atoms": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.0.0.tgz", - "integrity": "sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", + "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", + "license": "MIT", "dependencies": { "es-errors": "^1.3.0" }, @@ -9111,13 +9185,15 @@ } }, "node_modules/es-set-tostringtag": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.3.tgz", - "integrity": "sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", + "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", + "license": "MIT", "dependencies": { - "get-intrinsic": "^1.2.4", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6", "has-tostringtag": "^1.0.2", - "hasown": "^2.0.1" + "hasown": "^2.0.2" }, "engines": { "node": ">= 0.4" @@ -9752,9 +9828,10 @@ } }, "node_modules/eslint/node_modules/cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", + "license": "MIT", "dependencies": { "path-key": "^3.1.0", "shebang-command": "^2.0.0", @@ -9953,6 +10030,15 @@ "node": ">=0.8.x" } }, + "node_modules/events-universal": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/events-universal/-/events-universal-1.0.1.tgz", + "integrity": "sha512-LUd5euvbMLpwOF8m6ivPCbhQeSiYVNb8Vs0fQ8QjXo0JTkEHpz8pxdQf0gStltaPpw0Cca8b39KxvK9cfKRiAw==", + "license": "Apache-2.0", + "dependencies": { + "bare-events": "^2.7.0" + } + }, "node_modules/exec-sh": { "version": "0.2.2", "resolved": "https://registry.npmjs.org/exec-sh/-/exec-sh-0.2.2.tgz", @@ -9985,9 +10071,10 @@ } }, "node_modules/execa/node_modules/cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", + "license": "MIT", "dependencies": { "path-key": "^3.1.0", "shebang-command": "^2.0.0", @@ -10228,16 +10315,17 @@ "dev": true }, "node_modules/express": { - "version": "4.21.0", - "resolved": "https://registry.npmjs.org/express/-/express-4.21.0.tgz", - "integrity": "sha512-VqcNGcj/Id5ZT1LZ/cfihi3ttTn+NJmkli2eZADigjq29qTlWi/hAQ43t/VLPq8+UX06FCEx3ByOYet6ZFblng==", + "version": "4.21.2", + "resolved": "https://registry.npmjs.org/express/-/express-4.21.2.tgz", + "integrity": "sha512-28HqgMZAmih1Czt9ny7qr6ek2qddF4FclbMzwhCREB6OFfH+rXAnuNCwo1/wFvrtbgsQDb4kSbX9de9lFbrXnA==", + "license": "MIT", "dependencies": { "accepts": "~1.3.8", "array-flatten": "1.1.1", "body-parser": "1.20.3", "content-disposition": "0.5.4", "content-type": "~1.0.4", - "cookie": "0.6.0", + "cookie": "0.7.1", "cookie-signature": "1.0.6", "debug": "2.6.9", "depd": "2.0.0", @@ -10251,7 +10339,7 @@ "methods": "~1.1.2", "on-finished": "2.4.1", "parseurl": "~1.3.3", - "path-to-regexp": "0.1.10", + "path-to-regexp": "0.1.12", "proxy-addr": "~2.0.7", "qs": "6.13.0", "range-parser": "~1.2.1", @@ -10266,6 +10354,10 @@ }, "engines": { "node": ">= 0.10.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" } }, "node_modules/express-http-proxy": { @@ -10313,9 +10405,10 @@ } }, "node_modules/express/node_modules/cookie": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.6.0.tgz", - "integrity": "sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==", + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.1.tgz", + "integrity": "sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w==", + "license": "MIT", "engines": { "node": ">= 0.6" } @@ -10334,9 +10427,10 @@ "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" }, "node_modules/express/node_modules/path-to-regexp": { - "version": "0.1.10", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.10.tgz", - "integrity": "sha512-7lf7qcQidTku0Gu3YDPc8DJ1q7OOucfa/BSsIwjuh56VU7katFvuM8hULfkwB3Fns/rsVF7PwPKVw1sl5KQS9w==" + "version": "0.1.12", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.12.tgz", + "integrity": "sha512-RA1GjUVMnvYFxuqovrEqZoxxW5NUZqbwKtYz/Tt7nXerk0LbLblQmrsgdeOxV5SFHf0UDggjS/bSeOZwt1pmEQ==", + "license": "MIT" }, "node_modules/express/node_modules/qs": { "version": "6.13.0", @@ -11158,12 +11252,15 @@ } }, "node_modules/form-data": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", - "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.4.tgz", + "integrity": "sha512-KrGhL9Q4zjj0kiUt5OO4Mr/A/jlI2jDYs5eHBpYHPcBEVSiipAvn2Ko2HnPe20rmcuuvMHNdZFp+4IlGTMF0Ow==", + "license": "MIT", "dependencies": { "asynckit": "^0.4.0", "combined-stream": "^1.0.8", + "es-set-tostringtag": "^2.1.0", + "hasown": "^2.0.2", "mime-types": "^2.1.12" }, "engines": { @@ -11515,10 +11612,11 @@ } }, "node_modules/gatsby-cli": { - "version": "5.13.3", - "resolved": "https://registry.npmjs.org/gatsby-cli/-/gatsby-cli-5.13.3.tgz", - "integrity": "sha512-JQTeivvZWuhxE1HRey2sRhwUmkCrs5478fiLR0XRFGin4X1ggCmrQx/DBkJP1TgktdPfNU8t987+slSnO2XzMA==", + "version": "5.15.0", + "resolved": "https://registry.npmjs.org/gatsby-cli/-/gatsby-cli-5.15.0.tgz", + "integrity": "sha512-wTUAc2rNr39s7PDO1EaFOBbFmgfuEJ4hdJfh0b/0zd5FMHep+8Z7Kp6/B9KWhHOhHFkFasL7jgZozin4y3QGdg==", "hasInstallScript": true, + "license": "MIT", "dependencies": { "@babel/code-frame": "^7.18.6", "@babel/core": "^7.20.12", @@ -11536,13 +11634,12 @@ "clipboardy": "^4.0.0", "common-tags": "^1.8.2", "convert-hrtime": "^3.0.0", - "create-gatsby": "^3.13.1", + "create-gatsby": "^3.15.0", "envinfo": "^7.10.0", "execa": "^5.1.1", "fs-exists-cached": "^1.0.0", - "fs-extra": "^11.1.1", - "gatsby-core-utils": "^4.13.1", - "gatsby-telemetry": "^4.13.1", + "fs-extra": "^11.2.0", + "gatsby-core-utils": "^4.15.0", "hosted-git-info": "^3.0.8", "is-valid-path": "^0.1.1", "joi": "^17.9.2", @@ -11570,18 +11667,19 @@ } }, "node_modules/gatsby-core-utils": { - "version": "4.13.1", - "resolved": "https://registry.npmjs.org/gatsby-core-utils/-/gatsby-core-utils-4.13.1.tgz", - "integrity": "sha512-w7G6SsQr8T2q+AJ1MxvRNGocCt+wjc22MiRLj2Zi3Ijpjszbr818JxwI4+aPt8WOSHlKT5SYCHICnEvcYPm9gg==", + "version": "4.15.0", + "resolved": "https://registry.npmjs.org/gatsby-core-utils/-/gatsby-core-utils-4.15.0.tgz", + "integrity": "sha512-fxzHbCvQm1u74DSjy7G4PVqEcWb7sOCFg3kFFVUqVKe3hDCm6s1M/gRSvpm3/3fm74HhgLsmQ54Qaf54Ckyn9w==", + "license": "MIT", "dependencies": { "@babel/runtime": "^7.20.13", "ci-info": "2.0.0", "configstore": "^5.0.1", "fastq": "^1.15.0", "file-type": "^16.5.4", - "fs-extra": "^11.1.1", + "fs-extra": "^11.2.0", "got": "^11.8.6", - "hash-wasm": "^4.9.0", + "hash-wasm": "^4.11.0", "import-from": "^4.0.0", "lmdb": "2.5.3", "lock": "^1.1.0", @@ -12551,15 +12649,21 @@ } }, "node_modules/get-intrinsic": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", - "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", + "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", + "license": "MIT", "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "es-define-property": "^1.0.1", "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", "function-bind": "^1.1.2", - "has-proto": "^1.0.1", - "has-symbols": "^1.0.3", - "hasown": "^2.0.0" + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "math-intrinsics": "^1.1.0" }, "engines": { "node": ">= 0.4" @@ -12576,6 +12680,19 @@ "node": ">=4" } }, + "node_modules/get-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", + "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", + "license": "MIT", + "dependencies": { + "dunder-proto": "^1.0.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/get-stream": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", @@ -12863,11 +12980,12 @@ } }, "node_modules/gopd": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", - "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", - "dependencies": { - "get-intrinsic": "^1.1.3" + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", + "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", + "license": "MIT", + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -13248,9 +13366,10 @@ } }, "node_modules/has-symbols": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", - "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", + "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", + "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -17882,6 +18001,15 @@ "url": "https://github.com/sponsors/wooorm" } }, + "node_modules/math-intrinsics": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", + "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, "node_modules/math-random": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/math-random/-/math-random-1.0.4.tgz", @@ -18641,15 +18769,16 @@ "optional": true }, "node_modules/nanoid": { - "version": "3.3.7", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", - "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==", + "version": "3.3.11", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz", + "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", "funding": [ { "type": "github", "url": "https://github.com/sponsors/ai" } ], + "license": "MIT", "bin": { "nanoid": "bin/nanoid.cjs" }, @@ -19351,9 +19480,10 @@ } }, "node_modules/on-headers": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", - "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.1.0.tgz", + "integrity": "sha512-737ZY3yNnXy37FHkQxPzt4UZ2UWPWiCZWLvFZ4fu5cueciegX0zGPnrlY6bwRg4FdQOe9YU8MkmJwGhoMybl8A==", + "license": "MIT", "engines": { "node": ">= 0.8" } @@ -20084,9 +20214,10 @@ } }, "node_modules/password-prompt/node_modules/cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", + "license": "MIT", "dependencies": { "path-key": "^3.1.0", "shebang-command": "^2.0.0", @@ -20248,9 +20379,10 @@ "integrity": "sha512-rxJOljMuWtYlvREBmd6TZYanfcPhNUKtGDZBjBBS8WG1dpN2iwPsRJZgQqN/OtJuiQckdRFOfzogqJClTrsi7g==" }, "node_modules/picocolors": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.0.tgz", - "integrity": "sha512-TQ92mBOW0l3LeMeyLV6mzy/kWr8lkd/hp3mTg7wYK7zJhuBStmGMBG0BdeDZS/dZx1IukaX6Bk11zcln25o1Aw==" + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "license": "ISC" }, "node_modules/picomatch": { "version": "2.3.1", @@ -21020,9 +21152,10 @@ } }, "node_modules/prebuild-install/node_modules/tar-fs": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.1.tgz", - "integrity": "sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==", + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.4.tgz", + "integrity": "sha512-mDAjwmZdh7LTT6pNleZ05Yt65HC3E+NiQzl672vQG38jIrehtJk/J3mNwIg+vShQPcLF/LV7CMnDW6vjj6sfYQ==", + "license": "MIT", "dependencies": { "chownr": "^1.1.1", "mkdirp-classic": "^0.5.2", @@ -21352,11 +21485,6 @@ } ] }, - "node_modules/queue-tick": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/queue-tick/-/queue-tick-1.0.1.tgz", - "integrity": "sha512-kJt5qhMxoszgU/62PLP1CJytzd2NKetjSRnyuj31fDd3Rlcz3fzlFdFLD1SItunPwyqEOkca6GbV612BWfaBag==" - }, "node_modules/quick-lru": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", @@ -21554,9 +21682,10 @@ } }, "node_modules/react-dev-utils/node_modules/cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", + "license": "MIT", "dependencies": { "path-key": "^3.1.0", "shebang-command": "^2.0.0", @@ -22048,11 +22177,6 @@ "node": ">=4" } }, - "node_modules/regenerator-runtime": { - "version": "0.14.1", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz", - "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==" - }, "node_modules/regenerator-transform": { "version": "0.15.2", "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.2.tgz", @@ -24167,16 +24291,14 @@ } }, "node_modules/streamx": { - "version": "2.20.1", - "resolved": "https://registry.npmjs.org/streamx/-/streamx-2.20.1.tgz", - "integrity": "sha512-uTa0mU6WUC65iUvzKH4X9hEdvSW7rbPxPtwfWiLMSj3qTdQbAiUboZTxauKfpFuGIGa1C2BYijZ7wgdUXICJhA==", + "version": "2.23.0", + "resolved": "https://registry.npmjs.org/streamx/-/streamx-2.23.0.tgz", + "integrity": "sha512-kn+e44esVfn2Fa/O0CPFcex27fjIL6MkVae0Mm6q+E6f0hWv578YCERbv+4m02cjxvDsPKLnmxral/rR6lBMAg==", + "license": "MIT", "dependencies": { + "events-universal": "^1.0.0", "fast-fifo": "^1.3.2", - "queue-tick": "^1.0.1", "text-decoder": "^1.1.0" - }, - "optionalDependencies": { - "bare-events": "^2.2.0" } }, "node_modules/strict-uri-encode": { @@ -24712,16 +24834,17 @@ } }, "node_modules/tar-fs": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-3.0.6.tgz", - "integrity": "sha512-iokBDQQkUyeXhgPYaZxmczGPhnhXZ0CmrqI+MOb/WFGS9DW5wnfrLgtjUJBvz50vQ3qfRwJ62QVoCFu8mPVu5w==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-3.1.1.tgz", + "integrity": "sha512-LZA0oaPOc2fVo82Txf3gw+AkEd38szODlptMYejQUhndHMLQ9M059uXR+AfS7DNo0NpINvSqDsvyaCrBVkptWg==", + "license": "MIT", "dependencies": { "pump": "^3.0.0", "tar-stream": "^3.1.5" }, "optionalDependencies": { - "bare-fs": "^2.1.1", - "bare-path": "^2.1.0" + "bare-fs": "^4.0.1", + "bare-path": "^3.0.0" } }, "node_modules/tar-stream": { @@ -25059,9 +25182,10 @@ } }, "node_modules/tmp": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.3.tgz", - "integrity": "sha512-nZD7m9iCPC5g0pYmcaxogYKggSfLsdxl8of3Q/oIbqCqLLIO9IAF0GWjX1z9NZRHPiXv8Wex4yDCaZsgEw0Y8w==", + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.5.tgz", + "integrity": "sha512-voyz6MApa1rQGUxT3E+BK7/ROe8itEx7vD8/HEvt4xwXucvQ5G5oeEiHkmHZJuBO21RpOf+YYm9MOivj709jow==", + "license": "MIT", "engines": { "node": ">=14.14" } @@ -25072,14 +25196,6 @@ "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==", "dev": true }, - "node_modules/to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", - "engines": { - "node": ">=4" - } - }, "node_modules/to-object-path": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", diff --git a/src/pages/tutorials/jcsmp/schema-registry-serdes.md b/src/pages/tutorials/jcsmp/schema-registry-serdes.md new file mode 100644 index 0000000..bd80768 --- /dev/null +++ b/src/pages/tutorials/jcsmp/schema-registry-serdes.md @@ -0,0 +1,113 @@ +--- +layout: features +title: Schema Registry Serialize/Deserialize (SERDES) +summary: Learn to serialize and deserialize messages using JSON Schema with the Schema Registry. +links: + - label: HelloWorldJCSMPJsonSchemaSerde.java + link: /blob/master/src/main/java/com/solace/samples/jcsmp/features/serdes/jsonschema/HelloWorldJCSMPJsonSchemaSerde.java + - label: JsonSchemaSerializeProducer.java + link: /blob/master/src/main/java/com/solace/samples/jcsmp/features/serdes/jsonschema/JsonSchemaSerializeProducer.java + - label: JsonSchemaDeserializeConsumerToPojo.java + link: /blob/master/src/main/java/com/solace/samples/jcsmp/features/serdes/jsonschema/JsonSchemaDeserializeConsumerToPojo.java + - label: feedback + link: https://github.com/SolaceDev/solace-dev-tutorials/blob/master/src/pages/tutorials/jcsmp/schema-registry-serdes.md +--- + +This feature exploration shows how to use the Solace Schema Registry with JSON Schema serializers and deserializers (SERDES) to automatically validate and manage event schemas when publishing and consuming events. AVRO and generic SERDES are also availble in JCSMP and work in a very similar way. We will not explore those examples specifically in this tutorial but there are samples available in the JCSMP Samples repository. + +## Feature Overview + +The Solace Schema Registry provides a centralized repository for managing message schemas, enabling schema validation, versioning, and evolution across your event-driven applications. The Schema Registry SERDES integration with JCSMP allows you to serialize and deserialize messages while automatically validating them against registered schemas. + +Key benefits include: +* **Automatic Schema Validation**: Messages are validated against registered schemas during serialization and deserialization +* **Type Safety**: Serialize from and deserialize to Plain Old Java Objects (POJOs) with compile-time type checking +* **Schema Evolution**: Manage schema versions and support backward/forward compatibility +* **Centralized Management**: Store and manage schemas in a centralized registry accessible by all applications + +The Schema Registry SERDES library supports both JSON Schema and Apache Avro formats. This tutorial focuses on JSON Schema serialization and deserialization, but Avro support is also available in the sample repository. For generic serialization and deserialization examples, see the complete sample code in the GitHub repository. + +## Prerequisites + +* A Solace PubSub+ broker (version 10.5 or later) with Schema Registry deployed +* Access to the Schema Registry with appropriate credentials +* JSON Schema files uploaded to the Schema Registry +* The [Client Profile](https://docs.solace.com/Configuring-and-Managing/Configuring-Client-Profiles.htm) must be configured to support your messaging requirements +For guidance on schema registry setup complete the [Schema registry codelab](https://codelabs.solace.dev/codelabs/schema-registry/?index=..%2F..index#0) + +For more information about the Solace Schema Registry, refer to the [Schema Registry Overview](https://docs.solace.com/Schema-Registry/schema-registry-overview.htm) documentation. + +NOTE: The Schema Registry SERDES library requires the following Gradle dependencies: +```gradle +implementation(platform('com.solace:solace-schema-registry-serdes-bom:1.+')) +implementation 'com.solace:solace-schema-registry-jsonschema-serde' +``` + +## Configuring the Schema Registry Connection + +Before using the serializers and deserializers, you need to configure the connection to the Schema Registry. The configuration uses environment variables or system properties: + +`embed:JCSMP-Samples/src/main/java/com/solace/samples/jcsmp/features/serdes/jsonschema/JsonSchemaSerializeProducer.java#L129-140` + + +## JSON Schema Serialization + +To serialize messages using JSON Schema, create a `JsonSchemaSerializer` and configure it with your Schema Registry connection details. The serializer validates your Java objects against the registered schema before converting them to JSON. + +### Creating and Configuring the Serializer + +`embed:JCSMP-Samples/src/main/java/com/solace/samples/jcsmp/features/serdes/jsonschema/JsonSchemaSerializeProducer.java#L69-112` + +If the data doesn't conform to the registered schema, a `JsonSchemaValidationException` will be thrown during serialization. + +## JSON Schema Deserialization + +Deserialization works in reverse - it validates incoming JSON messages against the registered schema and converts them to Java objects. + +### Deserializing to JsonNode + +For flexible JSON handling, you can deserialize to Jackson's `JsonNode`: + +`embed:JCSMP-Samples/src/main/java/com/solace/samples/jcsmp/features/serdes/jsonschema/JsonSchemaDeserializeConsumerToJsonNode.java#L69-112` + + +### Deserializing to POJOs + +For type-safe deserialization directly to Java objects, configure your JSON Schema with the `customJavaType` property. This allows the deserializer to automatically map JSON to your POJO: + +`embed:JCSMP-Samples/src/main/java/com/solace/samples/jcsmp/features/serdes/jsonschema/JsonSchemaDeserializeConsumerToPojo.java#L72-108` + +## Error Handling + +When working with Schema Registry SERDES, handle these common exceptions: + +* **JsonSchemaValidationException**: Thrown when data doesn't conform to the registered schema +* **RuntimeException**: May be thrown for deserialization errors or encoding issues +* **JCSMPException**: Standard JCSMP exceptions for connection and messaging issues + +```java +try { + byte[] data = serializer.serialize(topic, payload); +} catch (JsonSchemaValidationException e) { + System.err.println("Validation error: " + e.getMessage()); + // Handle invalid data - fix schema or data +} catch (Exception e) { + System.err.println("Serialization error: " + e.getMessage()); + // Handle other serialization issues +} +``` + +## Additional SERDES Support + +This tutorial demonstrates JSON Schema serialization and deserialization. The Solace Schema Registry SERDES library also provides: + +* **Apache Avro SERDES**: For binary serialization with Avro schemas +* **Generic Serializers/Deserializers**: For working with multiple schema formats dynamically + +For complete examples of these features, see the [SERDES samples](https://github.com/SolaceSamples/solace-samples-java-jcsmp/tree/master/src/main/java/com/solace/samples/jcsmp/features/serdes) in the GitHub repository. + +## Learn More + +* Related Source Code: [Schema Registry JSON SERDES Samples](https://github.com/SolaceSamples/solace-samples-java-jcsmp/tree/master/src/main/java/com/solace/samples/jcsmp/features/serdes/jsonschema) +* [Solace Schema Registry Documentation](https://docs.solace.com/Schema-Registry/schema-registry-overview.htm) +* [Schema Registry SERDES GitHub Repository](https://github.com/SolaceSamples/solace-samples-java-jcsmp/tree/master/src/main/java/com/solace/samples/jcsmp/features/serdes) From 46395475997b85ec06182a4685dc84e295b65d3e Mon Sep 17 00:00:00 2001 From: Jamieson Walker Date: Thu, 2 Oct 2025 11:03:37 -0500 Subject: [PATCH 2/4] Updated with images and links --- src/pages/tutorials/jcsmp/image.png | Bin 0 -> 80072 bytes .../tutorials/jcsmp/schema-registry-serdes.md | 4 +++- 2 files changed, 3 insertions(+), 1 deletion(-) create mode 100644 src/pages/tutorials/jcsmp/image.png diff --git a/src/pages/tutorials/jcsmp/image.png b/src/pages/tutorials/jcsmp/image.png new file mode 100644 index 0000000000000000000000000000000000000000..39064e32f9aa4dd65ba8b878669e5f788ce511af GIT binary patch literal 80072 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 z�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 literal 0 HcmV?d00001 diff --git a/src/pages/tutorials/jcsmp/schema-registry-serdes.md b/src/pages/tutorials/jcsmp/schema-registry-serdes.md index bd80768..bfbffe4 100644 --- a/src/pages/tutorials/jcsmp/schema-registry-serdes.md +++ b/src/pages/tutorials/jcsmp/schema-registry-serdes.md @@ -19,6 +19,8 @@ This feature exploration shows how to use the Solace Schema Registry with JSON S The Solace Schema Registry provides a centralized repository for managing message schemas, enabling schema validation, versioning, and evolution across your event-driven applications. The Schema Registry SERDES integration with JCSMP allows you to serialize and deserialize messages while automatically validating them against registered schemas. +![Schema Registry Flow](image.png) + Key benefits include: * **Automatic Schema Validation**: Messages are validated against registered schemas during serialization and deserialization * **Type Safety**: Serialize from and deserialize to Plain Old Java Objects (POJOs) with compile-time type checking @@ -32,7 +34,7 @@ The Schema Registry SERDES library supports both JSON Schema and Apache Avro for * A Solace PubSub+ broker (version 10.5 or later) with Schema Registry deployed * Access to the Schema Registry with appropriate credentials * JSON Schema files uploaded to the Schema Registry -* The [Client Profile](https://docs.solace.com/Configuring-and-Managing/Configuring-Client-Profiles.htm) must be configured to support your messaging requirements +* There must be a suitable [Client Profile](https://docs.solace.com/Configuring-and-Managing/Configuring-Client-Profiles.htm) configured on your broker For guidance on schema registry setup complete the [Schema registry codelab](https://codelabs.solace.dev/codelabs/schema-registry/?index=..%2F..index#0) For more information about the Solace Schema Registry, refer to the [Schema Registry Overview](https://docs.solace.com/Schema-Registry/schema-registry-overview.htm) documentation. From b0827941d0199a27449a6955387903745182164c Mon Sep 17 00:00:00 2001 From: Jamieson Walker Date: Thu, 2 Oct 2025 11:10:29 -0500 Subject: [PATCH 3/4] Update src/pages/tutorials/jcsmp/schema-registry-serdes.md hand crafted spelling errors Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --- src/pages/tutorials/jcsmp/schema-registry-serdes.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/pages/tutorials/jcsmp/schema-registry-serdes.md b/src/pages/tutorials/jcsmp/schema-registry-serdes.md index bfbffe4..d70ac04 100644 --- a/src/pages/tutorials/jcsmp/schema-registry-serdes.md +++ b/src/pages/tutorials/jcsmp/schema-registry-serdes.md @@ -13,7 +13,7 @@ links: link: https://github.com/SolaceDev/solace-dev-tutorials/blob/master/src/pages/tutorials/jcsmp/schema-registry-serdes.md --- -This feature exploration shows how to use the Solace Schema Registry with JSON Schema serializers and deserializers (SERDES) to automatically validate and manage event schemas when publishing and consuming events. AVRO and generic SERDES are also availble in JCSMP and work in a very similar way. We will not explore those examples specifically in this tutorial but there are samples available in the JCSMP Samples repository. +This feature exploration shows how to use the Solace Schema Registry with JSON Schema serializers and deserializers (SERDES) to automatically validate and manage event schemas when publishing and consuming events. AVRO and generic SERDES are also available in JCSMP and work in a very similar way. We will not explore those examples specifically in this tutorial but there are samples available in the JCSMP Samples repository. ## Feature Overview From 7bd30cc8ff1d192f89db9213166e2e9c95dace41 Mon Sep 17 00:00:00 2001 From: Jamieson Walker Date: Thu, 2 Oct 2025 11:16:39 -0500 Subject: [PATCH 4/4] improved image naming --- src/pages/tutorials/jcsmp/schema-registry-serdes.md | 2 +- .../jcsmp/{image.png => serdesProcess.png} | Bin 2 files changed, 1 insertion(+), 1 deletion(-) rename src/pages/tutorials/jcsmp/{image.png => serdesProcess.png} (100%) diff --git a/src/pages/tutorials/jcsmp/schema-registry-serdes.md b/src/pages/tutorials/jcsmp/schema-registry-serdes.md index bfbffe4..e8d12a4 100644 --- a/src/pages/tutorials/jcsmp/schema-registry-serdes.md +++ b/src/pages/tutorials/jcsmp/schema-registry-serdes.md @@ -19,7 +19,7 @@ This feature exploration shows how to use the Solace Schema Registry with JSON S The Solace Schema Registry provides a centralized repository for managing message schemas, enabling schema validation, versioning, and evolution across your event-driven applications. The Schema Registry SERDES integration with JCSMP allows you to serialize and deserialize messages while automatically validating them against registered schemas. -![Schema Registry Flow](image.png) +![Schema Registry Flow](serdesProcess.png) Key benefits include: * **Automatic Schema Validation**: Messages are validated against registered schemas during serialization and deserialization diff --git a/src/pages/tutorials/jcsmp/image.png b/src/pages/tutorials/jcsmp/serdesProcess.png similarity index 100% rename from src/pages/tutorials/jcsmp/image.png rename to src/pages/tutorials/jcsmp/serdesProcess.png