From ee820dd1260830627ef60c877212f6e5712f6605 Mon Sep 17 00:00:00 2001 From: Juergen Kunz Date: Tue, 3 Mar 2026 20:22:01 +0000 Subject: [PATCH] feat(typedrouter): add middleware support to TypedRouter and export middleware type --- changelog.md | 12 + package.json | 18 +- pnpm-lock.yaml | 1426 ++++++++++++++------ readme.md | 57 +- test/{test.browser.ts => test.chromium.ts} | 0 test/test.ts | 24 +- ts/00_commitinfo_data.ts | 2 +- ts/classes.typedrouter.ts | 91 +- ts/classes.typedtarget.ts | 2 +- ts/classes.virtualstream.ts | 4 +- ts/index.ts | 4 +- 11 files changed, 1187 insertions(+), 453 deletions(-) rename test/{test.browser.ts => test.chromium.ts} (100%) diff --git a/changelog.md b/changelog.md index 1eaf898..3c77ff5 100644 --- a/changelog.md +++ b/changelog.md @@ -1,5 +1,17 @@ # Changelog +## 2026-03-03 - 3.3.0 - feat(typedrouter) +add middleware support to TypedRouter and export middleware type + +- Introduces TMiddlewareFunction and TypedRouter.addMiddleware() to run pre-handler middleware (throw TypedResponseError to reject). +- Adds getTypedHandlerAndRouter() to determine owning router so middleware runs on the correct router. +- Middleware errors are converted into response errors, encoded for network, and outgoing hooks are called; request short-circuits if middleware rejects. +- TypedRouter is now generic (TReqConstraint) and several internal references updated to TypedRouter for compatibility. +- Exports TMiddlewareFunction from index.ts so consumers may reference middleware types. +- Documentation (readme) updated with middleware usage and guidance. +- Tests updated: browser test replaced/renamed to chromium, server tests updated to use TypedServer. Data handling in test adjusted to support Buffer/Uint8Array and serialized Buffer shapes. +- package.json: devDependencies and some deps bumped; build script simplified (removed legacy flags). + ## 2026-03-01 - 3.2.7 - fix(virtualstream) reconstitute JSON-serialized binary data in VirtualStream; update docs, build config, and dependency bumps diff --git a/package.json b/package.json index 6fc2947..5bf62ca 100644 --- a/package.json +++ b/package.json @@ -10,18 +10,18 @@ "license": "MIT", "scripts": { "test": "(tstest test/)", - "build": "(tsbuild --web --allowimplicitany && tsbundle)", + "build": "(tsbuild && tsbundle)", "buildDocs": "tsdoc" }, "devDependencies": { - "@api.global/typedserver": "^3.0.80", - "@git.zone/tsbuild": "^2.7.3", + "@api.global/typedserver": "^8.4.0", + "@git.zone/tsbuild": "^4.1.2", "@git.zone/tsbundle": "^2.9.0", - "@git.zone/tsrun": "^1.6.2", - "@git.zone/tstest": "^1.11.5", - "@push.rocks/smartenv": "^5.0.13", - "@push.rocks/tapbundle": "^5.6.3", - "@types/node": "^22.19.13" + "@git.zone/tsrun": "^2.0.1", + "@git.zone/tstest": "^3.2.0", + "@push.rocks/smartenv": "^6.0.0", + "@push.rocks/tapbundle": "^6.0.3", + "@types/node": "^25.3.3" }, "dependencies": { "@api.global/typedrequest-interfaces": "^3.0.19", @@ -31,7 +31,7 @@ "@push.rocks/smartdelay": "^3.0.5", "@push.rocks/smartguard": "^3.1.0", "@push.rocks/smartpromise": "^4.2.3", - "@push.rocks/webrequest": "^4.0.2", + "@push.rocks/webrequest": "^4.0.5", "@push.rocks/webstream": "^1.0.10" }, "files": [ diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 84bd30c..e46811f 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -30,36 +30,36 @@ importers: specifier: ^4.2.3 version: 4.2.3 '@push.rocks/webrequest': - specifier: ^4.0.2 - version: 4.0.2 + specifier: ^4.0.5 + version: 4.0.5 '@push.rocks/webstream': specifier: ^1.0.10 version: 1.0.10 devDependencies: '@api.global/typedserver': - specifier: ^3.0.80 - version: 3.0.80 + specifier: ^8.4.0 + version: 8.4.0(@tiptap/pm@2.27.2) '@git.zone/tsbuild': - specifier: ^2.7.3 - version: 2.7.3 + specifier: ^4.1.2 + version: 4.1.2 '@git.zone/tsbundle': specifier: ^2.9.0 version: 2.9.0 '@git.zone/tsrun': - specifier: ^1.6.2 - version: 1.6.2 + specifier: ^2.0.1 + version: 2.0.1 '@git.zone/tstest': - specifier: ^1.11.5 - version: 1.11.5(socks@2.8.7)(typescript@5.9.3) + specifier: ^3.2.0 + version: 3.2.0(@tiptap/pm@2.27.2)(socks@2.8.7)(typescript@5.9.3) '@push.rocks/smartenv': - specifier: ^5.0.13 - version: 5.0.13 + specifier: ^6.0.0 + version: 6.0.0 '@push.rocks/tapbundle': - specifier: ^5.6.3 - version: 5.6.3(socks@2.8.7) + specifier: ^6.0.3 + version: 6.0.3(socks@2.8.7) '@types/node': - specifier: ^22.19.13 - version: 22.19.13 + specifier: ^25.3.3 + version: 25.3.3 packages: @@ -72,16 +72,13 @@ packages: '@api.global/typedrequest@3.2.6': resolution: {integrity: sha512-CnvbjYjnGGw3rwL+7bTHSgRHEpDujzhs3cv7l1xgCXMPQe3DcPg74+9ep1Y5cu21T/w0pxNnDCJpbb0SHqHzAw==} - '@api.global/typedserver@3.0.80': - resolution: {integrity: sha512-dcp0oXsjBL+XdFg1wUUP08uJQid5bQ0Yv3V3Y3lnI2QCbat0FU+Tsb0TZRnZ4+P150Vj/ITBqJUgDzFsF34grA==} + '@api.global/typedserver@8.4.0': + resolution: {integrity: sha512-qOa5jUwiuHEoY1ZuLZiuU1unPl5JNd99Vv+hNAwgEIgAZd4TTy/mjdTp7lyviBzkGf2pROeCmAbDJJF8YQFCSA==} - '@api.global/typedsocket@3.1.1': - resolution: {integrity: sha512-Wkz3NlhmfdZMKqXXI2c2dMtGGmSmhdOegZiziL+9b2mqPYdc7Gd8AZRdEOKvbSoIvc9G22/5BEadIWHrfq66TA==} + '@api.global/typedsocket@4.1.2': + resolution: {integrity: sha512-fZFuJY9ucFCICjF4wi6OvK8drsv6UcwVVsfamOT1HxFj7OBOYw6QHOceQ+cAQ8IrWbX817sf8gzlesl+jlG8JA==} peerDependencies: - '@push.rocks/smartserve': '>=1.0.0' - peerDependenciesMeta: - '@push.rocks/smartserve': - optional: true + '@push.rocks/smartserve': '>=1.1.0' '@aws-crypto/crc32@5.2.0': resolution: {integrity: sha512-nLbCWqQNgUiwwtFsen1AdzAtvuLRsQS8rYgMuxCrdKf9kOssamGLuPwyTY9wyYblNr9+1XM8v6zoDTPPSIeANg==} @@ -257,6 +254,9 @@ packages: '@borewit/text-codec@0.2.1': resolution: {integrity: sha512-k7vvKPbf7J2fZ5klGRD9AeKfUvojuZIQ3BT5u7Jfv+puwXkUBUT5PVyMDfJZpy30CBDXGMgw7fguK/lpOMBvgw==} + '@cfworker/json-schema@4.1.1': + resolution: {integrity: sha512-gAmrUZSGtKc3AiBL71iNWxDsyUC5uMaKKGdvzYsBoTW/xi42JQHl7eKV2OYzCUqvc+D2RCcf7EXY2iCyFIk6og==} + '@cloudflare/workers-types@4.20260305.0': resolution: {integrity: sha512-sCgPFnQ03SVpC2OVW8wysONLZW/A8hlp9Mq2ckG/h1oId4kr9NawA6vUiOmOjCWRn2hIohejBYVQ+Vu20rCdKA==} @@ -270,6 +270,9 @@ packages: '@dabh/diagnostics@2.0.8': resolution: {integrity: sha512-R4MSXTVnuMzGD7bzHdW2ZhhdPC/igELENcq5IjEverBvq5hn1SXCWcsi6eSsdWP0/Ur+SItRRjAktmdoX/8R/Q==} + '@design.estate/dees-catalog@3.43.3': + resolution: {integrity: sha512-GjTePdwqNBL4isMOx4Ibei6pgK55H+DccbtgyNqjHRBz3LL14mo809ebjY2IZOVobswyzuTcNFvhfiqFP4/HLg==} + '@design.estate/dees-comms@1.0.30': resolution: {integrity: sha512-KchMlklJfKAjQiJiR0xmofXtQ27VgZtBIxcMwPE9d+h3jJRv+lPZxzBQVOM0eyM0uS44S5vJMZ11IeV4uDXSHg==} @@ -279,6 +282,9 @@ packages: '@design.estate/dees-element@2.1.6': resolution: {integrity: sha512-7zyHkUjB8UEQgT9VbB2IJtc/yuPt9CI5JGel3b6BxA1kecY64ceIjFvof1uIkc0QP8q2fMLLY45r1c+9zDTjzg==} + '@design.estate/dees-wcctools@3.8.0': + resolution: {integrity: sha512-CC14iVKUrguzD9jIrdPBd9fZ4egVJEZMxl5y8iy0l7WLumeoYvGsoXj5INVkRPLRVLqziIdi4Je1hXqHt2NU+g==} + '@emnapi/core@1.8.1': resolution: {integrity: sha512-AvT9QFpxK0Zd8J0jopedNm+w/2fIzvtPKPjqyw9jwvBaReTTqPBk9Hixaz7KbjimP+QNz605/XnjFcDAL2pqBg==} @@ -447,8 +453,28 @@ packages: '@esm-bundle/chai@4.3.4-fix.0': resolution: {integrity: sha512-26SKdM4uvDWlY8/OOOxSB1AqQWeBosCX3wRYUZO7enTAj03CtVxIiCimYVG2WpULcyV51qapK4qTovwkUr5Mlw==} - '@git.zone/tsbuild@2.7.3': - resolution: {integrity: sha512-GMM6VU6TcVvYINfV6b1ZVGZXYhdtriYyAHifvrn8IdRar6thIN3ig3N2J/S1kmX2KLrBbx0JyF3tNChHdNR+wA==} + '@fortawesome/fontawesome-common-types@7.2.0': + resolution: {integrity: sha512-IpR0bER9FY25p+e7BmFH25MZKEwFHTfRAfhOyJubgiDnoJNsSvJ7nigLraHtp4VOG/cy8D7uiV0dLkHOne5Fhw==} + engines: {node: '>=6'} + + '@fortawesome/fontawesome-svg-core@7.2.0': + resolution: {integrity: sha512-6639htZMjEkwskf3J+e6/iar+4cTNM9qhoWuRfj9F3eJD6r7iCzV1SWnQr2Mdv0QT0suuqU8BoJCZUyCtP9R4Q==} + engines: {node: '>=6'} + + '@fortawesome/free-brands-svg-icons@7.2.0': + resolution: {integrity: sha512-VNG8xqOip1JuJcC3zsVsKRQ60oXG9+oYNDCosjoU/H9pgYmLTEwWw8pE0jhPz/JWdHeUuK6+NQ3qsM4gIbdbYQ==} + engines: {node: '>=6'} + + '@fortawesome/free-regular-svg-icons@7.2.0': + resolution: {integrity: sha512-iycmlN51EULlQ4D/UU9WZnHiN0CvjJ2TuuCrAh+1MVdzD+4ViKYH2deNAll4XAAYlZa8WAefHR5taSK8hYmSMw==} + engines: {node: '>=6'} + + '@fortawesome/free-solid-svg-icons@7.2.0': + resolution: {integrity: sha512-YTVITFGN0/24PxzXrwqCgnyd7njDuzp5ZvaCx5nq/jg55kUYd94Nj8UTchBdBofi/L0nwRfjGOg0E41d2u9T1w==} + engines: {node: '>=6'} + + '@git.zone/tsbuild@4.1.2': + resolution: {integrity: sha512-S518ulKveO76pS6jrAELrnFaCw5nDAIZD9j6QzVmLYDiZuJmlRwPK3/2E8ugQ+b7ffpkwJ9MT685ooEGDcWQ4Q==} hasBin: true '@git.zone/tsbundle@2.9.0': @@ -459,12 +485,12 @@ packages: resolution: {integrity: sha512-dkgaDBTzZJ53lAV72r7OW/W7l/KqpkncFuPojr11JO35OKAbjjDhZbAwPv4oGX9NplyXrhC5VJRPNX/orqNTHA==} hasBin: true - '@git.zone/tsrun@1.6.2': - resolution: {integrity: sha512-SOHbQqBg3/769/jPQcdpPCmugdEtIJINiG0O6aWx+su91GvGhheha5dAhccsCutJYErr+aJcBqBYuUYfhOfkFQ==} + '@git.zone/tsrun@2.0.1': + resolution: {integrity: sha512-NEcnsjvlC1o3Z6SS3VhKCf6Ev+Sh4EAinmggslrIR/ppMrvjDbXNFXoyr3PB+GLeSAR0JRZ1fGvVYjpEzjBdIg==} hasBin: true - '@git.zone/tstest@1.11.5': - resolution: {integrity: sha512-7YHFNGMjUd3WOFXi0DlUieQcdxzwYqxL7n2XDE7SOUd8XpMxVsGsY2SuwBKXlbT10By/H3thQTsy+Hjy9ahGWA==} + '@git.zone/tstest@3.2.0': + resolution: {integrity: sha512-NXJkgfaBL1owmhC4rW+ikPWQWkXK4s1R0akbMdqZ8MiaW5+Gs1xYZ+iEPRzsGS0s0P+4VS7Y+hCnAjCL90AcIg==} hasBin: true '@hapi/bourne@3.0.0': @@ -580,6 +606,81 @@ packages: '@mongodb-js/saslprep@1.4.6': resolution: {integrity: sha512-y+x3H1xBZd38n10NZF/rEBlvDOOMQ6LKUTHqr8R9VkJ+mmQOYtJFxIlkkK8fZrtOiL6VixbOBWMbZGBdal3Z1g==} + '@napi-rs/canvas-android-arm64@0.1.95': + resolution: {integrity: sha512-SqTh0wsYbetckMXEvHqmR7HKRJujVf1sYv1xdlhkifg6TlCSysz1opa49LlS3+xWuazcQcfRfmhA07HxxxGsAA==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [android] + + '@napi-rs/canvas-darwin-arm64@0.1.95': + resolution: {integrity: sha512-F7jT0Syu+B9DGBUBcMk3qCRIxAWiDXmvEjamwbYfbZl7asI1pmXZUnCOoIu49Wt0RNooToYfRDxU9omD6t5Xuw==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [darwin] + + '@napi-rs/canvas-darwin-x64@0.1.95': + resolution: {integrity: sha512-54eb2Ho15RDjYGXO/harjRznBrAvu+j5nQ85Z4Qd6Qg3slR8/Ja+Yvvy9G4yo7rdX6NR9GPkZeSTf2UcKXwaXw==} + engines: {node: '>= 10'} + cpu: [x64] + os: [darwin] + + '@napi-rs/canvas-linux-arm-gnueabihf@0.1.95': + resolution: {integrity: sha512-hYaLCSLx5bmbnclzQc3ado3PgZ66blJWzjXp0wJmdwpr/kH+Mwhj6vuytJIomgksyJoCdIqIa4N6aiqBGJtJ5Q==} + engines: {node: '>= 10'} + cpu: [arm] + os: [linux] + + '@napi-rs/canvas-linux-arm64-gnu@0.1.95': + resolution: {integrity: sha512-J7VipONahKsmScPZsipHVQBqpbZx4favaD8/enWzzlGcjiwycOoymL7f4tNeqdjK0su19bDOUt6mjp9gsPWYlw==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [linux] + libc: [glibc] + + '@napi-rs/canvas-linux-arm64-musl@0.1.95': + resolution: {integrity: sha512-PXy0UT1J/8MPG8UAkWp6Fd51ZtIZINFzIjGH909JjQrtCuJf3X6nanHYdz1A+Wq9o4aoPAw1YEUpFS1lelsVlg==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [linux] + libc: [musl] + + '@napi-rs/canvas-linux-riscv64-gnu@0.1.95': + resolution: {integrity: sha512-2IzCkW2RHRdcgF9W5/plHvYFpc6uikyjMb5SxjqmNxfyDFz9/HB89yhi8YQo0SNqrGRI7yBVDec7Pt+uMyRWsg==} + engines: {node: '>= 10'} + cpu: [riscv64] + os: [linux] + libc: [glibc] + + '@napi-rs/canvas-linux-x64-gnu@0.1.95': + resolution: {integrity: sha512-OV/ol/OtcUr4qDhQg8G7SdViZX8XyQeKpPsVv/j3+7U178FGoU4M+yIocdVo1ih/A8GQ63+LjF4jDoEjaVU8Pw==} + engines: {node: '>= 10'} + cpu: [x64] + os: [linux] + libc: [glibc] + + '@napi-rs/canvas-linux-x64-musl@0.1.95': + resolution: {integrity: sha512-Z5KzqBK/XzPz5+SFHKz7yKqClEQ8pOiEDdgk5SlphBLVNb8JFIJkxhtJKSvnJyHh2rjVgiFmvtJzMF0gNwwKyQ==} + engines: {node: '>= 10'} + cpu: [x64] + os: [linux] + libc: [musl] + + '@napi-rs/canvas-win32-arm64-msvc@0.1.95': + resolution: {integrity: sha512-aj0YbRpe8qVJ4OzMsK7NfNQePgcf9zkGFzNZ9mSuaxXzhpLHmlF2GivNdCdNOg8WzA/NxV6IU4c5XkXadUMLeA==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [win32] + + '@napi-rs/canvas-win32-x64-msvc@0.1.95': + resolution: {integrity: sha512-GA8leTTCfdjuHi8reICTIxU0081PhXvl3lzIniLUjeLACx9GubUiyzkwFb+oyeKLS5IAGZFLKnzAf4wm2epRlA==} + engines: {node: '>= 10'} + cpu: [x64] + os: [win32] + + '@napi-rs/canvas@0.1.95': + resolution: {integrity: sha512-lkg23ge+rgyhgUwXmlbkPEhuhHq/hUi/gXKH+4I7vO+lJrbNfEYcQdJLIGjKyXLQzgFiiyDAwh5vAe/tITAE+w==} + engines: {node: '>= 10'} + '@napi-rs/wasm-runtime@1.0.7': resolution: {integrity: sha512-SeDnOO0Tk7Okiq6DbXmmBODgOAb9dp9gjlphokTUxmt8U3liIP1ZsozBahH69j/RJv+Rfs6IwUKHTgQYJ/HBAw==} @@ -715,10 +816,6 @@ packages: '@push.rocks/smartcache@1.0.18': resolution: {integrity: sha512-3+cmLu9chbnmi4yD4kjlFP/Tn4NReaZIoicEcGTtwbcokTrSDMs3YPdJzIpDZkAs83PW7OcVSHa3Ak5KU5OWzA==} - '@push.rocks/smartchok@1.2.0': - resolution: {integrity: sha512-I5fR++k6nR1wiMQUwcTYzO0g8FwD6gN+3HwfIzpQlolrM91i6Q5TaoMlt3aysbvKCSNvkL3FlJLOfUHNGWoWkA==} - deprecated: This package has been renamed. Please use @push.rocks/smartwatch instead. - '@push.rocks/smartcli@4.0.20': resolution: {integrity: sha512-gCo4ItvsPj8WoVAJw/6vkuoGA5FtIoACux2ktcCeH0nrFe7/xGR6waJ1aZcYAi7QN4gi52TlsgwuKz7BzXqhmQ==} @@ -749,9 +846,6 @@ packages: '@push.rocks/smartexit@1.1.0': resolution: {integrity: sha512-GD8VLIbxQuwvhPXwK4eH162XAYSj+M3wGKWGNO3i1iY4bj8P3BARcgsWx6/ntN3aCo5ygWtrevrfD5iecYY2Ng==} - '@push.rocks/smartexpect@1.6.1': - resolution: {integrity: sha512-NFQXEPkGiMNxyvFwKyzDWe3ADYdf8KNvIcV7TGNZZT3uPQtk65te4Q+a1cWErjP/61yE9XdYiQA66QQp+TV9IQ==} - '@push.rocks/smartexpect@2.5.0': resolution: {integrity: sha512-yoyuCoQ3tTiAriuvF+/09fNbVfFnacudL2SwHSzPhX/ugaE7VTSWXQ9A34eKOWvil0MPyDcOY36fVZDxvrPd8A==} @@ -776,6 +870,9 @@ packages: '@push.rocks/smarthash@3.2.6': resolution: {integrity: sha512-Mq/WNX0Tjjes3X1gHd/ZBwOOKSrAG/Z3Xoc0OcCm3P20WKpniihkMpsnlE7wGjvpHLi/ZRe/XkB3KC3d5r9X4g==} + '@push.rocks/smarti18n@1.0.4': + resolution: {integrity: sha512-bHIi9Iuzp2cbux9q79ZK5jOQYPsYJ9zDDS4p/xEPQH31gr0mcFRosLSQb1kvDQDVmUhI0ADlQMqr2ui9zEXQHA==} + '@push.rocks/smartinteract@2.0.16': resolution: {integrity: sha512-eltvVRRUKBKd77DSFA4DPY2g4V4teZLNe8A93CDy/WglglYcUjxMoLY/b0DFTWCWKYT+yjk6Fe6p0FRrvX9Yvg==} @@ -812,6 +909,9 @@ packages: '@push.rocks/smartmongo@2.2.0': resolution: {integrity: sha512-ovVCNoJ3D0aBuKtoKaQWWQKvBngaGJq9fAPQigzji1EHsS1XyGpXWCpe5nq/ptGvBROOcpqZcOFEGAcrnb+OjA==} + '@push.rocks/smartmongo@5.1.0': + resolution: {integrity: sha512-2tpKf8K+SMdLHOEpafgKPIN+ypWTLwHc33hCUDNMQ1KaL7vokkavA44+fHxQydOGPMtDi22tSMFeVMCcUSzs4w==} + '@push.rocks/smartnetwork@4.4.0': resolution: {integrity: sha512-OvFtz41cvQ7lcXwaIOhghNUUlNoMxvwKDctbDvMyuZyEH08SpLjhyv2FuKbKL/mgwA/WxakTbohoC8SW7t+kiw==} @@ -866,15 +966,18 @@ packages: '@push.rocks/smarts3@2.2.7': resolution: {integrity: sha512-9ZXGMlmUL2Wd+YJO0xOB8KyqPf4V++fWJvTq4s76bnqEuaCr9OLfq6czhban+i4cD3ZdIjehfuHqctzjuLw8Jw==} + '@push.rocks/smarts3@5.3.0': + resolution: {integrity: sha512-6bo55ovCDEylbTxwPFZYDrZrz2babQEUmxHIexmVcP2j+6LYRHDbGYnWoyKdtqniqDFZ04pFkOoZ85hUzU5xCw==} + + '@push.rocks/smartserve@2.0.1': + resolution: {integrity: sha512-YQb2qexfCzCqOlLWBBXKMg6xG4zahCPAxomz/KEKAwHtW6wMTtuHKSTSkRTQ0vl9jssLMAmRz2OyafiL9XGJXQ==} + '@push.rocks/smartshell@3.3.0': resolution: {integrity: sha512-m0w618H6YBs+vXGz1CgS4nPi5CUAnqRtckcS9/koGwfcIx1IpjqmiP47BoCTbdgcv0IPUxQVBG1IXTHPuZ8Z5g==} '@push.rocks/smartsitemap@2.0.4': resolution: {integrity: sha512-76dYWG/o/EjV4vYCK7ZKM35T9xgrI+oHEiiIE6E2MDaFIU6QnSfciTfbscH5nc0vxx8Ah+I0HPEJO94BM2S39w==} - '@push.rocks/smartsocket@2.1.0': - resolution: {integrity: sha512-etOGyfiDFQz/1WJnD3jFL2N7ykujTjiudAz6qZTz82xE5oabKuKX+Cn8SdM9dOwzyWmBUKbUdll8QhovAXjn+g==} - '@push.rocks/smartspawn@3.0.3': resolution: {integrity: sha512-DyrGPV69wwOiJgKkyruk5hS3UEGZ99xFAqBE9O2nM8VXCRLbbty3xt1Ug5Z092ZZmJYaaGMSnMw3ijyZJFCT0Q==} @@ -899,6 +1002,10 @@ packages: '@push.rocks/smartversion@3.0.5': resolution: {integrity: sha512-8MZSo1yqyaKxKq0Q5N188l4un++9GFWVbhCAX5mXJwewZHn97ujffTeL+eOQYpWFTEpUhaq1QhL4NhqObBCt1Q==} + '@push.rocks/smartwatch@6.3.0': + resolution: {integrity: sha512-TeZ1PGBoBMpC4/CK8StIj5InEiFfKp7xWJSm3aYMjB/uaoeRP0vXqv1ORIC/TKYGJuEDuAXUsit8tZVjn0qT1Q==} + engines: {node: '>=20.0.0'} + '@push.rocks/smartxml@2.0.0': resolution: {integrity: sha512-1d06zYJX4Zt8s5w5qFOUg2LAEz9ykrh9d6CQPK4WAgOBIefb1xzVEWHc7yoxicc2OkzNgC3IBCEg3s6BncZKWw==} @@ -908,8 +1015,8 @@ packages: '@push.rocks/smartyaml@3.0.4': resolution: {integrity: sha512-1JRt+hnoc2zHw3AW+vXKlCdSVwqOmY/01fu+2HBviS0UDjoZCa+/rp6E3GaQb5lEEafKi8ENbffAfjXXp3N2xQ==} - '@push.rocks/tapbundle@5.6.3': - resolution: {integrity: sha512-hFzsf59rg1K70i45llj7PCyyCZp7JW19XRR+Q1gge1T0pBN8Wi53aYqP/2qtxdMiNVe2s3ESp6VJZv3sLOMYPQ==} + '@push.rocks/tapbundle@6.0.3': + resolution: {integrity: sha512-SuP14V6TPdtd1y1CYTvwTKJdpHa7EzY55NfaaEMxW4oRKvHgJiOiPEiR/IrtL9tSiDMSfrx12waTMgZheYaBug==} '@push.rocks/taskbuffer@3.5.0': resolution: {integrity: sha512-Y9WwIEIyp6oVFdj06j84tfrZIvjhbMb3DF52rYxlTeYLk3W7RPhSg1bGPCbtkXWeKdBrSe37V90BkOG7Qq8Pqg==} @@ -917,8 +1024,8 @@ packages: '@push.rocks/webrequest@3.0.37': resolution: {integrity: sha512-fLN7kP6GeHFxE4UH4r9C9pjcQb0QkJxHeAMwXvbOqB9hh0MFNKhtGU7GoaTn8SVRGRMPc9UqZVNwo6u5l8Wn0A==} - '@push.rocks/webrequest@4.0.2': - resolution: {integrity: sha512-rowzty+Q2papFBcnNYPcy+8CQJukSn/FGfQG8ap0bUgQUsx882u8kEyLM0Q+GlGHS5OiZ+Z0z5TZqLKlk3XHxA==} + '@push.rocks/webrequest@4.0.5': + resolution: {integrity: sha512-wVSCaXqJ9Vh+rbwVz0wDl46dYz4rnwwSrm5vbVXKbuH6oKTPF0YRoujeJPqRltIn64RVGdLeY9/6ix+ZCrzhsg==} '@push.rocks/websetup@3.0.19': resolution: {integrity: sha512-iKJDwXdMmQdu5siOIgziPRxM51lN1AU9HOr+yMteu1YMDkZT7HKCyisDAr4gC9WZ9a7FzsG8zgthm4dMeA8NTw==} @@ -961,6 +1068,9 @@ packages: resolution: {integrity: sha512-TxHSar7Cj29E+GOcIj4DeZKWCNVzHKdqnrBRqcBqLqmeYZvzFosLXpFKoaCJDq7MSxuPoCvu5woSdp9YmPXyog==} deprecated: This package has been deprecated in favour of the new package at @push.rocks/smartstring + '@remirror/core-constants@3.0.0': + resolution: {integrity: sha512-42aWfPrimMfDKDi4YegyS7x+/0tlzaqwPQCULLanv3DMIlu96KTJR0fM5isWX2UViOqlGnX6YFgqWepcX+XMNg==} + '@rolldown/binding-android-arm64@1.0.0-beta.52': resolution: {integrity: sha512-MBGIgysimZPqTDcLXI+i9VveijkP5C3EAncEogXhqfax6YXj1Tr2LY3DVuEOMIjWfMPMhtQSPup4fSTAmgjqIw==} engines: {node: ^20.19.0 || >=22.12.0} @@ -1348,9 +1458,6 @@ packages: '@so-ric/colorspace@1.1.6': resolution: {integrity: sha512-/KiKkpHNOBgkFJwu9sh48LkHSMYGyuTcSFK/qMBdnOAlrRJzRSXAOFB5qwzaVQuDl8wAvHVMkaASQDReTahxuw==} - '@socket.io/component-emitter@3.1.2': - resolution: {integrity: sha512-9BCxFwvbGg/RsZK9tjXd8s4UcwR0MWeFQ1XEKIQVVvAGJyINdrqKMcTRyLoK8Rse1GjzLV9cwjWV1olXRWEXVA==} - '@szmarczak/http-timer@5.0.1': resolution: {integrity: sha512-+PmQX0PiAYPMeVYe237LJAYvOMYW1j2rH5YROyS3b4CTVJum34HfRvKvAzozHAQG0TnHNdUfY9nCeUyRAs//cw==} engines: {node: '>=14.16'} @@ -1372,6 +1479,141 @@ packages: vue: optional: true + '@tempfix/webcontainer__api@1.6.1': + resolution: {integrity: sha512-Hgn3cwy0vPzjrVBqeVnY0jNZLaOCW7d+dxBe7Jv9YGHAjJ8udUMS+KbTywSv5paAfld3A/RN/iolmMzOwZxLTA==} + + '@tiptap/core@2.27.2': + resolution: {integrity: sha512-ABL1N6eoxzDzC1bYvkMbvyexHacszsKdVPYqhl5GwHLOvpZcv9VE9QaKwDILTyz5voCA0lGcAAXZp+qnXOk5lQ==} + peerDependencies: + '@tiptap/pm': ^2.7.0 + + '@tiptap/extension-blockquote@2.27.2': + resolution: {integrity: sha512-oIGZgiAeA4tG3YxbTDfrmENL4/CIwGuP3THtHsNhwRqwsl9SfMk58Ucopi2GXTQSdYXpRJ0ahE6nPqB5D6j/Zw==} + peerDependencies: + '@tiptap/core': ^2.7.0 + + '@tiptap/extension-bold@2.27.2': + resolution: {integrity: sha512-bR7J5IwjCGQ0s3CIxyMvOCnMFMzIvsc5OVZKscTN5UkXzFsaY6muUAIqtKxayBUucjtUskm5qZowJITCeCb1/A==} + peerDependencies: + '@tiptap/core': ^2.7.0 + + '@tiptap/extension-bullet-list@2.27.2': + resolution: {integrity: sha512-gmFuKi97u5f8uFc/GQs+zmezjiulZmFiDYTh3trVoLRoc2SAHOjGEB7qxdx7dsqmMN7gwiAWAEVurLKIi1lnnw==} + peerDependencies: + '@tiptap/core': ^2.7.0 + + '@tiptap/extension-code-block@2.27.2': + resolution: {integrity: sha512-KgvdQHS4jXr79aU3wZOGBIZYYl9vCB7uDEuRFV4so2rYrfmiYMw3T8bTnlNEEGe4RUeAms1i4fdwwvQp9nR1Dw==} + peerDependencies: + '@tiptap/core': ^2.7.0 + '@tiptap/pm': ^2.7.0 + + '@tiptap/extension-code@2.27.2': + resolution: {integrity: sha512-7X9AgwqiIGXoZX7uvdHQsGsjILnN/JaEVtqfXZnPECzKGaWHeK/Ao4sYvIIIffsyZJA8k5DC7ny2/0sAgr2TuA==} + peerDependencies: + '@tiptap/core': ^2.7.0 + + '@tiptap/extension-document@2.27.2': + resolution: {integrity: sha512-CFhAYsPnyYnosDC4639sCJnBUnYH4Cat9qH5NZWHVvdgtDwu8GZgZn2eSzaKSYXWH1vJ9DSlCK+7UyC3SNXIBA==} + peerDependencies: + '@tiptap/core': ^2.7.0 + + '@tiptap/extension-dropcursor@2.27.2': + resolution: {integrity: sha512-oEu/OrktNoQXq1x29NnH/GOIzQZm8ieTQl3FK27nxfBPA89cNoH4mFEUmBL5/OFIENIjiYG3qWpg6voIqzswNw==} + peerDependencies: + '@tiptap/core': ^2.7.0 + '@tiptap/pm': ^2.7.0 + + '@tiptap/extension-gapcursor@2.27.2': + resolution: {integrity: sha512-/c9VF1HBxj+AP54XGVgCmD9bEGYc5w5OofYCFQgM7l7PB1J00A4vOke0oPkHJnqnOOyPlFaxO/7N6l3XwFcnKA==} + peerDependencies: + '@tiptap/core': ^2.7.0 + '@tiptap/pm': ^2.7.0 + + '@tiptap/extension-hard-break@2.27.2': + resolution: {integrity: sha512-kSRVGKlCYK6AGR0h8xRkk0WOFGXHIIndod3GKgWU49APuIGDiXd8sziXsSlniUsWmqgDmDXcNnSzPcV7AQ8YNg==} + peerDependencies: + '@tiptap/core': ^2.7.0 + + '@tiptap/extension-heading@2.27.2': + resolution: {integrity: sha512-iM3yeRWuuQR/IRQ1djwNooJGfn9Jts9zF43qZIUf+U2NY8IlvdNsk2wTOdBgh6E0CamrStPxYGuln3ZS4fuglw==} + peerDependencies: + '@tiptap/core': ^2.7.0 + + '@tiptap/extension-history@2.27.2': + resolution: {integrity: sha512-+hSyqERoFNTWPiZx4/FCyZ/0eFqB9fuMdTB4AC/q9iwu3RNWAQtlsJg5230bf/qmyO6bZxRUc0k8p4hrV6ybAw==} + peerDependencies: + '@tiptap/core': ^2.7.0 + '@tiptap/pm': ^2.7.0 + + '@tiptap/extension-horizontal-rule@2.27.2': + resolution: {integrity: sha512-WGWUSgX+jCsbtf9Y9OCUUgRZYuwjVoieW5n6mAUohJ9/6gc6sGIOrUpBShf+HHo6WD+gtQjRd+PssmX3NPWMpg==} + peerDependencies: + '@tiptap/core': ^2.7.0 + '@tiptap/pm': ^2.7.0 + + '@tiptap/extension-italic@2.27.2': + resolution: {integrity: sha512-1OFsw2SZqfaqx5Fa5v90iNlPRcqyt+lVSjBwTDzuPxTPFY4Q0mL89mKgkq2gVHYNCiaRkXvFLDxaSvBWbmthgg==} + peerDependencies: + '@tiptap/core': ^2.7.0 + + '@tiptap/extension-link@2.27.2': + resolution: {integrity: sha512-bnP61qkr0Kj9Cgnop1hxn2zbOCBzNtmawxr92bVTOE31fJv6FhtCnQiD6tuPQVGMYhcmAj7eihtvuEMFfqEPcQ==} + peerDependencies: + '@tiptap/core': ^2.7.0 + '@tiptap/pm': ^2.7.0 + + '@tiptap/extension-list-item@2.27.2': + resolution: {integrity: sha512-eJNee7IEGXMnmygM5SdMGDC8m/lMWmwNGf9fPCK6xk0NxuQRgmZHL6uApKcdH6gyNcRPHCqvTTkhEP7pbny/fg==} + peerDependencies: + '@tiptap/core': ^2.7.0 + + '@tiptap/extension-ordered-list@2.27.2': + resolution: {integrity: sha512-M7A4tLGJcLPYdLC4CI2Gwl8LOrENQW59u3cMVa+KkwG1hzSJyPsbDpa1DI6oXPC2WtYiTf22zrbq3gVvH+KA2w==} + peerDependencies: + '@tiptap/core': ^2.7.0 + + '@tiptap/extension-paragraph@2.27.2': + resolution: {integrity: sha512-elYVn2wHJJ+zB9LESENWOAfI4TNT0jqEN34sMA/hCtA4im1ZG2DdLHwkHIshj/c4H0dzQhmsS/YmNC5Vbqab/A==} + peerDependencies: + '@tiptap/core': ^2.7.0 + + '@tiptap/extension-strike@2.27.2': + resolution: {integrity: sha512-HHIjhafLhS2lHgfAsCwC1okqMsQzR4/mkGDm4M583Yftyjri1TNA7lzhzXWRFWiiMfJxKtdjHjUAQaHuteRTZw==} + peerDependencies: + '@tiptap/core': ^2.7.0 + + '@tiptap/extension-text-align@2.27.2': + resolution: {integrity: sha512-0Pyks6Hu+Q/+9+5/osoSv0SP6jIerdWMYbi13aaZLsJoj3lBj5WNaE11JtAwSFN5sx0IbqhDSlp1zkvRnzgZ8g==} + peerDependencies: + '@tiptap/core': ^2.7.0 + + '@tiptap/extension-text-style@2.27.2': + resolution: {integrity: sha512-Omk+uxjJLyEY69KStpCw5fA9asvV+MGcAX2HOxyISDFoLaL49TMrNjhGAuz09P1L1b0KGXo4ml7Q3v/Lfy4WPA==} + peerDependencies: + '@tiptap/core': ^2.7.0 + + '@tiptap/extension-text@2.27.2': + resolution: {integrity: sha512-Xk7nYcigljAY0GO9hAQpZ65ZCxqOqaAlTPDFcKerXmlkQZP/8ndx95OgUb1Xf63kmPOh3xypurGS2is3v0MXSA==} + peerDependencies: + '@tiptap/core': ^2.7.0 + + '@tiptap/extension-typography@2.27.2': + resolution: {integrity: sha512-NSyqDa8PlAZoVRfTWQuxueTZ6ftOD72EV7UKVpftf3C+Heme727mvwl1YHMnagOlqVoxBhFOrl9CnSs/q5uayQ==} + peerDependencies: + '@tiptap/core': ^2.7.0 + + '@tiptap/extension-underline@2.27.2': + resolution: {integrity: sha512-gPOsbAcw1S07ezpAISwoO8f0RxpjcSH7VsHEFDVuXm4ODE32nhvSinvHQjv2icRLOXev+bnA7oIBu7Oy859gWQ==} + peerDependencies: + '@tiptap/core': ^2.7.0 + + '@tiptap/pm@2.27.2': + resolution: {integrity: sha512-kaEg7BfiJPDQMKbjVIzEPO3wlcA+pZb2tlcK9gPrdDnEFaec2QTF1sXz2ak2IIb2curvnIrQ4yrfHgLlVA72wA==} + + '@tiptap/starter-kit@2.27.2': + resolution: {integrity: sha512-bb0gJvPoDuyRUQ/iuN52j1//EtWWttw+RXAv1uJxfR0uKf8X7uAqzaOOgwjknoCIDC97+1YHwpGdnRjpDkOBxw==} + '@tokenizer/inflate@0.4.1': resolution: {integrity: sha512-2mAv+8pkG6GIZiF1kNg1jAjh27IDxEPKwdGul3snfztFerfPGI1LjDezZp3i7BElXompqEtPmoPx6c2wgtWsOA==} engines: {node: '>=18'} @@ -1430,9 +1672,6 @@ packages: '@types/cookies@0.9.2': resolution: {integrity: sha512-1AvkDdZM2dbyFybL4fxpuNCaWyv//0AwsuUk2DWeXyM1/5ZKm6W3z6mQi24RZ4l2ucY+bkSHzbDVpySqPGuV8A==} - '@types/cors@2.8.19': - resolution: {integrity: sha512-mFNylyeyqN93lfe/9CSxOGREz8cpzAhH+E93xJ4xWQf62V8sQ/24reV2nyzUWM6H6Xji+GGHpkbLe7pVoUEskg==} - '@types/debounce@1.2.4': resolution: {integrity: sha512-jBqiORIzKDOToaF63Fm//haOCHuwQuLa2202RK4MozpA6lh93eCBc+/8+wZn5OzjJt3ySdc+74SXWXB55Ewtyw==} @@ -1493,9 +1732,18 @@ packages: '@types/koa@2.15.0': resolution: {integrity: sha512-7QFsywoE5URbuVnG3loe03QXuGajrnotr3gQkXcEBShORai23MePfFYdhz90FEtBBpkyIYQbVD+evKtloCgX3g==} + '@types/linkify-it@5.0.0': + resolution: {integrity: sha512-sVDA58zAw4eWAffKOaQH5/5j3XeayukzDk+ewSsnv3p4yJEZHCCzMDiZM8e0OUrRvmpGZ85jf4yDHkHsgBNr9Q==} + + '@types/markdown-it@14.1.2': + resolution: {integrity: sha512-promo4eFwuiW+TfGxhi+0x3czqTYJkG8qB17ZUJiVF10Xm7NLVRSLUsfRTU/6h1e24VvRnXCx+hG7li58lkzog==} + '@types/mdast@4.0.4': resolution: {integrity: sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==} + '@types/mdurl@2.0.0': + resolution: {integrity: sha512-RGdgjQUZba5p6QEFAVx2OGb8rQDL/cPRG7GiedRzMcJ1tYnUANBncjbSB1NRGwbvjcPeikRABz2nshyPk1bhWg==} + '@types/mime-types@2.1.4': resolution: {integrity: sha512-lfU4b34HOri+kAY5UheuFMWPDOI+OPceBSHZKp69gEyTL/mmJ4cnU6Y/rlme3UL3GyOn6Y42hyIEw0/q8sWx5w==} @@ -1514,6 +1762,9 @@ packages: '@types/node@22.19.13': resolution: {integrity: sha512-akNQMv0wW5uyRpD2v2IEyRSZiR+BeGuoB6L310EgGObO44HSMNT8z1xzio28V8qOrgYaopIDNA18YgdXd+qTiw==} + '@types/node@25.3.3': + resolution: {integrity: sha512-DpzbrH7wIcBaJibpKo9nnSQL0MTRdnWttGyE5haGwK86xgMOkFLp7vEyfQPGLOJh5wNYiJ3V9PmUMDhV9u8kkQ==} + '@types/parse5@6.0.3': resolution: {integrity: sha512-SuT16Q1K51EAVPz1K29DJ/sXjhSQ0zjvsypYJ6tlwVsRV9jwW5Adq2ch8Dq8kDBCkYnELS7N7VNCSB5nC56t/g==} @@ -1633,6 +1884,9 @@ packages: resolution: {integrity: sha512-84E1025aUSjvZU1j17eCTwV7m5Zg3cZHErV3+CaJM9JPCesZwLraIa0ONIQ9w4KLgcDgJFw9UnJ0LbFf42h6tg==} engines: {node: '>=18.0.0'} + '@yr/monotone-cubic-spline@1.0.3': + resolution: {integrity: sha512-FQXkOta0XBSUPHndIKON2Y9JeQz5ZeMqLYZVVK93FliNBFm7LNMIZmY6FrMEB9XPcDbE2bekMbZD6kzDkxwYjA==} + accepts@1.3.8: resolution: {integrity: sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==} engines: {node: '>= 0.6'} @@ -1677,6 +1931,9 @@ packages: resolution: {integrity: sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==} engines: {node: '>=10'} + apexcharts@5.10.0: + resolution: {integrity: sha512-QRg/IX8yjGRUgBbHGdGV647XUFaZZ7+sOgOf9kwO+jrg8/VZ4HtQ/Fg3MgDjR6YVw8hkM7J9boTp91WCmSIp4A==} + argparse@1.0.10: resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==} @@ -1778,10 +2035,6 @@ packages: base64-js@1.5.1: resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} - base64id@2.0.0: - resolution: {integrity: sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog==} - engines: {node: ^4.5.0 || >= 5.9} - basic-ftp@5.2.0: resolution: {integrity: sha512-VoMINM2rqJwJgfdHq6RiUudKt2BV+FY5ZFezP/ypmwayk68+NzzAQy4XXLlqsGD4MCzq3DrmNFD/uUmBJuGoXw==} engines: {node: '>=10.0.0'} @@ -2020,12 +2273,8 @@ packages: resolution: {integrity: sha512-TG2hpqe4ELx54QER/S3HQ9SRVnQnGBtKUz5bLQWtYAQ+o6GpgMs6sYUvaiJjVxb+UXwhRhAEP3m7LbsIZ77Hmw==} engines: {node: '>= 0.8'} - cors@2.8.6: - resolution: {integrity: sha512-tJtZBBHA6vjIAaF6EnIaq6laBBP9aq/Y3ouVJjEfoHbRBcHBAHYcMh/w8LDrk2PvIMMq8gmopa5D4V8RmbrxGw==} - engines: {node: '>= 0.10'} - - cosmiconfig@9.0.0: - resolution: {integrity: sha512-itvL5h8RETACmOTFc4UfIyB2RfEHi71Ax6E/PivVxq9NseKbOWpeyHEOIbmAw1rs8Ak0VursQNww7lf7YtUwzg==} + cosmiconfig@9.0.1: + resolution: {integrity: sha512-hr4ihw+DBqcvrsEDioRO31Z17x71pUYoNe/4h6Z0wB72p7MU7/9gH8Q3s12NFhHPfYBBOV3qyfUxmr/Yn3shnQ==} engines: {node: '>=14'} peerDependencies: typescript: '>=4.9.5' @@ -2033,6 +2282,9 @@ packages: typescript: optional: true + crelt@1.0.6: + resolution: {integrity: sha512-VQ2MBenTq1fWZUH9DJNGti7kKv6EeAuYr3cLwxUWhIu1baTaXh4Ib5W2CqHVqib4/MqbYGJqiL3Zb8GJZr3l4g==} + croner@10.0.1: resolution: {integrity: sha512-ixNtAJndqh173VQ4KodSdJEI6nuioBWI0V1ITNKhZZsO0pEMoDxz539T4FTTbSZ/xIOSuDnzxLVRqBVSvPNE2g==} engines: {node: '>=18.0'} @@ -2066,15 +2318,6 @@ packages: supports-color: optional: true - debug@4.3.7: - resolution: {integrity: sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==} - engines: {node: '>=6.0'} - peerDependencies: - supports-color: '*' - peerDependenciesMeta: - supports-color: - optional: true - debug@4.4.3: resolution: {integrity: sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==} engines: {node: '>=6.0'} @@ -2167,6 +2410,9 @@ packages: resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} engines: {node: '>=8'} + dompurify@3.2.7: + resolution: {integrity: sha512-WhL/YuveyGXJaerVlMYGWhvQswa7myDG17P7Vu65EWC05o8vfeNbvNf4d/BOvH99+ZW+LlQsc1GDKMa1vNK6dw==} + dunder-proto@1.0.1: resolution: {integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==} engines: {node: '>= 0.4'} @@ -2191,17 +2437,6 @@ packages: end-of-stream@1.4.5: resolution: {integrity: sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg==} - engine.io-client@6.6.4: - resolution: {integrity: sha512-+kjUJnZGwzewFDw951CDWcwj35vMNf2fcj7xQWOctq1F2i1jkDdVvdFG9kM/BEChymCH36KgjnW0NsL58JYRxw==} - - engine.io-parser@5.2.3: - resolution: {integrity: sha512-HqD3yTBfnBxIrbnM1DoD6Pcq8NECnh8d4As1Qgh0z5Gg3jRRIqijury0CL3ghu/edArpUYiYqQiDUQBIs4np3Q==} - engines: {node: '>=10.0.0'} - - engine.io@6.6.4: - resolution: {integrity: sha512-ZCkIjSYNDyGn0R6ewHDtXgns/Zre/NT6Agvq1/WobF7JXgFff4SeDroKiCO3fNJreU9YG429Sc81o4w5ok/W5g==} - engines: {node: '>=10.2.0'} - entities@4.5.0: resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==} engines: {node: '>=0.12'} @@ -2255,6 +2490,10 @@ packages: resolution: {integrity: sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==} engines: {node: '>=8'} + escape-string-regexp@4.0.0: + resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} + engines: {node: '>=10'} + escape-string-regexp@5.0.0: resolution: {integrity: sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==} engines: {node: '>=12'} @@ -2299,10 +2538,6 @@ packages: resolution: {integrity: sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - express-force-ssl@0.3.2: - resolution: {integrity: sha1-AbK0mK5v0uQRUrIrV6Phc3c69n4=} - engines: {node: '>=0.2.2'} - express@5.2.1: resolution: {integrity: sha512-hIS4idWWai69NezIdRt2xFVofaF4j+6INOpJlVOLDO8zXGpUVEVzIYk12UUi2JzjEzWL3IOAxcTubgz9Po0yXw==} engines: {node: '>= 18'} @@ -2570,6 +2805,10 @@ packages: resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==} hasBin: true + highlight.js@11.11.1: + resolution: {integrity: sha512-Xwwo44whKBVCYoliBQwaPvtd/2tYFkRQtXDWj1nackaV2JPXx3L0+Jvd8/qCJ2p+ML0/XVkJ2q+Mr+UVdpJK5w==} + engines: {node: '>=12.0.0'} + html-escaper@2.0.2: resolution: {integrity: sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==} @@ -2622,6 +2861,9 @@ packages: humanize-number@0.0.2: resolution: {integrity: sha1-EcCvakcWQ2M1iFiASPF5lUFInBg=} + ibantools@4.5.1: + resolution: {integrity: sha512-DfKQpLlFq9yEUIEnFuCJzss3XavD7iHZTU5PyqXiAJ+rmaMp+NFP3hboumHKuK8nZjuOJg93WemTzcQ5b9jOZA==} + iconv-lite@0.4.24: resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==} engines: {node: '>=0.10.0'} @@ -2871,6 +3113,12 @@ packages: lines-and-columns@1.2.4: resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} + linkify-it@5.0.0: + resolution: {integrity: sha512-5aHCbzQRADcdP+ATqnDuhhJ/MRIqDkZX5pyjFHRRysS8vZ5AbqGEoFIb6pYHPZ+L/OC2Lc+xT8uHVVR5CAK/wQ==} + + linkifyjs@4.3.2: + resolution: {integrity: sha512-NT1CJtq3hHIreOianA8aSXn6Cw0JzYOuDQbOrSPe7gqFnCpKP++MQe3ODgO3oh2GJFORkAAdqredOa60z63GbA==} + lit-element@4.2.2: resolution: {integrity: sha512-aFKhNToWxoyhkNDmWZwEva2SlQia+jfG0fjIWV//YeTaWrVnOxD89dPKfigCUspXFmjzOEUQpOkejH5Ly6sG0w==} @@ -2884,42 +3132,9 @@ packages: resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==} engines: {node: '>=8'} - lodash._baseassign@3.2.0: - resolution: {integrity: sha1-jDigmVAPIVrQnlnxci/QxSv+Ck4=} - - lodash._basecopy@3.0.1: - resolution: {integrity: sha1-jaDmqHbPNEwK2KVIghEd08XHyjY=} - - lodash._bindcallback@3.0.1: - resolution: {integrity: sha1-5THCdkTPi1epnhftlbNcdIeJOS4=} - - lodash._createassigner@3.1.1: - resolution: {integrity: sha1-g4pbri/aymOsIt7o4Z+k5taXCxE=} - - lodash._getnative@3.9.1: - resolution: {integrity: sha1-VwvH3t5G1hzc3mh9ZdPuy6o6r/U=} - - lodash._isiterateecall@3.0.9: - resolution: {integrity: sha1-UgOte6Ql+uhCRg5pbbnPPmqsBXw=} - - lodash.assign@3.2.0: - resolution: {integrity: sha1-POnwI0tLIiPilrj6CsH+6OvKZPo=} - lodash.clonedeep@4.5.0: resolution: {integrity: sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=} - lodash.isarguments@3.1.0: - resolution: {integrity: sha1-L1c9hcaiQon/AGY7SRwdM4/zRYo=} - - lodash.isarray@3.0.4: - resolution: {integrity: sha1-eeTriMNqgSKvhvhEqpvNhRtfu1U=} - - lodash.keys@3.1.2: - resolution: {integrity: sha1-TbwEcrFWvlCgsoaFXRvQsMZWCYo=} - - lodash.restparam@3.6.1: - resolution: {integrity: sha1-k2pOMJ7zMKdkXtQUWYbIWuWyCAU=} - lodash@4.17.23: resolution: {integrity: sha512-LgVTMpQtIopCi79SJeDiP0TfWi5CNEc/L/aRdTh3yIvmZXTnheWpKjSZhnvMl8iXbC1tFg9gdHHDMLoV7CnG+w==} @@ -2953,6 +3168,9 @@ packages: resolution: {integrity: sha512-MhWWlVnuab1RG5/zMRRcVGXZLCXrZTgfwMikgzCegsPnG62yDQo5JnqKkrK4jO5iKqDAZGItAqN5CtKBCBWRUA==} engines: {node: '>=16.14'} + lucide@0.564.0: + resolution: {integrity: sha512-FasyXKHWon773WIl3HeCQpd5xS6E0aLjqxiQStlHNKktni+HDncc1sqY+6vRUbCfmDsIaKQz43EEQLAUDLZO0g==} + make-dir@3.1.0: resolution: {integrity: sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==} engines: {node: '>=8'} @@ -2967,9 +3185,18 @@ packages: make-error@1.3.6: resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==} + markdown-it@14.1.1: + resolution: {integrity: sha512-BuU2qnTti9YKgK5N+IeMubp14ZUKUUw7yeJbkjtosvHiP0AZ5c8IAgEMk79D0eC8F23r4Ac/q8cAIFdm2FtyoA==} + hasBin: true + markdown-table@3.0.4: resolution: {integrity: sha512-wiYz4+JrLyb/DqW2hkFJxP7Vd7JuTDm77fvbM8VfEQdmSMqcImWeeRbHwZjBjIFki/VaMK2BhFi7oUUZeM5bqw==} + marked@14.0.0: + resolution: {integrity: sha512-uIj4+faQ+MgHgwUW1l2PsPglZLOLOT1uErt06dAPtx2kjteLAkbsd/0FiYg/MGS+i7ZKLb7w2WClxHkzOOuryQ==} + engines: {node: '>= 18'} + hasBin: true + matcher@5.0.0: resolution: {integrity: sha512-s2EMBOWtXFc8dgqvoAzKJXxNHibcdJMV0gwqKUaw9E2JBJuGUK7DrNKrA6g/i+v72TT16+6sVm5mS3thaMLQUw==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} @@ -3020,6 +3247,9 @@ packages: mdast-util-to-string@4.0.0: resolution: {integrity: sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg==} + mdurl@2.0.0: + resolution: {integrity: sha512-Lf+9+2r+Tdp5wXDXC4PcIBjTDtq4UKjCPMQhKIuzpJNW0b96kVqSwW0bT7FhRSfmAiFYgP+SCRvdrDozfh0U5w==} + media-typer@0.3.0: resolution: {integrity: sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=} engines: {node: '>= 0.6'} @@ -3199,6 +3429,9 @@ packages: engines: {node: '>=10'} hasBin: true + monaco-editor@0.55.1: + resolution: {integrity: sha512-jz4x+TJNFHwHtwuV9vA9rMujcZRb0CEilTEwG2rRSpe/A7Jdkuj8xPKttCgOh+v/lkHy7HsZ64oj+q3xoAFl9A==} + mongodb-connection-string-url@3.0.2: resolution: {integrity: sha512-rMO7CGo/9BFwyZABcKAWL8UJwH/Kc2x0g72uhDWzG48URRax5TCIcJ7Rc3RZqffZzO/Gwff/jyKwCU9TN8gehA==} @@ -3292,10 +3525,6 @@ packages: resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==} engines: {node: '>=8'} - object-assign@4.1.1: - resolution: {integrity: sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=} - engines: {node: '>=0.10.0'} - object-inspect@1.13.4: resolution: {integrity: sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==} engines: {node: '>= 0.4'} @@ -3332,6 +3561,9 @@ packages: resolution: {integrity: sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==} engines: {node: '>=12'} + orderedmap@2.1.1: + resolution: {integrity: sha512-TvAWxi0nDe1j/rtMcWcIj94+Ffe6n7zhow33h40SKxmsmozs6dz/e+EajymfoFcHd7sxNn8yHM8839uixMOV6g==} + os-tmpdir@1.0.2: resolution: {integrity: sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=} engines: {node: '>=0.10.0'} @@ -3446,6 +3678,10 @@ packages: hasBin: true bundledDependencies: [] + pdfjs-dist@4.10.38: + resolution: {integrity: sha512-/Y3fcFrXEAsMjJXeL9J8+ZG9U01LbuWaYypvDW2ycW1jL269L3js3DVBjDJ0Up9Np1uqDXsDrRihHANhZOlwdQ==} + engines: {node: '>=20'} + peek-readable@5.4.2: resolution: {integrity: sha512-peBp3qZyuS6cNIJ2akRNG1uo1WJ1d0wTxg/fxMdZ0BqCVhx242bSFHM9eNqflfJVS9SsgkzgT/1UgnsurBOTMg==} engines: {node: '>=14.16'} @@ -3487,6 +3723,64 @@ packages: property-information@7.1.0: resolution: {integrity: sha512-TwEZ+X+yCJmYfL7TPUOcvBZ4QfoT5YenQiJuX//0th53DE6w0xxLEtfK3iyryQFddXuvkIk51EEgrJQ0WJkOmQ==} + prosemirror-changeset@2.4.0: + resolution: {integrity: sha512-LvqH2v7Q2SF6yxatuPP2e8vSUKS/L+xAU7dPDC4RMyHMhZoGDfBC74mYuyYF4gLqOEG758wajtyhNnsTkuhvng==} + + prosemirror-collab@1.3.1: + resolution: {integrity: sha512-4SnynYR9TTYaQVXd/ieUvsVV4PDMBzrq2xPUWutHivDuOshZXqQ5rGbZM84HEaXKbLdItse7weMGOUdDVcLKEQ==} + + prosemirror-commands@1.7.1: + resolution: {integrity: sha512-rT7qZnQtx5c0/y/KlYaGvtG411S97UaL6gdp6RIZ23DLHanMYLyfGBV5DtSnZdthQql7W+lEVbpSfwtO8T+L2w==} + + prosemirror-dropcursor@1.8.2: + resolution: {integrity: sha512-CCk6Gyx9+Tt2sbYk5NK0nB1ukHi2ryaRgadV/LvyNuO3ena1payM2z6Cg0vO1ebK8cxbzo41ku2DE5Axj1Zuiw==} + + prosemirror-gapcursor@1.4.0: + resolution: {integrity: sha512-z00qvurSdCEWUIulij/isHaqu4uLS8r/Fi61IbjdIPJEonQgggbJsLnstW7Lgdk4zQ68/yr6B6bf7sJXowIgdQ==} + + prosemirror-history@1.5.0: + resolution: {integrity: sha512-zlzTiH01eKA55UAf1MEjtssJeHnGxO0j4K4Dpx+gnmX9n+SHNlDqI2oO1Kv1iPN5B1dm5fsljCfqKF9nFL6HRg==} + + prosemirror-inputrules@1.5.1: + resolution: {integrity: sha512-7wj4uMjKaXWAQ1CDgxNzNtR9AlsuwzHfdFH1ygEHA2KHF2DOEaXl1CJfNPAKCg9qNEh4rum975QLaCiQPyY6Fw==} + + prosemirror-keymap@1.2.3: + resolution: {integrity: sha512-4HucRlpiLd1IPQQXNqeo81BGtkY8Ai5smHhKW9jjPKRc2wQIxksg7Hl1tTI2IfT2B/LgX6bfYvXxEpJl7aKYKw==} + + prosemirror-markdown@1.13.4: + resolution: {integrity: sha512-D98dm4cQ3Hs6EmjK500TdAOew4Z03EV71ajEFiWra3Upr7diytJsjF4mPV2dW+eK5uNectiRj0xFxYI9NLXDbw==} + + prosemirror-menu@1.3.0: + resolution: {integrity: sha512-TImyPXCHPcDsSka2/lwJ6WjTASr4re/qWq1yoTTuLOqfXucwF6VcRa2LWCkM/EyTD1UO3CUwiH8qURJoWJRxwg==} + + prosemirror-model@1.25.4: + resolution: {integrity: sha512-PIM7E43PBxKce8OQeezAs9j4TP+5yDpZVbuurd1h5phUxEKIu+G2a+EUZzIC5nS1mJktDJWzbqS23n1tsAf5QA==} + + prosemirror-schema-basic@1.2.4: + resolution: {integrity: sha512-ELxP4TlX3yr2v5rM7Sb70SqStq5NvI15c0j9j/gjsrO5vaw+fnnpovCLEGIcpeGfifkuqJwl4fon6b+KdrODYQ==} + + prosemirror-schema-list@1.5.1: + resolution: {integrity: sha512-927lFx/uwyQaGwJxLWCZRkjXG0p48KpMj6ueoYiu4JX05GGuGcgzAy62dfiV8eFZftgyBUvLx76RsMe20fJl+Q==} + + prosemirror-state@1.4.4: + resolution: {integrity: sha512-6jiYHH2CIGbCfnxdHbXZ12gySFY/fz/ulZE333G6bPqIZ4F+TXo9ifiR86nAHpWnfoNjOb3o5ESi7J8Uz1jXHw==} + + prosemirror-tables@1.8.5: + resolution: {integrity: sha512-V/0cDCsHKHe/tfWkeCmthNUcEp1IVO3p6vwN8XtwE9PZQLAZJigbw3QoraAdfJPir4NKJtNvOB8oYGKRl+t0Dw==} + + prosemirror-trailing-node@3.0.0: + resolution: {integrity: sha512-xiun5/3q0w5eRnGYfNlW1uU9W6x5MoFKWwq/0TIRgt09lv7Hcser2QYV8t4muXbEr+Fwo0geYn79Xs4GKywrRQ==} + peerDependencies: + prosemirror-model: ^1.22.1 + prosemirror-state: ^1.4.2 + prosemirror-view: ^1.33.8 + + prosemirror-transform@1.11.0: + resolution: {integrity: sha512-4I7Ce4KpygXb9bkiPS3hTEk4dSHorfRw8uI0pE8IhxlK2GXsqv5tIA7JUSxtSu7u8APVOTtbUBxTmnHIxVkIJw==} + + prosemirror-view@1.41.6: + resolution: {integrity: sha512-mxpcDG4hNQa/CPtzxjdlir5bJFDlm0/x5nGBbStB2BWX+XOQ9M8ekEG+ojqB5BcVu2Rc80/jssCMZzSstJuSYg==} + proto-list@1.2.4: resolution: {integrity: sha1-IS1b/hMYMGpCD2QCuOJv85ZHqEk=} @@ -3504,6 +3798,10 @@ packages: pump@3.0.4: resolution: {integrity: sha512-VS7sjc6KR7e1ukRFhQSY5LM2uBWAUPiOPa/A3mkKmiMwSmRFUITt0xuj+/lesgnCv+dPIEYlkzrcyXgquIHMcA==} + punycode.js@2.3.1: + resolution: {integrity: sha512-uxFIHU0YlHYhDQtV4R9J6a52SLx28BCjT+4ieh7IGbgwVJWO+km431c4yRlREUAsAmt/uMjQUyQHNEPf0M39CA==} + engines: {node: '>=6'} + punycode@1.4.1: resolution: {integrity: sha1-wNWmOycYgArY4esPpSachN1BhF4=} @@ -3646,6 +3944,9 @@ packages: engines: {node: ^20.19.0 || >=22.12.0} hasBin: true + rope-sequence@1.3.4: + resolution: {integrity: sha512-UT5EDe2cu2E/6O4igUr5PSFs23nvvukicWHx6GnOPlHAiiYbzNuCRQCuiUdHJQcqKalLKlrYJnjY0ySGsXNQXQ==} + router@2.2.0: resolution: {integrity: sha512-nLTrUKm2UyiL7rlhapu/Zl45FwNgkZGaCpZbIHajDYgwlJCOzLSk+cIPAnsEqV955GjILJnKbdQC1nVPz+gAYQ==} engines: {node: '>= 18'} @@ -3749,21 +4050,6 @@ packages: resolution: {integrity: sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==} engines: {node: '>= 6.0.0', npm: '>= 3.0.0'} - socket.io-adapter@2.5.6: - resolution: {integrity: sha512-DkkO/dz7MGln0dHn5bmN3pPy+JmywNICWrJqVWiVOyvXjWQFIv9c2h24JrQLLFJ2aQVQf/Cvl1vblnd4r2apLQ==} - - socket.io-client@4.8.1: - resolution: {integrity: sha512-hJVXfu3E28NmzGk8o1sHhN3om52tRvwYeidbj7xKy2eIIse5IoKX3USlS6Tqt3BHAtflLIkCQBkzVrEEfWUyYQ==} - engines: {node: '>=10.0.0'} - - socket.io-parser@4.2.5: - resolution: {integrity: sha512-bPMmpy/5WWKHea5Y/jYAP6k74A+hvmRCQaJuJB6I/ML5JZq/KfNieUVo/3Mh7SAqn7TyFdIo6wqYHInG1MU1bQ==} - engines: {node: '>=10.0.0'} - - socket.io@4.8.1: - resolution: {integrity: sha512-oZ7iUCxph8WYRHHcjBEc9unw3adt5CmSNlppj/5Q4k2RIrhl8Z5yY2Xr4j9zj0+wzVZ0bxmYoGSzKJnRl6A4yg==} - engines: {node: '>=10.2.0'} - socks-proxy-agent@8.0.5: resolution: {integrity: sha512-HehCEsotFqbPW9sJ8WVYB6UbmIMv7kUUORIF2Nncq4VQvBfNBLibW9YZR5dlYCSUhwcD628pRllm7n+E+YTzJw==} engines: {node: '>= 14'} @@ -3869,8 +4155,8 @@ packages: symbol-tree@3.2.4: resolution: {integrity: sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==} - systeminformation@5.31.1: - resolution: {integrity: sha512-6pRwxoGeV/roJYpsfcP6tN9mep6pPeCtXbUOCdVa0nme05Brwcwdge/fVNhIZn2wuUitAKZm4IYa7QjnRIa9zA==} + systeminformation@5.31.2: + resolution: {integrity: sha512-ietGQGFhhZNBPgNv9vljgT8gzbYgQr6t0yGAo0Vdb5Jyilb574Vp+AuX2Or9rpBq3ho4mJRawLIUa9+CiILJdg==} engines: {node: '>=8.0.0'} os: [darwin, linux, win32, freebsd, openbsd, netbsd, sunos, android] hasBin: true @@ -3986,6 +4272,9 @@ packages: engines: {node: '>=14.17'} hasBin: true + uc.micro@2.1.0: + resolution: {integrity: sha512-ARDJmphmdvUk6Glw7y9DQ2bFkKBHwQHLi2lsaH6PPmz/Ka9sFOBsBluozhDltWmnv9u/cF6Rt87znRTPV+yp/A==} + uglify-js@3.19.3: resolution: {integrity: sha512-v3Xu+yuwBXisp6QYTcH4UbH+xYJXqnq2m/LtQVWKWzYc1iehYnLixoQDN9FH6/j9/oybfd6W9Ghwkl8+UMKTKQ==} engines: {node: '>=0.8.0'} @@ -3998,6 +4287,9 @@ packages: undici-types@6.21.0: resolution: {integrity: sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==} + undici-types@7.18.2: + resolution: {integrity: sha512-AsuCzffGHJybSaRrmr5eHr81mwJU3kjw6M+uprWvCXiNeN9SOGwQ3Jn8jb8m3Z6izVgknn1R0FTCEAP2QrLY/w==} + unified@11.0.5: resolution: {integrity: sha512-xKvGhPWw3k84Qjh8bI3ZeJjqnyadK+GEFtazSfZv/rKeTkTjOJho6mFqh2SM96iIcZokxiOpg78GazTSg8+KHA==} @@ -4055,6 +4347,9 @@ packages: vfile@6.0.3: resolution: {integrity: sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q==} + w3c-keyname@2.2.8: + resolution: {integrity: sha512-dpojBhNsCNN7T82Tm7k26A6G9ML3NkhDsnw9n/eoxSRlVBB4CEtIQ/KTCLI2Fwf3ataSXRhYFkQi3SlnFwPvPQ==} + webdriver-bidi-protocol@0.4.1: resolution: {integrity: sha512-ARrjNjtWRRs2w4Tk7nqrf2gBI0QXWuOmMCx2hU+1jUt6d00MjMxURrhxhGbrsoiZKJrhTSTzbIrc554iKI10qw==} @@ -4111,30 +4406,6 @@ packages: utf-8-validate: optional: true - ws@8.17.1: - resolution: {integrity: sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ==} - engines: {node: '>=10.0.0'} - peerDependencies: - bufferutil: ^4.0.1 - utf-8-validate: '>=5.0.2' - peerDependenciesMeta: - bufferutil: - optional: true - utf-8-validate: - optional: true - - ws@8.18.3: - resolution: {integrity: sha512-PEIGCY5tSlUt50cqyMXfCzX+oOPqN0vuGqWzbcJ2xvnkzkq46oOpz7dQaTDBdfICb4N14+GARUDw2XV2N4tvzg==} - engines: {node: '>=10.0.0'} - peerDependencies: - bufferutil: ^4.0.1 - utf-8-validate: '>=5.0.2' - peerDependenciesMeta: - bufferutil: - optional: true - utf-8-validate: - optional: true - ws@8.19.0: resolution: {integrity: sha512-blAT2mjOEIi0ZzruJfIhb3nps74PRWTCz1IjglWEEpQl5XS/UNama6u2/rjFkDDouqr4L67ry+1aGIALViWjDg==} engines: {node: '>=10.0.0'} @@ -4147,9 +4418,13 @@ packages: utf-8-validate: optional: true - xmlhttprequest-ssl@2.1.2: - resolution: {integrity: sha512-TEU+nJVUUnA4CYJFLvK5X9AOeH4KvDvhIfm0vV1GaQRtchnG0hgK5p8hw/xjv8cunWYCsiPCSDzObPyhEwq3KQ==} - engines: {node: '>=0.4.0'} + xterm-addon-fit@0.8.0: + resolution: {integrity: sha512-yj3Np7XlvxxhYF/EJ7p3KHaMt6OdwQ+HDu573Vx1lRXsVxOcnVJs51RgjZOouIZOczTsskaS+CpXspK81/DLqw==} + peerDependencies: + xterm: ^5.0.0 + + xterm@5.3.0: + resolution: {integrity: sha512-8QqjlekLUFTrU6x7xck1MsPzPA571K5zNqWm0M0oroYEWVOptZ0+ubQSkQ3uxIEhcIHRujJy6emDWX4A7qyFzg==} y18n@5.0.8: resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} @@ -4208,22 +4483,23 @@ snapshots: '@push.rocks/smartdelay': 3.0.5 '@push.rocks/smartguard': 3.1.0 '@push.rocks/smartpromise': 4.2.3 - '@push.rocks/webrequest': 4.0.2 + '@push.rocks/webrequest': 4.0.5 '@push.rocks/webstream': 1.0.10 - '@api.global/typedserver@3.0.80': + '@api.global/typedserver@8.4.0(@tiptap/pm@2.27.2)': dependencies: '@api.global/typedrequest': 3.2.6 '@api.global/typedrequest-interfaces': 3.0.19 - '@api.global/typedsocket': 3.1.1 + '@api.global/typedsocket': 4.1.2(@push.rocks/smartserve@2.0.1) '@cloudflare/workers-types': 4.20260305.0 + '@design.estate/dees-catalog': 3.43.3(@tiptap/pm@2.27.2) '@design.estate/dees-comms': 1.0.30 '@push.rocks/lik': 6.3.1 - '@push.rocks/smartchok': 1.2.0 '@push.rocks/smartdelay': 3.0.5 - '@push.rocks/smartenv': 5.0.13 + '@push.rocks/smartenv': 6.0.0 '@push.rocks/smartfeed': 1.4.0 - '@push.rocks/smartfile': 11.2.7 + '@push.rocks/smartfile': 13.1.2 + '@push.rocks/smartfs': 1.3.1 '@push.rocks/smartjson': 5.2.0 '@push.rocks/smartlog': 3.2.1 '@push.rocks/smartlog-destination-devtools': 1.0.12 @@ -4235,47 +4511,39 @@ snapshots: '@push.rocks/smartopen': 2.0.0 '@push.rocks/smartpath': 6.0.0 '@push.rocks/smartpromise': 4.2.3 - '@push.rocks/smartrequest': 4.4.2 + '@push.rocks/smartrequest': 5.0.1 '@push.rocks/smartrx': 3.0.10 + '@push.rocks/smartserve': 2.0.1 '@push.rocks/smartsitemap': 2.0.4 '@push.rocks/smartstream': 3.3.0 '@push.rocks/smarttime': 4.2.3 + '@push.rocks/smartwatch': 6.3.0 '@push.rocks/taskbuffer': 3.5.0 - '@push.rocks/webrequest': 3.0.37 + '@push.rocks/webrequest': 4.0.5 '@push.rocks/webstore': 2.0.20 '@tsclass/tsclass': 9.3.0 - '@types/express': 5.0.6 - body-parser: 2.2.2 - cors: 2.8.6 - express: 5.2.1 - express-force-ssl: 0.3.2 lit: 3.3.2 transitivePeerDependencies: - '@nuxt/kit' - - '@push.rocks/smartserve' + - '@tiptap/pm' - bufferutil - react - supports-color - utf-8-validate - vue - '@api.global/typedsocket@3.1.1': + '@api.global/typedsocket@4.1.2(@push.rocks/smartserve@2.0.1)': dependencies: '@api.global/typedrequest': 3.2.6 '@api.global/typedrequest-interfaces': 3.0.19 '@push.rocks/isohash': 2.0.1 + '@push.rocks/smartdelay': 3.0.5 '@push.rocks/smartjson': 5.2.0 + '@push.rocks/smartpromise': 4.2.3 '@push.rocks/smartrx': 3.0.10 - '@push.rocks/smartsocket': 2.1.0 + '@push.rocks/smartserve': 2.0.1 '@push.rocks/smartstring': 4.1.0 '@push.rocks/smarturl': 3.1.0 - transitivePeerDependencies: - - '@nuxt/kit' - - bufferutil - - react - - supports-color - - utf-8-validate - - vue '@aws-crypto/crc32@5.2.0': dependencies: @@ -4731,6 +4999,8 @@ snapshots: '@borewit/text-codec@0.2.1': {} + '@cfworker/json-schema@4.1.1': {} + '@cloudflare/workers-types@4.20260305.0': {} '@colors/colors@1.6.0': {} @@ -4745,6 +5015,41 @@ snapshots: enabled: 2.0.0 kuler: 2.0.0 + '@design.estate/dees-catalog@3.43.3(@tiptap/pm@2.27.2)': + dependencies: + '@design.estate/dees-domtools': 2.3.8 + '@design.estate/dees-element': 2.1.6 + '@design.estate/dees-wcctools': 3.8.0 + '@fortawesome/fontawesome-svg-core': 7.2.0 + '@fortawesome/free-brands-svg-icons': 7.2.0 + '@fortawesome/free-regular-svg-icons': 7.2.0 + '@fortawesome/free-solid-svg-icons': 7.2.0 + '@push.rocks/smarti18n': 1.0.4 + '@push.rocks/smartpromise': 4.2.3 + '@push.rocks/smartstring': 4.1.0 + '@tempfix/webcontainer__api': 1.6.1 + '@tiptap/core': 2.27.2(@tiptap/pm@2.27.2) + '@tiptap/extension-link': 2.27.2(@tiptap/core@2.27.2(@tiptap/pm@2.27.2))(@tiptap/pm@2.27.2) + '@tiptap/extension-text-align': 2.27.2(@tiptap/core@2.27.2(@tiptap/pm@2.27.2)) + '@tiptap/extension-typography': 2.27.2(@tiptap/core@2.27.2(@tiptap/pm@2.27.2)) + '@tiptap/extension-underline': 2.27.2(@tiptap/core@2.27.2(@tiptap/pm@2.27.2)) + '@tiptap/starter-kit': 2.27.2 + '@tsclass/tsclass': 9.3.0 + apexcharts: 5.10.0 + highlight.js: 11.11.1 + ibantools: 4.5.1 + lucide: 0.564.0 + monaco-editor: 0.55.1 + pdfjs-dist: 4.10.38 + xterm: 5.3.0 + xterm-addon-fit: 0.8.0(xterm@5.3.0) + transitivePeerDependencies: + - '@nuxt/kit' + - '@tiptap/pm' + - react + - supports-color + - vue + '@design.estate/dees-comms@1.0.30': dependencies: '@api.global/typedrequest': 3.2.6 @@ -4790,6 +5095,18 @@ snapshots: - supports-color - vue + '@design.estate/dees-wcctools@3.8.0': + dependencies: + '@design.estate/dees-domtools': 2.3.8 + '@design.estate/dees-element': 2.1.6 + '@push.rocks/smartdelay': 3.0.5 + lit: 3.3.2 + transitivePeerDependencies: + - '@nuxt/kit' + - react + - supports-color + - vue + '@emnapi/core@1.8.1': dependencies: '@emnapi/wasi-threads': 1.1.0 @@ -4888,13 +5205,32 @@ snapshots: dependencies: '@types/chai': 4.3.20 - '@git.zone/tsbuild@2.7.3': + '@fortawesome/fontawesome-common-types@7.2.0': {} + + '@fortawesome/fontawesome-svg-core@7.2.0': + dependencies: + '@fortawesome/fontawesome-common-types': 7.2.0 + + '@fortawesome/free-brands-svg-icons@7.2.0': + dependencies: + '@fortawesome/fontawesome-common-types': 7.2.0 + + '@fortawesome/free-regular-svg-icons@7.2.0': + dependencies: + '@fortawesome/fontawesome-common-types': 7.2.0 + + '@fortawesome/free-solid-svg-icons@7.2.0': + dependencies: + '@fortawesome/fontawesome-common-types': 7.2.0 + + '@git.zone/tsbuild@4.1.2': dependencies: '@git.zone/tspublish': 1.11.0 '@push.rocks/early': 4.0.4 '@push.rocks/smartcli': 4.0.20 '@push.rocks/smartdelay': 3.0.5 - '@push.rocks/smartfile': 11.2.7 + '@push.rocks/smartfile': 13.1.2 + '@push.rocks/smartfs': 1.3.1 '@push.rocks/smartlog': 3.2.1 '@push.rocks/smartpath': 6.0.0 '@push.rocks/smartpromise': 4.2.3 @@ -4958,34 +5294,37 @@ snapshots: - supports-color - vue - '@git.zone/tsrun@1.6.2': + '@git.zone/tsrun@2.0.1': dependencies: - '@push.rocks/smartfile': 11.2.7 + '@push.rocks/smartfile': 13.1.2 '@push.rocks/smartshell': 3.3.0 tsx: 4.21.0 - '@git.zone/tstest@1.11.5(socks@2.8.7)(typescript@5.9.3)': + '@git.zone/tstest@3.2.0(@tiptap/pm@2.27.2)(socks@2.8.7)(typescript@5.9.3)': dependencies: - '@api.global/typedserver': 3.0.80 + '@api.global/typedserver': 8.4.0(@tiptap/pm@2.27.2) '@git.zone/tsbundle': 2.9.0 - '@git.zone/tsrun': 1.6.2 + '@git.zone/tsrun': 2.0.1 '@push.rocks/consolecolor': 2.0.3 '@push.rocks/qenv': 6.1.3 '@push.rocks/smartbrowser': 2.0.8(typescript@5.9.3) '@push.rocks/smartcrypto': 2.0.4 '@push.rocks/smartdelay': 3.0.5 - '@push.rocks/smartenv': 5.0.13 + '@push.rocks/smartenv': 6.0.0 '@push.rocks/smartexpect': 2.5.0 - '@push.rocks/smartfile': 11.2.7 - '@push.rocks/smartjson': 5.2.0 + '@push.rocks/smartfile': 13.1.2 + '@push.rocks/smartfs': 1.3.1 + '@push.rocks/smartjson': 6.0.0 '@push.rocks/smartlog': 3.2.1 - '@push.rocks/smartmongo': 2.2.0(socks@2.8.7) - '@push.rocks/smartpath': 5.1.0 + '@push.rocks/smartmongo': 5.1.0(socks@2.8.7) + '@push.rocks/smartnetwork': 4.4.0 + '@push.rocks/smartpath': 6.0.0 '@push.rocks/smartpromise': 4.2.3 - '@push.rocks/smartrequest': 2.1.0 - '@push.rocks/smarts3': 2.2.7 + '@push.rocks/smartrequest': 5.0.1 + '@push.rocks/smarts3': 5.3.0 '@push.rocks/smartshell': 3.3.0 '@push.rocks/smarttime': 4.2.3 + '@push.rocks/smartwatch': 6.3.0 '@types/ws': 8.18.1 figures: 6.1.0 ws: 8.19.0 @@ -4994,7 +5333,7 @@ snapshots: - '@mongodb-js/zstd' - '@nuxt/kit' - '@swc/helpers' - - aws-crt + - '@tiptap/pm' - bare-abort-controller - bare-buffer - bufferutil @@ -5127,7 +5466,7 @@ snapshots: '@jest/schemas': 29.6.3 '@types/istanbul-lib-coverage': 2.0.6 '@types/istanbul-reports': 3.0.4 - '@types/node': 22.19.13 + '@types/node': 25.3.3 '@types/yargs': 17.0.35 chalk: 4.1.2 @@ -5178,6 +5517,54 @@ snapshots: dependencies: sparse-bitfield: 3.0.3 + '@napi-rs/canvas-android-arm64@0.1.95': + optional: true + + '@napi-rs/canvas-darwin-arm64@0.1.95': + optional: true + + '@napi-rs/canvas-darwin-x64@0.1.95': + optional: true + + '@napi-rs/canvas-linux-arm-gnueabihf@0.1.95': + optional: true + + '@napi-rs/canvas-linux-arm64-gnu@0.1.95': + optional: true + + '@napi-rs/canvas-linux-arm64-musl@0.1.95': + optional: true + + '@napi-rs/canvas-linux-riscv64-gnu@0.1.95': + optional: true + + '@napi-rs/canvas-linux-x64-gnu@0.1.95': + optional: true + + '@napi-rs/canvas-linux-x64-musl@0.1.95': + optional: true + + '@napi-rs/canvas-win32-arm64-msvc@0.1.95': + optional: true + + '@napi-rs/canvas-win32-x64-msvc@0.1.95': + optional: true + + '@napi-rs/canvas@0.1.95': + optionalDependencies: + '@napi-rs/canvas-android-arm64': 0.1.95 + '@napi-rs/canvas-darwin-arm64': 0.1.95 + '@napi-rs/canvas-darwin-x64': 0.1.95 + '@napi-rs/canvas-linux-arm-gnueabihf': 0.1.95 + '@napi-rs/canvas-linux-arm64-gnu': 0.1.95 + '@napi-rs/canvas-linux-arm64-musl': 0.1.95 + '@napi-rs/canvas-linux-riscv64-gnu': 0.1.95 + '@napi-rs/canvas-linux-x64-gnu': 0.1.95 + '@napi-rs/canvas-linux-x64-musl': 0.1.95 + '@napi-rs/canvas-win32-arm64-msvc': 0.1.95 + '@napi-rs/canvas-win32-x64-msvc': 0.1.95 + optional: true + '@napi-rs/wasm-runtime@1.0.7': dependencies: '@emnapi/core': 1.8.1 @@ -5520,14 +5907,6 @@ snapshots: '@push.rocks/smartpromise': 4.2.3 '@push.rocks/smarttime': 4.2.3 - '@push.rocks/smartchok@1.2.0': - dependencies: - '@push.rocks/lik': 6.3.1 - '@push.rocks/smartpromise': 4.2.3 - '@push.rocks/smartrx': 3.0.10 - chokidar: 5.0.0 - picomatch: 4.0.3 - '@push.rocks/smartcli@4.0.20': dependencies: '@push.rocks/lik': 6.3.1 @@ -5544,7 +5923,7 @@ snapshots: '@push.rocks/smartpromise': 4.2.3 '@push.rocks/smartrx': 3.0.10 '@push.rocks/smarturl': 3.1.0 - '@push.rocks/webrequest': 4.0.2 + '@push.rocks/webrequest': 4.0.5 '@push.rocks/smartcrypto@2.0.4': dependencies: @@ -5618,12 +5997,6 @@ snapshots: '@push.rocks/smartpromise': 4.2.3 tree-kill: 1.2.2 - '@push.rocks/smartexpect@1.6.1': - dependencies: - '@push.rocks/smartdelay': 3.0.5 - '@push.rocks/smartpromise': 4.2.3 - fast-deep-equal: 3.1.3 - '@push.rocks/smartexpect@2.5.0': dependencies: '@push.rocks/smartdelay': 3.0.5 @@ -5689,6 +6062,8 @@ snapshots: '@types/through2': 2.0.41 through2: 4.0.2 + '@push.rocks/smarti18n@1.0.4': {} + '@push.rocks/smartinteract@2.0.16': dependencies: '@push.rocks/lik': 6.3.1 @@ -5735,7 +6110,7 @@ snapshots: '@push.rocks/smarthash': 3.2.6 '@push.rocks/smartpromise': 4.2.3 '@push.rocks/smarttime': 4.2.3 - '@push.rocks/webrequest': 4.0.2 + '@push.rocks/webrequest': 4.0.5 '@tsclass/tsclass': 9.3.0 '@push.rocks/smartmanifest@2.0.2': {} @@ -5792,6 +6167,33 @@ snapshots: - supports-color - vue + '@push.rocks/smartmongo@5.1.0(socks@2.8.7)': + dependencies: + '@push.rocks/mongodump': 1.1.0(socks@2.8.7) + '@push.rocks/smartdata': 5.16.7(socks@2.8.7) + '@push.rocks/smartfs': 1.3.1 + '@push.rocks/smartpath': 5.1.0 + '@push.rocks/smartpromise': 4.2.3 + '@push.rocks/smartrx': 3.0.10 + bson: 6.10.4 + mingo: 7.2.0 + mongodb-memory-server: 10.4.3(socks@2.8.7) + transitivePeerDependencies: + - '@aws-sdk/credential-providers' + - '@mongodb-js/zstd' + - '@nuxt/kit' + - bare-abort-controller + - bare-buffer + - gcp-metadata + - kerberos + - mongodb-client-encryption + - react + - react-native-b4a + - snappy + - socks + - supports-color + - vue + '@push.rocks/smartnetwork@4.4.0': dependencies: '@push.rocks/smartdns': 7.9.0 @@ -5799,7 +6201,7 @@ snapshots: '@push.rocks/smartpromise': 4.2.3 '@push.rocks/smartstring': 4.1.0 isopen: 1.3.0 - systeminformation: 5.31.1 + systeminformation: 5.31.2 transitivePeerDependencies: - supports-color @@ -5948,6 +6350,25 @@ snapshots: - aws-crt - supports-color + '@push.rocks/smarts3@5.3.0': + dependencies: + '@push.rocks/smartpath': 6.0.0 + '@push.rocks/smartrust': 1.3.1 + '@tsclass/tsclass': 9.3.0 + + '@push.rocks/smartserve@2.0.1': + dependencies: + '@api.global/typedrequest': 3.2.6 + '@cfworker/json-schema': 4.1.1 + '@push.rocks/lik': 6.3.1 + '@push.rocks/smartenv': 6.0.0 + '@push.rocks/smartlog': 3.2.1 + '@push.rocks/smartpath': 6.0.0 + ws: 8.19.0 + transitivePeerDependencies: + - bufferutil + - utf-8-validate + '@push.rocks/smartshell@3.3.0': dependencies: '@push.rocks/smartdelay': 3.0.5 @@ -5963,34 +6384,9 @@ snapshots: '@push.rocks/smartfeed': 1.4.0 '@push.rocks/smartxml': 2.0.0 '@push.rocks/smartyaml': 3.0.4 - '@push.rocks/webrequest': 4.0.2 + '@push.rocks/webrequest': 4.0.5 '@tsclass/tsclass': 9.3.0 - '@push.rocks/smartsocket@2.1.0': - dependencies: - '@api.global/typedrequest-interfaces': 3.0.19 - '@api.global/typedserver': 3.0.80 - '@push.rocks/isohash': 2.0.1 - '@push.rocks/isounique': 1.0.5 - '@push.rocks/lik': 6.3.1 - '@push.rocks/smartdelay': 3.0.5 - '@push.rocks/smartenv': 5.0.13 - '@push.rocks/smartjson': 5.2.0 - '@push.rocks/smartlog': 3.2.1 - '@push.rocks/smartpromise': 4.2.3 - '@push.rocks/smartrx': 3.0.10 - '@push.rocks/smarttime': 4.2.3 - engine.io: 6.6.4 - socket.io: 4.8.1 - socket.io-client: 4.8.1 - transitivePeerDependencies: - - '@nuxt/kit' - - bufferutil - - react - - supports-color - - utf-8-validate - - vue - '@push.rocks/smartspawn@3.0.3': dependencies: '@push.rocks/smartpromise': 4.2.3 @@ -6043,6 +6439,15 @@ snapshots: '@types/semver': 7.7.1 semver: 7.7.4 + '@push.rocks/smartwatch@6.3.0': + dependencies: + '@push.rocks/lik': 6.3.1 + '@push.rocks/smartenv': 6.0.0 + '@push.rocks/smartpromise': 4.2.3 + '@push.rocks/smartrx': 3.0.10 + chokidar: 5.0.0 + picomatch: 4.0.3 + '@push.rocks/smartxml@2.0.0': dependencies: fast-xml-parser: 5.4.1 @@ -6056,7 +6461,7 @@ snapshots: dependencies: yaml: 2.8.2 - '@push.rocks/tapbundle@5.6.3(socks@2.8.7)': + '@push.rocks/tapbundle@6.0.3(socks@2.8.7)': dependencies: '@open-wc/testing': 4.0.0 '@push.rocks/consolecolor': 2.0.3 @@ -6064,7 +6469,7 @@ snapshots: '@push.rocks/smartcrypto': 2.0.4 '@push.rocks/smartdelay': 3.0.5 '@push.rocks/smartenv': 5.0.13 - '@push.rocks/smartexpect': 1.6.1 + '@push.rocks/smartexpect': 2.5.0 '@push.rocks/smartfile': 11.2.7 '@push.rocks/smartjson': 5.2.0 '@push.rocks/smartmongo': 2.2.0(socks@2.8.7) @@ -6115,11 +6520,11 @@ snapshots: '@push.rocks/smartpromise': 4.2.3 '@push.rocks/webstore': 2.0.20 - '@push.rocks/webrequest@4.0.2': + '@push.rocks/webrequest@4.0.5': dependencies: '@push.rocks/smartdelay': 3.0.5 - '@push.rocks/smartenv': 5.0.13 - '@push.rocks/smartjson': 5.2.0 + '@push.rocks/smartenv': 6.0.0 + '@push.rocks/smartjson': 6.0.0 '@push.rocks/smartpromise': 4.2.3 '@push.rocks/webstore': 2.0.20 @@ -6186,6 +6591,8 @@ snapshots: strip-indent: 4.1.1 url: 0.11.4 + '@remirror/core-constants@3.0.0': {} + '@rolldown/binding-android-arm64@1.0.0-beta.52': optional: true @@ -6634,8 +7041,6 @@ snapshots: color: 5.0.3 text-hex: 1.0.0 - '@socket.io/component-emitter@3.1.2': {} - '@szmarczak/http-timer@5.0.1': dependencies: defer-to-connect: 2.0.1 @@ -6644,6 +7049,156 @@ snapshots: '@tempfix/lenis@1.3.20': {} + '@tempfix/webcontainer__api@1.6.1': {} + + '@tiptap/core@2.27.2(@tiptap/pm@2.27.2)': + dependencies: + '@tiptap/pm': 2.27.2 + + '@tiptap/extension-blockquote@2.27.2(@tiptap/core@2.27.2(@tiptap/pm@2.27.2))': + dependencies: + '@tiptap/core': 2.27.2(@tiptap/pm@2.27.2) + + '@tiptap/extension-bold@2.27.2(@tiptap/core@2.27.2(@tiptap/pm@2.27.2))': + dependencies: + '@tiptap/core': 2.27.2(@tiptap/pm@2.27.2) + + '@tiptap/extension-bullet-list@2.27.2(@tiptap/core@2.27.2(@tiptap/pm@2.27.2))': + dependencies: + '@tiptap/core': 2.27.2(@tiptap/pm@2.27.2) + + '@tiptap/extension-code-block@2.27.2(@tiptap/core@2.27.2(@tiptap/pm@2.27.2))(@tiptap/pm@2.27.2)': + dependencies: + '@tiptap/core': 2.27.2(@tiptap/pm@2.27.2) + '@tiptap/pm': 2.27.2 + + '@tiptap/extension-code@2.27.2(@tiptap/core@2.27.2(@tiptap/pm@2.27.2))': + dependencies: + '@tiptap/core': 2.27.2(@tiptap/pm@2.27.2) + + '@tiptap/extension-document@2.27.2(@tiptap/core@2.27.2(@tiptap/pm@2.27.2))': + dependencies: + '@tiptap/core': 2.27.2(@tiptap/pm@2.27.2) + + '@tiptap/extension-dropcursor@2.27.2(@tiptap/core@2.27.2(@tiptap/pm@2.27.2))(@tiptap/pm@2.27.2)': + dependencies: + '@tiptap/core': 2.27.2(@tiptap/pm@2.27.2) + '@tiptap/pm': 2.27.2 + + '@tiptap/extension-gapcursor@2.27.2(@tiptap/core@2.27.2(@tiptap/pm@2.27.2))(@tiptap/pm@2.27.2)': + dependencies: + '@tiptap/core': 2.27.2(@tiptap/pm@2.27.2) + '@tiptap/pm': 2.27.2 + + '@tiptap/extension-hard-break@2.27.2(@tiptap/core@2.27.2(@tiptap/pm@2.27.2))': + dependencies: + '@tiptap/core': 2.27.2(@tiptap/pm@2.27.2) + + '@tiptap/extension-heading@2.27.2(@tiptap/core@2.27.2(@tiptap/pm@2.27.2))': + dependencies: + '@tiptap/core': 2.27.2(@tiptap/pm@2.27.2) + + '@tiptap/extension-history@2.27.2(@tiptap/core@2.27.2(@tiptap/pm@2.27.2))(@tiptap/pm@2.27.2)': + dependencies: + '@tiptap/core': 2.27.2(@tiptap/pm@2.27.2) + '@tiptap/pm': 2.27.2 + + '@tiptap/extension-horizontal-rule@2.27.2(@tiptap/core@2.27.2(@tiptap/pm@2.27.2))(@tiptap/pm@2.27.2)': + dependencies: + '@tiptap/core': 2.27.2(@tiptap/pm@2.27.2) + '@tiptap/pm': 2.27.2 + + '@tiptap/extension-italic@2.27.2(@tiptap/core@2.27.2(@tiptap/pm@2.27.2))': + dependencies: + '@tiptap/core': 2.27.2(@tiptap/pm@2.27.2) + + '@tiptap/extension-link@2.27.2(@tiptap/core@2.27.2(@tiptap/pm@2.27.2))(@tiptap/pm@2.27.2)': + dependencies: + '@tiptap/core': 2.27.2(@tiptap/pm@2.27.2) + '@tiptap/pm': 2.27.2 + linkifyjs: 4.3.2 + + '@tiptap/extension-list-item@2.27.2(@tiptap/core@2.27.2(@tiptap/pm@2.27.2))': + dependencies: + '@tiptap/core': 2.27.2(@tiptap/pm@2.27.2) + + '@tiptap/extension-ordered-list@2.27.2(@tiptap/core@2.27.2(@tiptap/pm@2.27.2))': + dependencies: + '@tiptap/core': 2.27.2(@tiptap/pm@2.27.2) + + '@tiptap/extension-paragraph@2.27.2(@tiptap/core@2.27.2(@tiptap/pm@2.27.2))': + dependencies: + '@tiptap/core': 2.27.2(@tiptap/pm@2.27.2) + + '@tiptap/extension-strike@2.27.2(@tiptap/core@2.27.2(@tiptap/pm@2.27.2))': + dependencies: + '@tiptap/core': 2.27.2(@tiptap/pm@2.27.2) + + '@tiptap/extension-text-align@2.27.2(@tiptap/core@2.27.2(@tiptap/pm@2.27.2))': + dependencies: + '@tiptap/core': 2.27.2(@tiptap/pm@2.27.2) + + '@tiptap/extension-text-style@2.27.2(@tiptap/core@2.27.2(@tiptap/pm@2.27.2))': + dependencies: + '@tiptap/core': 2.27.2(@tiptap/pm@2.27.2) + + '@tiptap/extension-text@2.27.2(@tiptap/core@2.27.2(@tiptap/pm@2.27.2))': + dependencies: + '@tiptap/core': 2.27.2(@tiptap/pm@2.27.2) + + '@tiptap/extension-typography@2.27.2(@tiptap/core@2.27.2(@tiptap/pm@2.27.2))': + dependencies: + '@tiptap/core': 2.27.2(@tiptap/pm@2.27.2) + + '@tiptap/extension-underline@2.27.2(@tiptap/core@2.27.2(@tiptap/pm@2.27.2))': + dependencies: + '@tiptap/core': 2.27.2(@tiptap/pm@2.27.2) + + '@tiptap/pm@2.27.2': + dependencies: + prosemirror-changeset: 2.4.0 + prosemirror-collab: 1.3.1 + prosemirror-commands: 1.7.1 + prosemirror-dropcursor: 1.8.2 + prosemirror-gapcursor: 1.4.0 + prosemirror-history: 1.5.0 + prosemirror-inputrules: 1.5.1 + prosemirror-keymap: 1.2.3 + prosemirror-markdown: 1.13.4 + prosemirror-menu: 1.3.0 + prosemirror-model: 1.25.4 + prosemirror-schema-basic: 1.2.4 + prosemirror-schema-list: 1.5.1 + prosemirror-state: 1.4.4 + prosemirror-tables: 1.8.5 + prosemirror-trailing-node: 3.0.0(prosemirror-model@1.25.4)(prosemirror-state@1.4.4)(prosemirror-view@1.41.6) + prosemirror-transform: 1.11.0 + prosemirror-view: 1.41.6 + + '@tiptap/starter-kit@2.27.2': + dependencies: + '@tiptap/core': 2.27.2(@tiptap/pm@2.27.2) + '@tiptap/extension-blockquote': 2.27.2(@tiptap/core@2.27.2(@tiptap/pm@2.27.2)) + '@tiptap/extension-bold': 2.27.2(@tiptap/core@2.27.2(@tiptap/pm@2.27.2)) + '@tiptap/extension-bullet-list': 2.27.2(@tiptap/core@2.27.2(@tiptap/pm@2.27.2)) + '@tiptap/extension-code': 2.27.2(@tiptap/core@2.27.2(@tiptap/pm@2.27.2)) + '@tiptap/extension-code-block': 2.27.2(@tiptap/core@2.27.2(@tiptap/pm@2.27.2))(@tiptap/pm@2.27.2) + '@tiptap/extension-document': 2.27.2(@tiptap/core@2.27.2(@tiptap/pm@2.27.2)) + '@tiptap/extension-dropcursor': 2.27.2(@tiptap/core@2.27.2(@tiptap/pm@2.27.2))(@tiptap/pm@2.27.2) + '@tiptap/extension-gapcursor': 2.27.2(@tiptap/core@2.27.2(@tiptap/pm@2.27.2))(@tiptap/pm@2.27.2) + '@tiptap/extension-hard-break': 2.27.2(@tiptap/core@2.27.2(@tiptap/pm@2.27.2)) + '@tiptap/extension-heading': 2.27.2(@tiptap/core@2.27.2(@tiptap/pm@2.27.2)) + '@tiptap/extension-history': 2.27.2(@tiptap/core@2.27.2(@tiptap/pm@2.27.2))(@tiptap/pm@2.27.2) + '@tiptap/extension-horizontal-rule': 2.27.2(@tiptap/core@2.27.2(@tiptap/pm@2.27.2))(@tiptap/pm@2.27.2) + '@tiptap/extension-italic': 2.27.2(@tiptap/core@2.27.2(@tiptap/pm@2.27.2)) + '@tiptap/extension-list-item': 2.27.2(@tiptap/core@2.27.2(@tiptap/pm@2.27.2)) + '@tiptap/extension-ordered-list': 2.27.2(@tiptap/core@2.27.2(@tiptap/pm@2.27.2)) + '@tiptap/extension-paragraph': 2.27.2(@tiptap/core@2.27.2(@tiptap/pm@2.27.2)) + '@tiptap/extension-strike': 2.27.2(@tiptap/core@2.27.2(@tiptap/pm@2.27.2)) + '@tiptap/extension-text': 2.27.2(@tiptap/core@2.27.2(@tiptap/pm@2.27.2)) + '@tiptap/extension-text-style': 2.27.2(@tiptap/core@2.27.2(@tiptap/pm@2.27.2)) + '@tiptap/pm': 2.27.2 + '@tokenizer/inflate@0.4.1': dependencies: debug: 4.4.3 @@ -6670,14 +7225,14 @@ snapshots: '@types/accepts@1.3.7': dependencies: - '@types/node': 22.19.13 + '@types/node': 25.3.3 '@types/babel__code-frame@7.27.0': {} '@types/body-parser@1.19.6': dependencies: '@types/connect': 3.4.38 - '@types/node': 22.19.13 + '@types/node': 25.3.3 '@types/buffer-json@2.0.3': {} @@ -6694,17 +7249,17 @@ snapshots: '@types/clean-css@4.2.11': dependencies: - '@types/node': 22.19.13 + '@types/node': 25.3.3 source-map: 0.6.1 '@types/co-body@6.1.3': dependencies: - '@types/node': 22.19.13 + '@types/node': 25.3.3 '@types/qs': 6.14.0 '@types/connect@3.4.38': dependencies: - '@types/node': 22.19.13 + '@types/node': 25.3.3 '@types/content-disposition@0.5.9': {} @@ -6715,11 +7270,7 @@ snapshots: '@types/connect': 3.4.38 '@types/express': 5.0.6 '@types/keygrip': 1.0.6 - '@types/node': 22.19.13 - - '@types/cors@2.8.19': - dependencies: - '@types/node': 22.19.13 + '@types/node': 25.3.3 '@types/debounce@1.2.4': {} @@ -6731,7 +7282,7 @@ snapshots: '@types/express-serve-static-core@5.1.1': dependencies: - '@types/node': 22.19.13 + '@types/node': 25.3.3 '@types/qs': 6.14.0 '@types/range-parser': 1.2.7 '@types/send': 1.2.1 @@ -6745,7 +7296,7 @@ snapshots: '@types/fs-extra@11.0.4': dependencies: '@types/jsonfile': 6.1.4 - '@types/node': 22.19.13 + '@types/node': 25.3.3 '@types/hast@3.0.4': dependencies: @@ -6779,7 +7330,7 @@ snapshots: '@types/jsonfile@6.1.4': dependencies: - '@types/node': 22.19.13 + '@types/node': 25.3.3 '@types/keygrip@1.0.6': {} @@ -6796,12 +7347,21 @@ snapshots: '@types/http-errors': 2.0.5 '@types/keygrip': 1.0.6 '@types/koa-compose': 3.2.9 - '@types/node': 22.19.13 + '@types/node': 25.3.3 + + '@types/linkify-it@5.0.0': {} + + '@types/markdown-it@14.1.2': + dependencies: + '@types/linkify-it': 5.0.0 + '@types/mdurl': 2.0.0 '@types/mdast@4.0.4': dependencies: '@types/unist': 3.0.3 + '@types/mdurl@2.0.0': {} + '@types/mime-types@2.1.4': {} '@types/minimatch@5.1.2': {} @@ -6810,16 +7370,20 @@ snapshots: '@types/mute-stream@0.0.4': dependencies: - '@types/node': 22.19.13 + '@types/node': 25.3.3 '@types/node-forge@1.3.14': dependencies: - '@types/node': 22.19.13 + '@types/node': 25.3.3 '@types/node@22.19.13': dependencies: undici-types: 6.21.0 + '@types/node@25.3.3': + dependencies: + undici-types: 7.18.2 + '@types/parse5@6.0.3': {} '@types/ping@0.4.4': {} @@ -6834,18 +7398,18 @@ snapshots: '@types/s3rver@3.7.4': dependencies: - '@types/node': 22.19.13 + '@types/node': 25.3.3 '@types/semver@7.7.1': {} '@types/send@1.2.1': dependencies: - '@types/node': 22.19.13 + '@types/node': 25.3.3 '@types/serve-static@2.2.0': dependencies: '@types/http-errors': 2.0.5 - '@types/node': 22.19.13 + '@types/node': 25.3.3 '@types/sinon-chai@3.2.12': dependencies: @@ -6864,11 +7428,11 @@ snapshots: '@types/tar-stream@3.1.4': dependencies: - '@types/node': 22.19.13 + '@types/node': 25.3.3 '@types/through2@2.0.41': dependencies: - '@types/node': 22.19.13 + '@types/node': 25.3.3 '@types/triple-beam@1.3.5': {} @@ -6896,11 +7460,11 @@ snapshots: '@types/ws@7.4.7': dependencies: - '@types/node': 22.19.13 + '@types/node': 25.3.3 '@types/ws@8.18.1': dependencies: - '@types/node': 22.19.13 + '@types/node': 25.3.3 '@types/yargs-parser@21.0.3': {} @@ -6910,7 +7474,7 @@ snapshots: '@types/yauzl@2.10.3': dependencies: - '@types/node': 22.19.13 + '@types/node': 25.3.3 optional: true '@ungap/structured-clone@1.3.0': {} @@ -6991,6 +7555,8 @@ snapshots: - supports-color - utf-8-validate + '@yr/monotone-cubic-spline@1.0.3': {} + accepts@1.3.8: dependencies: mime-types: 2.1.35 @@ -7035,6 +7601,10 @@ snapshots: ansi-styles@5.2.0: {} + apexcharts@5.10.0: + dependencies: + '@yr/monotone-cubic-spline': 1.0.3 + argparse@1.0.10: dependencies: sprintf-js: 1.0.3 @@ -7118,8 +7688,6 @@ snapshots: base64-js@1.5.1: {} - base64id@2.0.0: {} - basic-ftp@5.2.0: {} body-parser@2.2.2: @@ -7358,12 +7926,7 @@ snapshots: depd: 2.0.0 keygrip: 1.1.0 - cors@2.8.6: - dependencies: - object-assign: 4.1.1 - vary: 1.1.2 - - cosmiconfig@9.0.0(typescript@5.9.3): + cosmiconfig@9.0.1(typescript@5.9.3): dependencies: env-paths: 2.2.1 import-fresh: 3.3.1 @@ -7372,6 +7935,8 @@ snapshots: optionalDependencies: typescript: 5.9.3 + crelt@1.0.6: {} + croner@10.0.1: {} cross-spawn@7.0.6: @@ -7396,10 +7961,6 @@ snapshots: dependencies: ms: 2.1.3 - debug@4.3.7: - dependencies: - ms: 2.1.3 - debug@4.4.3: dependencies: ms: 2.1.3 @@ -7472,6 +8033,10 @@ snapshots: dependencies: path-type: 4.0.0 + dompurify@3.2.7: + optionalDependencies: + '@types/trusted-types': 2.0.7 + dunder-proto@1.0.1: dependencies: call-bind-apply-helpers: 1.0.2 @@ -7492,36 +8057,6 @@ snapshots: dependencies: once: 1.4.0 - engine.io-client@6.6.4: - dependencies: - '@socket.io/component-emitter': 3.1.2 - debug: 4.4.3 - engine.io-parser: 5.2.3 - ws: 8.18.3 - xmlhttprequest-ssl: 2.1.2 - transitivePeerDependencies: - - bufferutil - - supports-color - - utf-8-validate - - engine.io-parser@5.2.3: {} - - engine.io@6.6.4: - dependencies: - '@types/cors': 2.8.19 - '@types/node': 22.19.13 - accepts: 1.3.8 - base64id: 2.0.0 - cookie: 0.7.2 - cors: 2.8.6 - debug: 4.3.7 - engine.io-parser: 5.2.3 - ws: 8.17.1 - transitivePeerDependencies: - - bufferutil - - supports-color - - utf-8-validate - entities@4.5.0: {} env-paths@2.2.1: {} @@ -7586,6 +8121,8 @@ snapshots: escape-string-regexp@2.0.0: {} + escape-string-regexp@4.0.0: {} + escape-string-regexp@5.0.0: {} escodegen@2.1.0: @@ -7634,10 +8171,6 @@ snapshots: jest-message-util: 29.7.0 jest-util: 29.7.0 - express-force-ssl@0.3.2: - dependencies: - lodash.assign: 3.2.0 - express@5.2.1: dependencies: accepts: 2.0.0 @@ -7987,6 +8520,8 @@ snapshots: he@1.2.0: {} + highlight.js@11.11.1: {} + html-escaper@2.0.2: {} html-minifier@4.0.0: @@ -8058,6 +8593,8 @@ snapshots: humanize-number@0.0.2: {} + ibantools@4.5.1: {} + iconv-lite@0.4.24: dependencies: safer-buffer: 2.1.2 @@ -8226,7 +8763,7 @@ snapshots: jest-util@29.7.0: dependencies: '@jest/types': 29.6.3 - '@types/node': 22.19.13 + '@types/node': 25.3.3 chalk: 4.1.2 ci-info: 3.9.0 graceful-fs: 4.2.11 @@ -8334,6 +8871,12 @@ snapshots: lines-and-columns@1.2.4: {} + linkify-it@5.0.0: + dependencies: + uc.micro: 2.1.0 + + linkifyjs@4.3.2: {} + lit-element@4.2.2: dependencies: '@lit-labs/ssr-dom-shim': 1.5.1 @@ -8354,45 +8897,8 @@ snapshots: dependencies: p-locate: 4.1.0 - lodash._baseassign@3.2.0: - dependencies: - lodash._basecopy: 3.0.1 - lodash.keys: 3.1.2 - - lodash._basecopy@3.0.1: {} - - lodash._bindcallback@3.0.1: {} - - lodash._createassigner@3.1.1: - dependencies: - lodash._bindcallback: 3.0.1 - lodash._isiterateecall: 3.0.9 - lodash.restparam: 3.6.1 - - lodash._getnative@3.9.1: {} - - lodash._isiterateecall@3.0.9: {} - - lodash.assign@3.2.0: - dependencies: - lodash._baseassign: 3.2.0 - lodash._createassigner: 3.1.1 - lodash.keys: 3.1.2 - lodash.clonedeep@4.5.0: {} - lodash.isarguments@3.1.0: {} - - lodash.isarray@3.0.4: {} - - lodash.keys@3.1.2: - dependencies: - lodash._getnative: 3.9.1 - lodash.isarguments: 3.1.0 - lodash.isarray: 3.0.4 - - lodash.restparam@3.6.1: {} - lodash@4.17.23: {} log-update@4.0.0: @@ -8423,6 +8929,8 @@ snapshots: lru-cache@8.0.5: {} + lucide@0.564.0: {} + make-dir@3.1.0: dependencies: semver: 6.3.1 @@ -8437,8 +8945,19 @@ snapshots: make-error@1.3.6: {} + markdown-it@14.1.1: + dependencies: + argparse: 2.0.1 + entities: 4.5.0 + linkify-it: 5.0.0 + mdurl: 2.0.0 + punycode.js: 2.3.1 + uc.micro: 2.1.0 + markdown-table@3.0.4: {} + marked@14.0.0: {} + matcher@5.0.0: dependencies: escape-string-regexp: 5.0.0 @@ -8572,6 +9091,8 @@ snapshots: dependencies: '@types/mdast': 4.0.4 + mdurl@2.0.0: {} + media-typer@0.3.0: {} media-typer@1.1.0: {} @@ -8831,6 +9352,11 @@ snapshots: mkdirp@1.0.4: {} + monaco-editor@0.55.1: + dependencies: + dompurify: 3.2.7 + marked: 14.0.0 + mongodb-connection-string-url@3.0.2: dependencies: '@types/whatwg-url': 11.0.5 @@ -8926,8 +9452,6 @@ snapshots: dependencies: path-key: 3.1.1 - object-assign@4.1.1: {} - object-inspect@1.13.4: {} object-keys@1.1.1: {} @@ -8960,6 +9484,8 @@ snapshots: is-docker: 2.2.1 is-wsl: 2.2.0 + orderedmap@2.1.1: {} + os-tmpdir@1.0.2: {} p-cancelable@3.0.0: {} @@ -9067,6 +9593,10 @@ snapshots: pdf2json@3.2.0: {} + pdfjs-dist@4.10.38: + optionalDependencies: + '@napi-rs/canvas': 0.1.95 + peek-readable@5.4.2: {} pend@1.2.0: {} @@ -9097,6 +9627,109 @@ snapshots: property-information@7.1.0: {} + prosemirror-changeset@2.4.0: + dependencies: + prosemirror-transform: 1.11.0 + + prosemirror-collab@1.3.1: + dependencies: + prosemirror-state: 1.4.4 + + prosemirror-commands@1.7.1: + dependencies: + prosemirror-model: 1.25.4 + prosemirror-state: 1.4.4 + prosemirror-transform: 1.11.0 + + prosemirror-dropcursor@1.8.2: + dependencies: + prosemirror-state: 1.4.4 + prosemirror-transform: 1.11.0 + prosemirror-view: 1.41.6 + + prosemirror-gapcursor@1.4.0: + dependencies: + prosemirror-keymap: 1.2.3 + prosemirror-model: 1.25.4 + prosemirror-state: 1.4.4 + prosemirror-view: 1.41.6 + + prosemirror-history@1.5.0: + dependencies: + prosemirror-state: 1.4.4 + prosemirror-transform: 1.11.0 + prosemirror-view: 1.41.6 + rope-sequence: 1.3.4 + + prosemirror-inputrules@1.5.1: + dependencies: + prosemirror-state: 1.4.4 + prosemirror-transform: 1.11.0 + + prosemirror-keymap@1.2.3: + dependencies: + prosemirror-state: 1.4.4 + w3c-keyname: 2.2.8 + + prosemirror-markdown@1.13.4: + dependencies: + '@types/markdown-it': 14.1.2 + markdown-it: 14.1.1 + prosemirror-model: 1.25.4 + + prosemirror-menu@1.3.0: + dependencies: + crelt: 1.0.6 + prosemirror-commands: 1.7.1 + prosemirror-history: 1.5.0 + prosemirror-state: 1.4.4 + + prosemirror-model@1.25.4: + dependencies: + orderedmap: 2.1.1 + + prosemirror-schema-basic@1.2.4: + dependencies: + prosemirror-model: 1.25.4 + + prosemirror-schema-list@1.5.1: + dependencies: + prosemirror-model: 1.25.4 + prosemirror-state: 1.4.4 + prosemirror-transform: 1.11.0 + + prosemirror-state@1.4.4: + dependencies: + prosemirror-model: 1.25.4 + prosemirror-transform: 1.11.0 + prosemirror-view: 1.41.6 + + prosemirror-tables@1.8.5: + dependencies: + prosemirror-keymap: 1.2.3 + prosemirror-model: 1.25.4 + prosemirror-state: 1.4.4 + prosemirror-transform: 1.11.0 + prosemirror-view: 1.41.6 + + prosemirror-trailing-node@3.0.0(prosemirror-model@1.25.4)(prosemirror-state@1.4.4)(prosemirror-view@1.41.6): + dependencies: + '@remirror/core-constants': 3.0.0 + escape-string-regexp: 4.0.0 + prosemirror-model: 1.25.4 + prosemirror-state: 1.4.4 + prosemirror-view: 1.41.6 + + prosemirror-transform@1.11.0: + dependencies: + prosemirror-model: 1.25.4 + + prosemirror-view@1.41.6: + dependencies: + prosemirror-model: 1.25.4 + prosemirror-state: 1.4.4 + prosemirror-transform: 1.11.0 + proto-list@1.2.4: {} proxy-addr@2.0.7: @@ -9124,6 +9757,8 @@ snapshots: end-of-stream: 1.4.5 once: 1.4.0 + punycode.js@2.3.1: {} + punycode@1.4.1: {} punycode@2.3.1: {} @@ -9149,7 +9784,7 @@ snapshots: dependencies: '@puppeteer/browsers': 2.13.0 chromium-bidi: 14.0.0(devtools-protocol@0.0.1566079) - cosmiconfig: 9.0.0(typescript@5.9.3) + cosmiconfig: 9.0.1(typescript@5.9.3) devtools-protocol: 0.0.1566079 puppeteer-core: 24.37.5 typed-query-selector: 2.12.1 @@ -9322,6 +9957,8 @@ snapshots: '@rolldown/binding-win32-ia32-msvc': 1.0.0-beta.52 '@rolldown/binding-win32-x64-msvc': 1.0.0-beta.52 + rope-sequence@1.3.4: {} + router@2.2.0: dependencies: debug: 4.4.3 @@ -9460,47 +10097,6 @@ snapshots: smart-buffer@4.2.0: {} - socket.io-adapter@2.5.6: - dependencies: - debug: 4.4.3 - ws: 8.18.3 - transitivePeerDependencies: - - bufferutil - - supports-color - - utf-8-validate - - socket.io-client@4.8.1: - dependencies: - '@socket.io/component-emitter': 3.1.2 - debug: 4.3.7 - engine.io-client: 6.6.4 - socket.io-parser: 4.2.5 - transitivePeerDependencies: - - bufferutil - - supports-color - - utf-8-validate - - socket.io-parser@4.2.5: - dependencies: - '@socket.io/component-emitter': 3.1.2 - debug: 4.4.3 - transitivePeerDependencies: - - supports-color - - socket.io@4.8.1: - dependencies: - accepts: 1.3.8 - base64id: 2.0.0 - cors: 2.8.6 - debug: 4.3.7 - engine.io: 6.6.4 - socket.io-adapter: 2.5.6 - socket.io-parser: 4.2.5 - transitivePeerDependencies: - - bufferutil - - supports-color - - utf-8-validate - socks-proxy-agent@8.0.5: dependencies: agent-base: 7.1.4 @@ -9606,7 +10202,7 @@ snapshots: symbol-tree@3.2.4: {} - systeminformation@5.31.1: {} + systeminformation@5.31.2: {} tar-fs@3.1.1: dependencies: @@ -9737,12 +10333,16 @@ snapshots: typescript@5.9.3: {} + uc.micro@2.1.0: {} + uglify-js@3.19.3: {} uint8array-extras@1.5.0: {} undici-types@6.21.0: {} + undici-types@7.18.2: {} + unified@11.0.5: dependencies: '@types/unist': 3.0.3 @@ -9807,6 +10407,8 @@ snapshots: '@types/unist': 3.0.3 vfile-message: 4.0.3 + w3c-keyname@2.2.8: {} + webdriver-bidi-protocol@0.4.1: {} webidl-conversions@7.0.0: {} @@ -9862,13 +10464,13 @@ snapshots: ws@7.5.10: {} - ws@8.17.1: {} - - ws@8.18.3: {} - ws@8.19.0: {} - xmlhttprequest-ssl@2.1.2: {} + xterm-addon-fit@0.8.0(xterm@5.3.0): + dependencies: + xterm: 5.3.0 + + xterm@5.3.0: {} y18n@5.0.8: {} diff --git a/readme.md b/readme.md index 853bf90..99e1f43 100644 --- a/readme.md +++ b/readme.md @@ -1,6 +1,6 @@ # @api.global/typedrequest -A TypeScript library for making **fully typed request/response cycles** across any transport — HTTP, WebSockets, broadcast channels, or custom protocols. Define your API contract once as a TypeScript interface, then use it on both client and server with compile-time safety, automatic routing, virtual streams for real-time data, and built-in traffic monitoring hooks. +A TypeScript library for making **fully typed request/response cycles** across any transport — HTTP, WebSockets, broadcast channels, or custom protocols. Define your API contract once as a TypeScript interface, then use it on both client and server with compile-time safety, automatic routing, middleware chains, virtual streams for real-time data, and built-in traffic monitoring hooks. ## Issue Reporting and Security @@ -12,6 +12,12 @@ For reporting bugs, issues, or security vulnerabilities, please visit [community pnpm install @api.global/typedrequest ``` +You'll also want the interfaces package for defining stream types: + +```bash +pnpm install @api.global/typedrequest-interfaces +``` + ## Usage All examples use ESM imports and TypeScript. @@ -114,6 +120,32 @@ mainRouter.addTypedRouter(coreRouter); mainRouter.addTypedRouter(authRouter); ``` +### 🛡️ Middleware + +Add middleware functions to a `TypedRouter` that run **before** any handler on that router executes. Middleware is great for authentication, logging, rate limiting, or input validation: + +```typescript +const router = new TypedRouter(); + +// Add authentication middleware +router.addMiddleware(async (typedRequest) => { + const token = typedRequest.localData?.authToken; + if (!token || !isValidToken(token)) { + throw new TypedResponseError('Unauthorized', { reason: 'invalid_token' }); + } +}); + +// Add logging middleware +router.addMiddleware(async (typedRequest) => { + console.log(`Processing ${typedRequest.method}`); +}); + +// Handlers are only reached if all middleware passes +router.addTypedHandler(secureHandler); +``` + +Middleware functions receive the full `ITypedRequest` object and run in the order they were added. Throw a `TypedResponseError` from any middleware to reject the request before it reaches the handler. + ### 🎯 Custom Targets with TypedTarget For non-HTTP transports (WebSockets, broadcast channels, IPC), use `TypedTarget` with a custom post function: @@ -261,6 +293,8 @@ const internalReq = new TypedRequest(target, 'healthCheck'); internalReq.skipHooks = true; ``` +Global hooks are shared across all bundles via `globalThis`, making them ideal for application-wide observability. + ### 🏗️ Architecture Overview ``` @@ -270,18 +304,25 @@ internalReq.skipHooks = true; └─────────────┘ └──────────────┘ └──────┬───────┘ │ ┌──────▼───────┐ + │ Middleware │ + └──────┬───────┘ + │ + ┌──────▼───────┐ │ TypedHandler │ │ (your logic) │ └──────────────┘ ``` -- **TypedRequest** — fires typed requests against a URL or TypedTarget -- **TypedTarget** — abstracts the transport layer (HTTP, WebSocket, custom) -- **TypedRouter** — routes incoming requests to the correct handler; composable via `addTypedRouter()` -- **TypedHandler** — processes a single method and returns a typed response -- **VirtualStream** — bidirectional binary streaming with backpressure over any supported transport -- **TypedResponseError** — structured error propagation -- **TypedTools** — guard validation and transport-layer context in handlers +| Component | Role | +|---|---| +| **TypedRequest** | Fires typed requests against a URL or TypedTarget | +| **TypedTarget** | Abstracts the transport layer (HTTP, WebSocket, custom) | +| **TypedRouter** | Routes incoming requests to the correct handler; composable via `addTypedRouter()` | +| **TypedHandler** | Processes a single method and returns a typed response | +| **Middleware** | Pre-handler functions for auth, validation, logging — throw `TypedResponseError` to reject | +| **VirtualStream** | Bidirectional binary streaming with backpressure over any supported transport | +| **TypedResponseError** | Structured error propagation across the wire | +| **TypedTools** | Guard validation and transport-layer context available inside handlers | ## License and Legal Information diff --git a/test/test.browser.ts b/test/test.chromium.ts similarity index 100% rename from test/test.browser.ts rename to test/test.chromium.ts diff --git a/test/test.ts b/test/test.ts index 8459755..c9c7a22 100644 --- a/test/test.ts +++ b/test/test.ts @@ -4,7 +4,7 @@ import * as typedserver from '@api.global/typedserver'; import * as typedrequest from '../ts/index.js'; import * as typedrequestInterfaces from '@api.global/typedrequest-interfaces'; -let testServer: typedserver.servertools.Server; +let testServer: typedserver.TypedServer; let testTypedRouter: typedrequest.TypedRouter; let testTypedHandler: typedrequest.TypedHandler; @@ -39,7 +39,7 @@ tap.test('should create a typedHandler', async () => { }); tap.test('should spawn a server to test with', async () => { - testServer = new typedserver.servertools.Server({ + testServer = new typedserver.TypedServer({ cors: true, forceSsl: false, port: 3000, @@ -47,12 +47,8 @@ tap.test('should spawn a server to test with', async () => { }); tap.test('should define a testHandler', async () => { - testTypedRouter = new typedrequest.TypedRouter(); // typed routers can broker typedrequests between handlers + testTypedRouter = testServer.typedrouter; testTypedRouter.addTypedHandler(testTypedHandler); - testServer.addRoute( - '/testroute', - new typedserver.servertools.HandlerTypedRouter(testTypedRouter as any) // the "any" is testspecific, since smartexpress ships with its own version of typedrequest. - ); }); tap.test('should start the server', async () => { @@ -61,7 +57,7 @@ tap.test('should start the server', async () => { tap.test('should fire a request', async () => { const typedRequest = new typedrequest.TypedRequest( - 'http://localhost:3000/testroute', + 'http://localhost:3000/typedrequest', 'hi' ); const response = await typedRequest.fire({ @@ -86,7 +82,7 @@ tap.test('should allow VirtualStreams', async () => { }; })); const typedRequest = new typedrequest.TypedRequest( - 'http://localhost:3000/testroute', + 'http://localhost:3000/typedrequest', 'handleStream' ); const response = await typedRequest.fire({ @@ -95,8 +91,14 @@ tap.test('should allow VirtualStreams', async () => { console.log(response.responseStream); newRequestingVS.sendData(Buffer.from('hello')); - const data = await generatedRequestingVS.fetchData(); - const decodedData = new TextDecoder().decode(data); + const data: any = await generatedRequestingVS.fetchData(); + // Data may arrive as Uint8Array or as JSON-serialized Buffer {type: "Buffer", data: [...]} + const resolvedData = data instanceof Uint8Array || Buffer.isBuffer(data) + ? data + : data?.type === 'Buffer' && Array.isArray(data.data) + ? new Uint8Array(data.data) + : data; + const decodedData = new TextDecoder().decode(resolvedData); expect(decodedData).toEqual('hello'); await newRequestingVS.close(); await newRespondingVS.close(); diff --git a/ts/00_commitinfo_data.ts b/ts/00_commitinfo_data.ts index 504c206..dbe07d6 100644 --- a/ts/00_commitinfo_data.ts +++ b/ts/00_commitinfo_data.ts @@ -3,6 +3,6 @@ */ export const commitinfo = { name: '@api.global/typedrequest', - version: '3.2.7', + version: '3.3.0', description: 'A TypeScript library for making typed requests towards APIs, including facilities for handling requests, routing, and virtual stream handling.' } diff --git a/ts/classes.typedrouter.ts b/ts/classes.typedrouter.ts index ff3a263..1108419 100644 --- a/ts/classes.typedrouter.ts +++ b/ts/classes.typedrouter.ts @@ -3,6 +3,7 @@ import { VirtualStream } from './classes.virtualstream.js'; import { TypedHandler } from './classes.typedhandler.js'; import { TypedRequest } from './classes.typedrequest.js'; +import { TypedResponseError } from './classes.typedresponseerror.js'; /** * Log entry for TypedRequest traffic monitoring @@ -28,12 +29,20 @@ export interface ITypedRouterHooks { onOutgoingResponse?: (entry: ITypedRequestLogEntry) => void; } +/** + * Middleware function that runs before the handler. + * Throw TypedResponseError to reject the request. + */ +export type TMiddlewareFunction = plugins.typedRequestInterfaces.ITypedRequest> = ( + typedRequest: plugins.typedRequestInterfaces.ITypedRequest & TReq +) => Promise; + /** * A typed router decides on which typed handler to call based on the method * specified in the typed request * This is thought for reusing the same url endpoint for different methods */ -export class TypedRouter { +export class TypedRouter = plugins.typedRequestInterfaces.ITypedRequest> { // Use globalThis for cross-bundle hook sharing public static get globalHooks(): ITypedRouterHooks { if (!(globalThis as any).__typedRouterGlobalHooks) { @@ -89,12 +98,23 @@ export class TypedRouter { } } - public routerMap = new plugins.lik.ObjectMap(); + public routerMap = new plugins.lik.ObjectMap>(); public handlerMap = new plugins.lik.ObjectMap< TypedHandler >(); public registeredVirtualStreams = new plugins.lik.ObjectMap>(); + // Middleware chain + private middlewares: TMiddlewareFunction[] = []; + + /** + * Adds a middleware function that runs before the handler on this router. + * Throw TypedResponseError to reject the request. + */ + public addMiddleware(fn: TMiddlewareFunction): void { + this.middlewares.push(fn); + } + public fireEventInterestMap = new plugins.lik.InterestMap< string, plugins.typedRequestInterfaces.ITypedRequest @@ -104,7 +124,7 @@ export class TypedRouter { * adds the handler to the routing map * @param typedHandlerArg */ - public addTypedHandler( + public addTypedHandler( typedHandlerArg: TypedHandler ) { // lets check for deduplication @@ -122,7 +142,7 @@ export class TypedRouter { * adds another sub typedRouter * @param typedRequest */ - public addTypedRouter(typedRouterArg: TypedRouter) { + public addTypedRouter(typedRouterArg: TypedRouter) { const routerExists = this.routerMap.findSync((routerArg) => routerArg === typedRouterArg); if (!routerExists) { this.routerMap.add(typedRouterArg); @@ -141,7 +161,7 @@ export class TypedRouter { */ public getTypedHandlerForMethod( methodArg: string, - checkedRouters: TypedRouter[] = [] + checkedRouters: TypedRouter[] = [] ): TypedHandler { checkedRouters.push(this); @@ -162,6 +182,26 @@ export class TypedRouter { return typedHandler; } + /** + * Finds the handler AND its owning router for a given method. + * Needed to know which router's middleware to run. + */ + public getTypedHandlerAndRouter( + methodArg: string, + checkedRouters: TypedRouter[] = [] + ): { handler: TypedHandler; router: TypedRouter } | null { + checkedRouters.push(this); + const handler = this.handlerMap.findSync((h) => h.method === methodArg); + if (handler) return { handler, router: this }; + for (const child of this.routerMap.getArray()) { + if (!checkedRouters.includes(child)) { + const result = child.getTypedHandlerAndRouter(methodArg, checkedRouters); + if (result) return result; + } + } + return null; + } + /** * Options for routeAndAddResponse */ @@ -214,9 +254,9 @@ export class TypedRouter { }); } - const typedHandler = this.getTypedHandlerForMethod(typedRequestArg.method); + const result = this.getTypedHandlerAndRouter(typedRequestArg.method); - if (!typedHandler) { + if (!result) { console.log(`Cannot find handler for methodname ${typedRequestArg.method}`); typedRequestArg.error = { text: 'There is no available method for this call on the server side', @@ -247,6 +287,43 @@ export class TypedRouter { return typedRequestArg; } + const { handler: typedHandler, router: owningRouter } = result; + + // Run owning router's middleware chain + if (owningRouter.middlewares.length > 0) { + try { + for (const mw of owningRouter.middlewares) { + await mw(typedRequestArg as any); + } + } catch (e) { + if (e instanceof TypedResponseError) { + typedRequestArg.error = { text: e.errorText, data: e.errorData || {} }; + } else { + typedRequestArg.error = { text: (e as Error).message || 'Middleware error', data: {} }; + } + typedRequestArg.correlation.phase = 'response'; + typedRequestArg.localData = null; + typedRequestArg = VirtualStream.encodePayloadForNetwork(typedRequestArg, { + typedrouter: this, + }); + + if (!options.skipHooks) { + this.callHook('onOutgoingResponse', { + correlationId: typedRequestArg.correlation?.id || 'unknown', + method: typedRequestArg.method, + direction: 'outgoing', + phase: 'response', + timestamp: Date.now(), + durationMs: Date.now() - requestStartTime, + payload: typedRequestArg.response, + error: typedRequestArg.error?.text, + }); + } + + return typedRequestArg; + } + } + typedRequestArg = await typedHandler.addResponse(typedRequestArg); typedRequestArg.localData = null; // encode again before handing back diff --git a/ts/classes.typedtarget.ts b/ts/classes.typedtarget.ts index 3a00111..10f00f9 100644 --- a/ts/classes.typedtarget.ts +++ b/ts/classes.typedtarget.ts @@ -26,7 +26,7 @@ export interface ITypedTargetConstructorOptions { /** * this typedrouter allows us to have easy async request response cycles */ - typedRouterRef?: TypedRouter; + typedRouterRef?: TypedRouter; } /** diff --git a/ts/classes.virtualstream.ts b/ts/classes.virtualstream.ts index 6d9809f..7e8d7c3 100644 --- a/ts/classes.virtualstream.ts +++ b/ts/classes.virtualstream.ts @@ -8,7 +8,7 @@ export interface ICommFunctions { sendMethod?: ( sendPayload: plugins.typedRequestInterfaces.IStreamRequest ) => Promise; - typedrouter?: TypedRouter; + typedrouter?: TypedRouter; } /** @@ -140,7 +140,7 @@ export class VirtualStream implements plugins.typedRequestInterf // integration with typedrequest mechanics public sendMethod: ICommFunctions['sendMethod']; - public typedrouter: TypedRouter; + public typedrouter: TypedRouter; // wether to keep the stream alive private keepAlive = true; diff --git a/ts/index.ts b/ts/index.ts index 6ab312c..a0f0df2 100644 --- a/ts/index.ts +++ b/ts/index.ts @@ -5,5 +5,5 @@ export * from './classes.typedresponseerror.js'; export * from './classes.typedtarget.js'; export * from './classes.virtualstream.js'; -// Re-export hook interfaces from typedrouter -export type { ITypedRequestLogEntry, ITypedRouterHooks } from './classes.typedrouter.js'; \ No newline at end of file +// Re-export hook interfaces and middleware type from typedrouter +export type { ITypedRequestLogEntry, ITypedRouterHooks, TMiddlewareFunction } from './classes.typedrouter.js'; \ No newline at end of file