Compare commits

...

4 Commits

Author SHA1 Message Date
980675ea05 v5.0.1
Some checks failed
Default (tags) / security (push) Successful in 4s
Default (tags) / test (push) Failing after 48s
Default (tags) / release (push) Has been skipped
Default (tags) / metadata (push) Has been skipped
2025-11-17 14:37:09 +00:00
15819d8a23 fix(test): Enable --logfile in test script and bump @git.zone/tstest to ^2.8.2 2025-11-17 14:37:08 +00:00
bc71d2e5a8 v5.0.0
Some checks failed
Default (tags) / security (push) Successful in 14s
Default (tags) / test (push) Failing after 1m12s
Default (tags) / release (push) Has been skipped
Default (tags) / metadata (push) Has been skipped
2025-11-17 14:18:58 +00:00
0cf48b3688 BREAKING CHANGE(client/streaming): Unify streaming APIs: remove raw()/streamNode() and standardize on web ReadableStream across runtimes 2025-11-17 14:18:58 +00:00
15 changed files with 1281 additions and 1526 deletions

View File

@@ -1,5 +1,21 @@
# Changelog # Changelog
## 2025-11-17 - 5.0.1 - fix(test)
Enable --logfile in test script and bump @git.zone/tstest to ^2.8.2
- Update npm script: add --logfile flag to the test command to produce test logs
- Bump devDependency @git.zone/tstest from ^2.8.1 to ^2.8.2
## 2025-11-17 - 5.0.0 - BREAKING CHANGE(client/streaming)
Unify streaming APIs: remove raw()/streamNode() and standardize on web ReadableStream across runtimes
- Removed SmartRequest.raw() and RawStreamFunction type. The raw streaming function API is gone — use .stream() with a web ReadableStream for request body streaming.
- Removed response.streamNode() from all runtimes. Responses now expose only response.stream() (ReadableStream<Uint8Array>). Node.js consumers must convert using Readable.fromWeb() if a Node.js stream is required.
- Node implementation now uses Readable.toWeb() to convert native Node streams into web ReadableStream for a single cross-platform streaming API.
- Client request.stream() still accepts Node.js streams but they are converted internally to web streams; temporary internal properties for raw streaming were removed.
- Updated tests and documentation (readme) with migration guidance and examples for converting between web and Node.js streams.
- Bumped devDependencies (@git.zone/tsbuild, tsrun, tstest) and upgraded form-data to a newer patch release.
## 2025-11-16 - 4.4.2 - fix(core_base/request) ## 2025-11-16 - 4.4.2 - fix(core_base/request)
Strip 'unix:' prefix when parsing unix socket URLs so socketPath is a clean filesystem path Strip 'unix:' prefix when parsing unix socket URLs so socketPath is a clean filesystem path

359
deno.lock generated
View File

@@ -1,16 +1,16 @@
{ {
"version": "5", "version": "5",
"specifiers": { "specifiers": {
"npm:@git.zone/tsbuild@^2.7.1": "2.7.1", "npm:@git.zone/tsbuild@^3.1.0": "3.1.0",
"npm:@git.zone/tsrun@^1.6.2": "1.6.2", "npm:@git.zone/tsrun@2": "2.0.0",
"npm:@git.zone/tstest@^2.7.0": "2.7.0", "npm:@git.zone/tstest@^2.8.2": "2.8.2",
"npm:@push.rocks/smartenv@6": "6.0.0", "npm:@push.rocks/smartenv@6": "6.0.0",
"npm:@push.rocks/smartpath@6": "6.0.0", "npm:@push.rocks/smartpath@6": "6.0.0",
"npm:@push.rocks/smartpromise@^4.0.4": "4.2.3", "npm:@push.rocks/smartpromise@^4.0.4": "4.2.3",
"npm:@push.rocks/smarturl@^3.1.0": "3.1.0", "npm:@push.rocks/smarturl@^3.1.0": "3.1.0",
"npm:@types/node@^22.9.0": "22.18.13", "npm:@types/node@^22.9.0": "22.18.13",
"npm:agentkeepalive@^4.5.0": "4.6.0", "npm:agentkeepalive@^4.5.0": "4.6.0",
"npm:form-data@^4.0.4": "4.0.4" "npm:form-data@^4.0.5": "4.0.5"
}, },
"npm": { "npm": {
"@api.global/typedrequest-interfaces@2.0.2": { "@api.global/typedrequest-interfaces@2.0.2": {
@@ -61,7 +61,7 @@
"@push.rocks/smartopen", "@push.rocks/smartopen",
"@push.rocks/smartpath@6.0.0", "@push.rocks/smartpath@6.0.0",
"@push.rocks/smartpromise", "@push.rocks/smartpromise",
"@push.rocks/smartrequest@4.3.4", "@push.rocks/smartrequest@4.4.2",
"@push.rocks/smartrx", "@push.rocks/smartrx",
"@push.rocks/smartsitemap", "@push.rocks/smartsitemap",
"@push.rocks/smartstream", "@push.rocks/smartstream",
@@ -161,8 +161,8 @@
], ],
"tarball": "https://verdaccio.lossless.digital/@aws-crypto/util/-/util-5.2.0.tgz" "tarball": "https://verdaccio.lossless.digital/@aws-crypto/util/-/util-5.2.0.tgz"
}, },
"@aws-sdk/client-s3@3.931.0": { "@aws-sdk/client-s3@3.932.0": {
"integrity": "sha512-p+ZSRvmylk/pNImGDvLt3lOkILOexNcYvsCjvN2TR9X8RvxvPURISVp2qdGKdwUr/zkshteg1x/30GYlcTKs5g==", "integrity": "sha512-qrlbJ3W5QR3Gzz2S+yaItH8ZhX7vaeA4j4fDAi8+0FmsVhXOfBbomWr+JO1wk/YojZMdyLfmfYRHrJvAQsLFVw==",
"dependencies": [ "dependencies": [
"@aws-crypto/sha1-browser", "@aws-crypto/sha1-browser",
"@aws-crypto/sha256-browser", "@aws-crypto/sha256-browser",
@@ -220,10 +220,10 @@
"@smithy/util-waiter", "@smithy/util-waiter",
"tslib@2.8.1" "tslib@2.8.1"
], ],
"tarball": "https://verdaccio.lossless.digital/@aws-sdk/client-s3/-/client-s3-3.931.0.tgz" "tarball": "https://verdaccio.lossless.digital/@aws-sdk/client-s3/-/client-s3-3.932.0.tgz"
}, },
"@aws-sdk/client-sso@3.931.0": { "@aws-sdk/client-sso@3.932.0": {
"integrity": "sha512-GM/CARsIUQGEspM9VhZaftFVXnNtFNUUXjpM1ePO4CHk1J/VFvXcsQr3SHWIs0F4Ll6pvy5LpcRlWW5pK7T4aQ==", "integrity": "sha512-XHqHa5iv2OQsKoM2tUQXs7EAyryploC00Wg0XSFra/KAKqyGizUb5XxXsGlyqhebB29Wqur+zwiRwNmejmN0+Q==",
"dependencies": [ "dependencies": [
"@aws-crypto/sha256-browser", "@aws-crypto/sha256-browser",
"@aws-crypto/sha256-js", "@aws-crypto/sha256-js",
@@ -264,10 +264,10 @@
"@smithy/util-utf8@4.2.0", "@smithy/util-utf8@4.2.0",
"tslib@2.8.1" "tslib@2.8.1"
], ],
"tarball": "https://verdaccio.lossless.digital/@aws-sdk/client-sso/-/client-sso-3.931.0.tgz" "tarball": "https://verdaccio.lossless.digital/@aws-sdk/client-sso/-/client-sso-3.932.0.tgz"
}, },
"@aws-sdk/core@3.931.0": { "@aws-sdk/core@3.932.0": {
"integrity": "sha512-l/b6AQbto4TuXL2FIm7Z+tbVjrp0LN7ESm97Sf3nneB0vjKtB6R0TS/IySzCYMgyOC3Hxz+Ka34HJXZk9eXTFw==", "integrity": "sha512-AS8gypYQCbNojwgjvZGkJocC2CoEICDx9ZJ15ILsv+MlcCVLtUJSRSx3VzJOUY2EEIaGLRrPNlIqyn/9/fySvA==",
"dependencies": [ "dependencies": [
"@aws-sdk/types", "@aws-sdk/types",
"@aws-sdk/xml-builder", "@aws-sdk/xml-builder",
@@ -283,10 +283,10 @@
"@smithy/util-utf8@4.2.0", "@smithy/util-utf8@4.2.0",
"tslib@2.8.1" "tslib@2.8.1"
], ],
"tarball": "https://verdaccio.lossless.digital/@aws-sdk/core/-/core-3.931.0.tgz" "tarball": "https://verdaccio.lossless.digital/@aws-sdk/core/-/core-3.932.0.tgz"
}, },
"@aws-sdk/credential-provider-env@3.931.0": { "@aws-sdk/credential-provider-env@3.932.0": {
"integrity": "sha512-dTNBpkKXyBdcpEjyfgkE/EFU/0NRoukLs+Pj0S8K1Dg216J9uIijpi6CaBBN+HvnaTlEItm2tzXiJpPVI+TqHQ==", "integrity": "sha512-ozge/c7NdHUDyHqro6+P5oHt8wfKSUBN+olttiVfBe9Mw3wBMpPa3gQ0pZnG+gwBkKskBuip2bMR16tqYvUSEA==",
"dependencies": [ "dependencies": [
"@aws-sdk/core", "@aws-sdk/core",
"@aws-sdk/types", "@aws-sdk/types",
@@ -294,10 +294,10 @@
"@smithy/types", "@smithy/types",
"tslib@2.8.1" "tslib@2.8.1"
], ],
"tarball": "https://verdaccio.lossless.digital/@aws-sdk/credential-provider-env/-/credential-provider-env-3.931.0.tgz" "tarball": "https://verdaccio.lossless.digital/@aws-sdk/credential-provider-env/-/credential-provider-env-3.932.0.tgz"
}, },
"@aws-sdk/credential-provider-http@3.931.0": { "@aws-sdk/credential-provider-http@3.932.0": {
"integrity": "sha512-7Ge26fhMDn51BTbHgopx5+uOl4I47k15BDzYc4YT6zyjS99uycYNCA7zB500DGTTn2HK27ZDTyAyhTKZGxRxbA==", "integrity": "sha512-b6N9Nnlg8JInQwzBkUq5spNaXssM3h3zLxGzpPrnw0nHSIWPJPTbZzA5Ca285fcDUFuKP+qf3qkuqlAjGOdWhg==",
"dependencies": [ "dependencies": [
"@aws-sdk/core", "@aws-sdk/core",
"@aws-sdk/types", "@aws-sdk/types",
@@ -310,10 +310,10 @@
"@smithy/util-stream", "@smithy/util-stream",
"tslib@2.8.1" "tslib@2.8.1"
], ],
"tarball": "https://verdaccio.lossless.digital/@aws-sdk/credential-provider-http/-/credential-provider-http-3.931.0.tgz" "tarball": "https://verdaccio.lossless.digital/@aws-sdk/credential-provider-http/-/credential-provider-http-3.932.0.tgz"
}, },
"@aws-sdk/credential-provider-ini@3.931.0": { "@aws-sdk/credential-provider-ini@3.932.0": {
"integrity": "sha512-uzicpP7IHBxvAMjwGdmeke2bGTxjsKCSW7N48zuv0t0d56hmGHfcZIK5p4ry2OBJxzScp182OUAdAEG8wuSuuA==", "integrity": "sha512-ZBjSAXVGy7danZRHCRMJQ7sBkG1Dz39thYlvTiUaf9BKZ+8ymeiFhuTeV1OkWUBBnY0ki2dVZJvboTqfINhNxA==",
"dependencies": [ "dependencies": [
"@aws-sdk/core", "@aws-sdk/core",
"@aws-sdk/credential-provider-env", "@aws-sdk/credential-provider-env",
@@ -329,10 +329,10 @@
"@smithy/types", "@smithy/types",
"tslib@2.8.1" "tslib@2.8.1"
], ],
"tarball": "https://verdaccio.lossless.digital/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.931.0.tgz" "tarball": "https://verdaccio.lossless.digital/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.932.0.tgz"
}, },
"@aws-sdk/credential-provider-node@3.931.0": { "@aws-sdk/credential-provider-node@3.932.0": {
"integrity": "sha512-eO8mfWNHz0dyYdVfPLVzmqXaSA3agZF/XvBO9/fRU90zCb8lKlXfgUmghGW7LhDkiv2v5uuizUiag7GsKoIcJw==", "integrity": "sha512-SEG9t2taBT86qe3gTunfrK8BxT710GVLGepvHr+X5Pw+qW225iNRaGN0zJH+ZE/j91tcW9wOaIoWnURkhR5wIg==",
"dependencies": [ "dependencies": [
"@aws-sdk/credential-provider-env", "@aws-sdk/credential-provider-env",
"@aws-sdk/credential-provider-http", "@aws-sdk/credential-provider-http",
@@ -347,10 +347,10 @@
"@smithy/types", "@smithy/types",
"tslib@2.8.1" "tslib@2.8.1"
], ],
"tarball": "https://verdaccio.lossless.digital/@aws-sdk/credential-provider-node/-/credential-provider-node-3.931.0.tgz" "tarball": "https://verdaccio.lossless.digital/@aws-sdk/credential-provider-node/-/credential-provider-node-3.932.0.tgz"
}, },
"@aws-sdk/credential-provider-process@3.931.0": { "@aws-sdk/credential-provider-process@3.932.0": {
"integrity": "sha512-8Mu9r+5BUKqmKSI/WYHl5o4GeoonEb51RmoLEqG6431Uz4Y8C6gzAT69yjOJ+MwoWQ2Os37OZLOTv7SgxyOgrQ==", "integrity": "sha512-BodZYKvT4p/Dkm28Ql/FhDdS1+p51bcZeMMu2TRtU8PoMDHnVDhHz27zASEKSZwmhvquxHrZHB0IGuVqjZUtSQ==",
"dependencies": [ "dependencies": [
"@aws-sdk/core", "@aws-sdk/core",
"@aws-sdk/types", "@aws-sdk/types",
@@ -359,10 +359,10 @@
"@smithy/types", "@smithy/types",
"tslib@2.8.1" "tslib@2.8.1"
], ],
"tarball": "https://verdaccio.lossless.digital/@aws-sdk/credential-provider-process/-/credential-provider-process-3.931.0.tgz" "tarball": "https://verdaccio.lossless.digital/@aws-sdk/credential-provider-process/-/credential-provider-process-3.932.0.tgz"
}, },
"@aws-sdk/credential-provider-sso@3.931.0": { "@aws-sdk/credential-provider-sso@3.932.0": {
"integrity": "sha512-FP31lfMgNMDG4ZDX4NUZ+uoHWn76etcG8UWEgzZb4YOPV4M8a7gwU95iD+RBaK4lV3KvwH2tu68Hmne1qQpFqQ==", "integrity": "sha512-XYmkv+ltBjjmPZ6AmR1ZQZkQfD0uzG61M18/Lif3HAGxyg3dmod0aWx9aL6lj9SvxAGqzscrx5j4PkgLqjZruw==",
"dependencies": [ "dependencies": [
"@aws-sdk/client-sso", "@aws-sdk/client-sso",
"@aws-sdk/core", "@aws-sdk/core",
@@ -373,10 +373,10 @@
"@smithy/types", "@smithy/types",
"tslib@2.8.1" "tslib@2.8.1"
], ],
"tarball": "https://verdaccio.lossless.digital/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.931.0.tgz" "tarball": "https://verdaccio.lossless.digital/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.932.0.tgz"
}, },
"@aws-sdk/credential-provider-web-identity@3.931.0": { "@aws-sdk/credential-provider-web-identity@3.932.0": {
"integrity": "sha512-hfX0Buw2+ie0FBiSFMmnXfugQc9fO0KvEojnNnzhk4utlWjZobMcUprOQ/VKUueg0Kga1b1xu8gEP6g1aEh3zw==", "integrity": "sha512-Yw/hYNnC1KHuVIQF9PkLXbuKN7ljx70OSbJYDRufllQvej3kRwNcqQSnzI1M4KaObccqKaE6srg22DqpPy9p8w==",
"dependencies": [ "dependencies": [
"@aws-sdk/core", "@aws-sdk/core",
"@aws-sdk/nested-clients", "@aws-sdk/nested-clients",
@@ -386,7 +386,7 @@
"@smithy/types", "@smithy/types",
"tslib@2.8.1" "tslib@2.8.1"
], ],
"tarball": "https://verdaccio.lossless.digital/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.931.0.tgz" "tarball": "https://verdaccio.lossless.digital/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.932.0.tgz"
}, },
"@aws-sdk/middleware-bucket-endpoint@3.930.0": { "@aws-sdk/middleware-bucket-endpoint@3.930.0": {
"integrity": "sha512-cnCLWeKPYgvV4yRYPFH6pWMdUByvu2cy2BAlfsPpvnm4RaVioztyvxmQj5PmVN5fvWs5w/2d6U7le8X9iye2sA==", "integrity": "sha512-cnCLWeKPYgvV4yRYPFH6pWMdUByvu2cy2BAlfsPpvnm4RaVioztyvxmQj5PmVN5fvWs5w/2d6U7le8X9iye2sA==",
@@ -411,8 +411,8 @@
], ],
"tarball": "https://verdaccio.lossless.digital/@aws-sdk/middleware-expect-continue/-/middleware-expect-continue-3.930.0.tgz" "tarball": "https://verdaccio.lossless.digital/@aws-sdk/middleware-expect-continue/-/middleware-expect-continue-3.930.0.tgz"
}, },
"@aws-sdk/middleware-flexible-checksums@3.931.0": { "@aws-sdk/middleware-flexible-checksums@3.932.0": {
"integrity": "sha512-eYWwUKeEommCrrm0Ro6fGDwVO0x2bL3niOmSnHIlIdpu7ruzAGaphj+2MekCxaSPORzkZ3yheHUzV45D8Qj63A==", "integrity": "sha512-hyvRz/XS/0HTHp9/Ld1mKwpOi7bZu5olI42+T112rkCTbt1bewkygzEl4oflY4H7cKMamQusYoL0yBUD/QSEvA==",
"dependencies": [ "dependencies": [
"@aws-crypto/crc32", "@aws-crypto/crc32",
"@aws-crypto/crc32c", "@aws-crypto/crc32c",
@@ -428,7 +428,7 @@
"@smithy/util-utf8@4.2.0", "@smithy/util-utf8@4.2.0",
"tslib@2.8.1" "tslib@2.8.1"
], ],
"tarball": "https://verdaccio.lossless.digital/@aws-sdk/middleware-flexible-checksums/-/middleware-flexible-checksums-3.931.0.tgz" "tarball": "https://verdaccio.lossless.digital/@aws-sdk/middleware-flexible-checksums/-/middleware-flexible-checksums-3.932.0.tgz"
}, },
"@aws-sdk/middleware-host-header@3.930.0": { "@aws-sdk/middleware-host-header@3.930.0": {
"integrity": "sha512-x30jmm3TLu7b/b+67nMyoV0NlbnCVT5DI57yDrhXAPCtdgM1KtdLWt45UcHpKOm1JsaIkmYRh2WYu7Anx4MG0g==", "integrity": "sha512-x30jmm3TLu7b/b+67nMyoV0NlbnCVT5DI57yDrhXAPCtdgM1KtdLWt45UcHpKOm1JsaIkmYRh2WYu7Anx4MG0g==",
@@ -469,8 +469,8 @@
], ],
"tarball": "https://verdaccio.lossless.digital/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.930.0.tgz" "tarball": "https://verdaccio.lossless.digital/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.930.0.tgz"
}, },
"@aws-sdk/middleware-sdk-s3@3.931.0": { "@aws-sdk/middleware-sdk-s3@3.932.0": {
"integrity": "sha512-uWF78ht8Wgxljn6y0cEcIWfbeTVnJ0cE1Gha9ScCqscmuBCpHuFMSd/p53w3whoDhpQL3ln9mOyY3tfST/NUQA==", "integrity": "sha512-bYMHxqQzseaAP9Z5qLI918z5AtbAnZRRtFi3POb4FLZyreBMgCgBNaPkIhdgywnkqaydTWvbMBX4s9f4gUwlTw==",
"dependencies": [ "dependencies": [
"@aws-sdk/core", "@aws-sdk/core",
"@aws-sdk/types", "@aws-sdk/types",
@@ -487,7 +487,7 @@
"@smithy/util-utf8@4.2.0", "@smithy/util-utf8@4.2.0",
"tslib@2.8.1" "tslib@2.8.1"
], ],
"tarball": "https://verdaccio.lossless.digital/@aws-sdk/middleware-sdk-s3/-/middleware-sdk-s3-3.931.0.tgz" "tarball": "https://verdaccio.lossless.digital/@aws-sdk/middleware-sdk-s3/-/middleware-sdk-s3-3.932.0.tgz"
}, },
"@aws-sdk/middleware-ssec@3.930.0": { "@aws-sdk/middleware-ssec@3.930.0": {
"integrity": "sha512-N2/SvodmaDS6h7CWfuapt3oJyn1T2CBz0CsDIiTDv9cSagXAVFjPdm2g4PFJqrNBeqdDIoYBnnta336HmamWHg==", "integrity": "sha512-N2/SvodmaDS6h7CWfuapt3oJyn1T2CBz0CsDIiTDv9cSagXAVFjPdm2g4PFJqrNBeqdDIoYBnnta336HmamWHg==",
@@ -498,8 +498,8 @@
], ],
"tarball": "https://verdaccio.lossless.digital/@aws-sdk/middleware-ssec/-/middleware-ssec-3.930.0.tgz" "tarball": "https://verdaccio.lossless.digital/@aws-sdk/middleware-ssec/-/middleware-ssec-3.930.0.tgz"
}, },
"@aws-sdk/middleware-user-agent@3.931.0": { "@aws-sdk/middleware-user-agent@3.932.0": {
"integrity": "sha512-Ftd+f3+y5KNYKzLXaGknwJ9hCkFWshi5C9TLLsz+fEohWc1FvIKU7MlXTeFms2eN76TTVHuG8N2otaujl6CuHg==", "integrity": "sha512-9BGTbJyA/4PTdwQWE9hAFIJGpsYkyEW20WON3i15aDqo5oRZwZmqaVageOD57YYqG8JDJjvcwKyDdR4cc38dvg==",
"dependencies": [ "dependencies": [
"@aws-sdk/core", "@aws-sdk/core",
"@aws-sdk/types", "@aws-sdk/types",
@@ -509,10 +509,10 @@
"@smithy/types", "@smithy/types",
"tslib@2.8.1" "tslib@2.8.1"
], ],
"tarball": "https://verdaccio.lossless.digital/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.931.0.tgz" "tarball": "https://verdaccio.lossless.digital/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.932.0.tgz"
}, },
"@aws-sdk/nested-clients@3.931.0": { "@aws-sdk/nested-clients@3.932.0": {
"integrity": "sha512-6/dXrX2nWgiWdHxooEtmKpOErms4+79AQawEvhhxpLPpa+tixl4i/MSFgHk9sjkGv5a1/P3DbnedpZWl+2wMOg==", "integrity": "sha512-E2ucBfiXSpxZflHTf3UFbVwao4+7v7ctAeg8SWuglc1UMqMlpwMFFgWiSONtsf0SR3+ZDoWGATyCXOfDWerJuw==",
"dependencies": [ "dependencies": [
"@aws-crypto/sha256-browser", "@aws-crypto/sha256-browser",
"@aws-crypto/sha256-js", "@aws-crypto/sha256-js",
@@ -553,7 +553,7 @@
"@smithy/util-utf8@4.2.0", "@smithy/util-utf8@4.2.0",
"tslib@2.8.1" "tslib@2.8.1"
], ],
"tarball": "https://verdaccio.lossless.digital/@aws-sdk/nested-clients/-/nested-clients-3.931.0.tgz" "tarball": "https://verdaccio.lossless.digital/@aws-sdk/nested-clients/-/nested-clients-3.932.0.tgz"
}, },
"@aws-sdk/region-config-resolver@3.930.0": { "@aws-sdk/region-config-resolver@3.930.0": {
"integrity": "sha512-KL2JZqH6aYeQssu1g1KuWsReupdfOoxD6f1as2VC+rdwYFUu4LfzMsFfXnBvvQWWqQ7rZHWOw1T+o5gJmg7Dzw==", "integrity": "sha512-KL2JZqH6aYeQssu1g1KuWsReupdfOoxD6f1as2VC+rdwYFUu4LfzMsFfXnBvvQWWqQ7rZHWOw1T+o5gJmg7Dzw==",
@@ -566,8 +566,8 @@
], ],
"tarball": "https://verdaccio.lossless.digital/@aws-sdk/region-config-resolver/-/region-config-resolver-3.930.0.tgz" "tarball": "https://verdaccio.lossless.digital/@aws-sdk/region-config-resolver/-/region-config-resolver-3.930.0.tgz"
}, },
"@aws-sdk/signature-v4-multi-region@3.931.0": { "@aws-sdk/signature-v4-multi-region@3.932.0": {
"integrity": "sha512-EGYYDSSk7k1xbSHtb8MfEMILf5achdNnnsYKgFk0+Oul3tPQ4xUmOt5qRP6sOO3/LQHF37gBYHUF9OSA/+uVCw==", "integrity": "sha512-NCIRJvoRc9246RZHIusY1+n/neeG2yGhBGdKhghmrNdM+mLLN6Ii7CKFZjx3DhxtpHMpl1HWLTMhdVrGwP2upw==",
"dependencies": [ "dependencies": [
"@aws-sdk/middleware-sdk-s3", "@aws-sdk/middleware-sdk-s3",
"@aws-sdk/types", "@aws-sdk/types",
@@ -576,10 +576,10 @@
"@smithy/types", "@smithy/types",
"tslib@2.8.1" "tslib@2.8.1"
], ],
"tarball": "https://verdaccio.lossless.digital/@aws-sdk/signature-v4-multi-region/-/signature-v4-multi-region-3.931.0.tgz" "tarball": "https://verdaccio.lossless.digital/@aws-sdk/signature-v4-multi-region/-/signature-v4-multi-region-3.932.0.tgz"
}, },
"@aws-sdk/token-providers@3.931.0": { "@aws-sdk/token-providers@3.932.0": {
"integrity": "sha512-dr+02X9oxqmXG0856odFJ7wAXy12pr/tq2Zg+IS0TDThFvgtvx4yChkpqmc89wGoW+Aly47JPfPUXh0IMpGzIg==", "integrity": "sha512-43u82ulVuHK4zWhcSPyuPS18l0LNHi3QJQ1YtP2MfP8bPf5a6hMYp5e3lUr9oTDEWcpwBYtOW0m1DVmoU/3veA==",
"dependencies": [ "dependencies": [
"@aws-sdk/core", "@aws-sdk/core",
"@aws-sdk/nested-clients", "@aws-sdk/nested-clients",
@@ -589,7 +589,7 @@
"@smithy/types", "@smithy/types",
"tslib@2.8.1" "tslib@2.8.1"
], ],
"tarball": "https://verdaccio.lossless.digital/@aws-sdk/token-providers/-/token-providers-3.931.0.tgz" "tarball": "https://verdaccio.lossless.digital/@aws-sdk/token-providers/-/token-providers-3.932.0.tgz"
}, },
"@aws-sdk/types@3.930.0": { "@aws-sdk/types@3.930.0": {
"integrity": "sha512-we/vaAgwlEFW7IeftmCLlLMw+6hFs3DzZPJw7lVHbj/5HJ0bz9gndxEsS2lQoeJ1zhiiLqAqvXxmM43s0MBg0A==", "integrity": "sha512-we/vaAgwlEFW7IeftmCLlLMw+6hFs3DzZPJw7lVHbj/5HJ0bz9gndxEsS2lQoeJ1zhiiLqAqvXxmM43s0MBg0A==",
@@ -634,8 +634,8 @@
], ],
"tarball": "https://verdaccio.lossless.digital/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.930.0.tgz" "tarball": "https://verdaccio.lossless.digital/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.930.0.tgz"
}, },
"@aws-sdk/util-user-agent-node@3.931.0": { "@aws-sdk/util-user-agent-node@3.932.0": {
"integrity": "sha512-j5if01rt7JCGYDVXck39V7IUyKAN73vKUPzmu+jp1apU3Q0lLSTZA/HCfL2HkMUKVLE67ibjKb+NCoEg0QhujA==", "integrity": "sha512-/kC6cscHrZL74TrZtgiIL5jJNbVsw9duGGPurmaVgoCbP7NnxyaSWEurbNV3VPNPhNE3bV3g4Ci+odq+AlsYQg==",
"dependencies": [ "dependencies": [
"@aws-sdk/middleware-user-agent", "@aws-sdk/middleware-user-agent",
"@aws-sdk/types", "@aws-sdk/types",
@@ -643,7 +643,7 @@
"@smithy/types", "@smithy/types",
"tslib@2.8.1" "tslib@2.8.1"
], ],
"tarball": "https://verdaccio.lossless.digital/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.931.0.tgz" "tarball": "https://verdaccio.lossless.digital/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.932.0.tgz"
}, },
"@aws-sdk/xml-builder@3.930.0": { "@aws-sdk/xml-builder@3.930.0": {
"integrity": "sha512-YIfkD17GocxdmlUVc3ia52QhcWuRIUJonbF8A2CYfcWNV3HzvAqpcPeC0bYUhkK+8e8YO1ARnLKZQE0TlwzorA==", "integrity": "sha512-YIfkD17GocxdmlUVc3ia52QhcWuRIUJonbF8A2CYfcWNV3HzvAqpcPeC0bYUhkK+8e8YO1ARnLKZQE0TlwzorA==",
@@ -679,9 +679,9 @@
"integrity": "sha512-5L/uBxmjaCIX5h8Z+uu+kA9BQLkc/Wl06UGR5ajNRxu+/XjonB5i8JpgFMrPj3LXTCPA0pv8yxUvbUi+QthGGA==", "integrity": "sha512-5L/uBxmjaCIX5h8Z+uu+kA9BQLkc/Wl06UGR5ajNRxu+/XjonB5i8JpgFMrPj3LXTCPA0pv8yxUvbUi+QthGGA==",
"tarball": "https://verdaccio.lossless.digital/@borewit/text-codec/-/text-codec-0.1.1.tgz" "tarball": "https://verdaccio.lossless.digital/@borewit/text-codec/-/text-codec-0.1.1.tgz"
}, },
"@cloudflare/workers-types@4.20251113.0": { "@cloudflare/workers-types@4.20251117.0": {
"integrity": "sha512-AMntYysoQzuc1aXLjkNLmFcuyxzCrZ/dfatnt2Lw4rf3aFtnM6RZKZ+zLhb+xjgjlrI7tzC86ay3gqYqKa2Qxg==", "integrity": "sha512-4U6phQE/qbmWuJX/0cTk3iOx9KyhWmo34okKb2BSS09UMRWLCwML+P3dnHxCHnSQij8c0orvdzMr9hyqgJGNgw==",
"tarball": "https://verdaccio.lossless.digital/@cloudflare/workers-types/-/workers-types-4.20251113.0.tgz" "tarball": "https://verdaccio.lossless.digital/@cloudflare/workers-types/-/workers-types-4.20251117.0.tgz"
}, },
"@colors/colors@1.6.0": { "@colors/colors@1.6.0": {
"integrity": "sha512-Ir+AOibqzrIsL6ajt3Rz3LskB7OiMVHqltZmspbW/TJuTVuyOMirVqAkjfY6JISiLHgyNqicAC8AyHHGzNd/dA==", "integrity": "sha512-Ir+AOibqzrIsL6ajt3Rz3LskB7OiMVHqltZmspbW/TJuTVuyOMirVqAkjfY6JISiLHgyNqicAC8AyHHGzNd/dA==",
@@ -713,8 +713,8 @@
], ],
"tarball": "https://verdaccio.lossless.digital/@design.estate/dees-comms/-/dees-comms-1.0.27.tgz" "tarball": "https://verdaccio.lossless.digital/@design.estate/dees-comms/-/dees-comms-1.0.27.tgz"
}, },
"@design.estate/dees-domtools@2.3.3": { "@design.estate/dees-domtools@2.3.6": {
"integrity": "sha512-diIRuEWNRko508+eXDGVD9yxte+50VSuSsxBvWXUnE7ZPOLo9Y0oNyVi+R1Rb1AVJiXcGCORLdCtmCIcId40VA==", "integrity": "sha512-cKaPNtSpp/ZuuXVx2dXO3K2FU3/HjC4ZkqtXb8Kl6yy9rNDbgtjcI4PuOk9Ux1SJzw7FgcxqVh7OSEV60htbmg==",
"dependencies": [ "dependencies": [
"@api.global/typedrequest", "@api.global/typedrequest",
"@design.estate/dees-comms", "@design.estate/dees-comms",
@@ -735,17 +735,17 @@
"lit", "lit",
"sweet-scroll" "sweet-scroll"
], ],
"tarball": "https://verdaccio.lossless.digital/@design.estate/dees-domtools/-/dees-domtools-2.3.3.tgz" "tarball": "https://verdaccio.lossless.digital/@design.estate/dees-domtools/-/dees-domtools-2.3.6.tgz"
}, },
"@design.estate/dees-element@2.1.2": { "@design.estate/dees-element@2.1.3": {
"integrity": "sha512-ZiwvE411RJPHaYio26asQLnSmtJ6G1HRLYWbxW/HvCMbFtrcrXysP1y4PQ9KjdNfiQ4yoWPjTtwYMJjLE0NcbA==", "integrity": "sha512-TjXWxVcdSPaT1IOk31ckfxvAZnJLuTxhFGsNCKoh63/UE2FVf6slp8//UFvN+ADigiA9ZsY0azkY99XbJCwDDA==",
"dependencies": [ "dependencies": [
"@design.estate/dees-domtools", "@design.estate/dees-domtools",
"@push.rocks/isounique", "@push.rocks/isounique",
"@push.rocks/smartrx", "@push.rocks/smartrx",
"lit" "lit"
], ],
"tarball": "https://verdaccio.lossless.digital/@design.estate/dees-element/-/dees-element-2.1.2.tgz" "tarball": "https://verdaccio.lossless.digital/@design.estate/dees-element/-/dees-element-2.1.3.tgz"
}, },
"@emnapi/core@1.7.1": { "@emnapi/core@1.7.1": {
"integrity": "sha512-o1uhUASyo921r2XtHYOHy7gdkGLge8ghBEQHMWmyJFoXlpU58kIrhhN3w26lpQb6dspetweapMn2CSNwQ8I4wg==", "integrity": "sha512-o1uhUASyo921r2XtHYOHy7gdkGLge8ghBEQHMWmyJFoXlpU58kIrhhN3w26lpQb6dspetweapMn2CSNwQ8I4wg==",
@@ -925,8 +925,8 @@
"cpu": ["x64"], "cpu": ["x64"],
"tarball": "https://verdaccio.lossless.digital/@esbuild/win32-x64/-/win32-x64-0.25.12.tgz" "tarball": "https://verdaccio.lossless.digital/@esbuild/win32-x64/-/win32-x64-0.25.12.tgz"
}, },
"@git.zone/tsbuild@2.7.1": { "@git.zone/tsbuild@3.1.0": {
"integrity": "sha512-O8TTc+LBp8hYy5+zA6AdoqdQQtVXTAd1L0gS/Ihz+QXgXvMdQKVINwpDFu6LS5NdVrGXzxnB63NQpfg5COIPnQ==", "integrity": "sha512-j8lMd84pmzWiU6NG3e+pyu0o41oo6mQVfcZv8kDsCrQwZMhoQV9Jp87MlU0i/XI5IZkqDjelG8Kx1QhOmbK+iQ==",
"dependencies": [ "dependencies": [
"@git.zone/tspublish", "@git.zone/tspublish",
"@push.rocks/early", "@push.rocks/early",
@@ -939,10 +939,10 @@
"typescript@5.9.3" "typescript@5.9.3"
], ],
"bin": true, "bin": true,
"tarball": "https://verdaccio.lossless.digital/@git.zone/tsbuild/-/tsbuild-2.7.1.tgz" "tarball": "https://verdaccio.lossless.digital/@git.zone/tsbuild/-/tsbuild-3.1.0.tgz"
}, },
"@git.zone/tsbundle@2.5.1": { "@git.zone/tsbundle@2.5.2": {
"integrity": "sha512-gBskgM3ECy9FEmhCWnQahDyFCAjjw/7emjx/KYM/FOlPqGV+hmYzt368zwSlkzOGgYF8k9OZ+mp6vexDL/+f2w==", "integrity": "sha512-EYTCfunqoxhxkowREZ+cJnww6eDh9cL18HJbHbSZ+vxzNeyS9x8mT9aqRlWkI7zgpvgDlGIYlyRUlUISXkQO6Q==",
"dependencies": [ "dependencies": [
"@push.rocks/early", "@push.rocks/early",
"@push.rocks/smartcli", "@push.rocks/smartcli",
@@ -961,7 +961,7 @@
"typescript@5.8.3" "typescript@5.8.3"
], ],
"bin": true, "bin": true,
"tarball": "https://verdaccio.lossless.digital/@git.zone/tsbundle/-/tsbundle-2.5.1.tgz" "tarball": "https://verdaccio.lossless.digital/@git.zone/tsbundle/-/tsbundle-2.5.2.tgz"
}, },
"@git.zone/tspublish@1.10.3": { "@git.zone/tspublish@1.10.3": {
"integrity": "sha512-o2/jvNsdLC8SRdH1kQ7JjNOQNu9el0FpJ/QOW3mgiC5C9reuTp18iU4kijsVVLgvw4KZv6Z289SoKPh3HPsS0g==", "integrity": "sha512-o2/jvNsdLC8SRdH1kQ7JjNOQNu9el0FpJ/QOW3mgiC5C9reuTp18iU4kijsVVLgvw4KZv6Z289SoKPh3HPsS0g==",
@@ -973,7 +973,7 @@
"@push.rocks/smartlog", "@push.rocks/smartlog",
"@push.rocks/smartnpm", "@push.rocks/smartnpm",
"@push.rocks/smartpath@6.0.0", "@push.rocks/smartpath@6.0.0",
"@push.rocks/smartrequest@4.3.4", "@push.rocks/smartrequest@4.4.2",
"@push.rocks/smartshell" "@push.rocks/smartshell"
], ],
"bin": true, "bin": true,
@@ -989,12 +989,22 @@
"bin": true, "bin": true,
"tarball": "https://verdaccio.lossless.digital/@git.zone/tsrun/-/tsrun-1.6.2.tgz" "tarball": "https://verdaccio.lossless.digital/@git.zone/tsrun/-/tsrun-1.6.2.tgz"
}, },
"@git.zone/tstest@2.7.0": { "@git.zone/tsrun@2.0.0": {
"integrity": "sha512-ET532UpIAE86Ifw4P1Y2U7AJalKxM/Q88+kKN854dXSX+s5GgnRy0ysrPcSCUkJfENEvou1b0er1xcotUKx6hw==", "integrity": "sha512-yA6zCjL+kn7xfZe6sL/m4K+zYqgkznG/pF6++i/E17iwzpG6dHmW+VZmYldHe86sW4DcLMvqM6CxM+KlgaEpKw==",
"dependencies": [
"@push.rocks/smartfile",
"@push.rocks/smartshell",
"tsx"
],
"bin": true,
"tarball": "https://verdaccio.lossless.digital/@git.zone/tsrun/-/tsrun-2.0.0.tgz"
},
"@git.zone/tstest@2.8.2": {
"integrity": "sha512-qIZFor1mT4+Xth24jbqZtrh2B2Vz2n27OVY1R22zEg4TgFldjEUVwIKz27axqK1HUA1PIw0mYn+vOgd+yMWO4w==",
"dependencies": [ "dependencies": [
"@api.global/typedserver", "@api.global/typedserver",
"@git.zone/tsbundle", "@git.zone/tsbundle",
"@git.zone/tsrun", "@git.zone/tsrun@1.6.2",
"@push.rocks/consolecolor", "@push.rocks/consolecolor",
"@push.rocks/qenv", "@push.rocks/qenv",
"@push.rocks/smartbrowser", "@push.rocks/smartbrowser",
@@ -1010,7 +1020,7 @@
"@push.rocks/smartnetwork", "@push.rocks/smartnetwork",
"@push.rocks/smartpath@6.0.0", "@push.rocks/smartpath@6.0.0",
"@push.rocks/smartpromise", "@push.rocks/smartpromise",
"@push.rocks/smartrequest@4.3.4", "@push.rocks/smartrequest@4.4.2",
"@push.rocks/smarts3", "@push.rocks/smarts3",
"@push.rocks/smartshell", "@push.rocks/smartshell",
"@push.rocks/smarttime", "@push.rocks/smarttime",
@@ -1019,7 +1029,7 @@
"ws@8.18.3" "ws@8.18.3"
], ],
"bin": true, "bin": true,
"tarball": "https://verdaccio.lossless.digital/@git.zone/tstest/-/tstest-2.7.0.tgz" "tarball": "https://verdaccio.lossless.digital/@git.zone/tstest/-/tstest-2.8.2.tgz"
}, },
"@happy-dom/global-registrator@15.11.7": { "@happy-dom/global-registrator@15.11.7": {
"integrity": "sha512-mfOoUlIw8VBiJYPrl5RZfMzkXC/z7gbSpi2ecycrj/gRWLq2CMV+Q+0G+JPjeOmuNFgg0skEIzkVFzVYFP6URw==", "integrity": "sha512-mfOoUlIw8VBiJYPrl5RZfMzkXC/z7gbSpi2ecycrj/gRWLq2CMV+Q+0G+JPjeOmuNFgg0skEIzkVFzVYFP6URw==",
@@ -1184,8 +1194,8 @@
], ],
"tarball": "https://verdaccio.lossless.digital/@pdf-lib/upng/-/upng-1.0.1.tgz" "tarball": "https://verdaccio.lossless.digital/@pdf-lib/upng/-/upng-1.0.1.tgz"
}, },
"@peculiar/asn1-cms@2.5.0": { "@peculiar/asn1-cms@2.6.0": {
"integrity": "sha512-p0SjJ3TuuleIvjPM4aYfvYw8Fk1Hn/zAVyPJZTtZ2eE9/MIer6/18ROxX6N/e6edVSfvuZBqhxAj3YgsmSjQ/A==", "integrity": "sha512-2uZqP+ggSncESeUF/9Su8rWqGclEfEiz1SyU02WX5fUONFfkjzS2Z/F1Li0ofSmf4JqYXIOdCAZqIXAIBAT1OA==",
"dependencies": [ "dependencies": [
"@peculiar/asn1-schema", "@peculiar/asn1-schema",
"@peculiar/asn1-x509", "@peculiar/asn1-x509",
@@ -1193,30 +1203,30 @@
"asn1js", "asn1js",
"tslib@2.8.1" "tslib@2.8.1"
], ],
"tarball": "https://verdaccio.lossless.digital/@peculiar/asn1-cms/-/asn1-cms-2.5.0.tgz" "tarball": "https://verdaccio.lossless.digital/@peculiar/asn1-cms/-/asn1-cms-2.6.0.tgz"
}, },
"@peculiar/asn1-csr@2.5.0": { "@peculiar/asn1-csr@2.6.0": {
"integrity": "sha512-ioigvA6WSYN9h/YssMmmoIwgl3RvZlAYx4A/9jD2qaqXZwGcNlAxaw54eSx2QG1Yu7YyBC5Rku3nNoHrQ16YsQ==", "integrity": "sha512-BeWIu5VpTIhfRysfEp73SGbwjjoLL/JWXhJ/9mo4vXnz3tRGm+NGm3KNcRzQ9VMVqwYS2RHlolz21svzRXIHPQ==",
"dependencies": [ "dependencies": [
"@peculiar/asn1-schema", "@peculiar/asn1-schema",
"@peculiar/asn1-x509", "@peculiar/asn1-x509",
"asn1js", "asn1js",
"tslib@2.8.1" "tslib@2.8.1"
], ],
"tarball": "https://verdaccio.lossless.digital/@peculiar/asn1-csr/-/asn1-csr-2.5.0.tgz" "tarball": "https://verdaccio.lossless.digital/@peculiar/asn1-csr/-/asn1-csr-2.6.0.tgz"
}, },
"@peculiar/asn1-ecc@2.5.0": { "@peculiar/asn1-ecc@2.6.0": {
"integrity": "sha512-t4eYGNhXtLRxaP50h3sfO6aJebUCDGQACoeexcelL4roMFRRVgB20yBIu2LxsPh/tdW9I282gNgMOyg3ywg/mg==", "integrity": "sha512-FF3LMGq6SfAOwUG2sKpPXblibn6XnEIKa+SryvUl5Pik+WR9rmRA3OCiwz8R3lVXnYnyRkSZsSLdml8H3UiOcw==",
"dependencies": [ "dependencies": [
"@peculiar/asn1-schema", "@peculiar/asn1-schema",
"@peculiar/asn1-x509", "@peculiar/asn1-x509",
"asn1js", "asn1js",
"tslib@2.8.1" "tslib@2.8.1"
], ],
"tarball": "https://verdaccio.lossless.digital/@peculiar/asn1-ecc/-/asn1-ecc-2.5.0.tgz" "tarball": "https://verdaccio.lossless.digital/@peculiar/asn1-ecc/-/asn1-ecc-2.6.0.tgz"
}, },
"@peculiar/asn1-pfx@2.5.0": { "@peculiar/asn1-pfx@2.6.0": {
"integrity": "sha512-Vj0d0wxJZA+Ztqfb7W+/iu8Uasw6hhKtCdLKXLG/P3kEPIQpqGI4P4YXlROfl7gOCqFIbgsj1HzFIFwQ5s20ug==", "integrity": "sha512-rtUvtf+tyKGgokHHmZzeUojRZJYPxoD/jaN1+VAB4kKR7tXrnDCA/RAWXAIhMJJC+7W27IIRGe9djvxKgsldCQ==",
"dependencies": [ "dependencies": [
"@peculiar/asn1-cms", "@peculiar/asn1-cms",
"@peculiar/asn1-pkcs8", "@peculiar/asn1-pkcs8",
@@ -1225,20 +1235,20 @@
"asn1js", "asn1js",
"tslib@2.8.1" "tslib@2.8.1"
], ],
"tarball": "https://verdaccio.lossless.digital/@peculiar/asn1-pfx/-/asn1-pfx-2.5.0.tgz" "tarball": "https://verdaccio.lossless.digital/@peculiar/asn1-pfx/-/asn1-pfx-2.6.0.tgz"
}, },
"@peculiar/asn1-pkcs8@2.5.0": { "@peculiar/asn1-pkcs8@2.6.0": {
"integrity": "sha512-L7599HTI2SLlitlpEP8oAPaJgYssByI4eCwQq2C9eC90otFpm8MRn66PpbKviweAlhinWQ3ZjDD2KIVtx7PaVw==", "integrity": "sha512-KyQ4D8G/NrS7Fw3XCJrngxmjwO/3htnA0lL9gDICvEQ+GJ+EPFqldcJQTwPIdvx98Tua+WjkdKHSC0/Km7T+lA==",
"dependencies": [ "dependencies": [
"@peculiar/asn1-schema", "@peculiar/asn1-schema",
"@peculiar/asn1-x509", "@peculiar/asn1-x509",
"asn1js", "asn1js",
"tslib@2.8.1" "tslib@2.8.1"
], ],
"tarball": "https://verdaccio.lossless.digital/@peculiar/asn1-pkcs8/-/asn1-pkcs8-2.5.0.tgz" "tarball": "https://verdaccio.lossless.digital/@peculiar/asn1-pkcs8/-/asn1-pkcs8-2.6.0.tgz"
}, },
"@peculiar/asn1-pkcs9@2.5.0": { "@peculiar/asn1-pkcs9@2.6.0": {
"integrity": "sha512-UgqSMBLNLR5TzEZ5ZzxR45Nk6VJrammxd60WMSkofyNzd3DQLSNycGWSK5Xg3UTYbXcDFyG8pA/7/y/ztVCa6A==", "integrity": "sha512-b78OQ6OciW0aqZxdzliXGYHASeCvvw5caqidbpQRYW2mBtXIX2WhofNXTEe7NyxTb0P6J62kAAWLwn0HuMF1Fw==",
"dependencies": [ "dependencies": [
"@peculiar/asn1-cms", "@peculiar/asn1-cms",
"@peculiar/asn1-pfx", "@peculiar/asn1-pfx",
@@ -1249,49 +1259,49 @@
"asn1js", "asn1js",
"tslib@2.8.1" "tslib@2.8.1"
], ],
"tarball": "https://verdaccio.lossless.digital/@peculiar/asn1-pkcs9/-/asn1-pkcs9-2.5.0.tgz" "tarball": "https://verdaccio.lossless.digital/@peculiar/asn1-pkcs9/-/asn1-pkcs9-2.6.0.tgz"
}, },
"@peculiar/asn1-rsa@2.5.0": { "@peculiar/asn1-rsa@2.6.0": {
"integrity": "sha512-qMZ/vweiTHy9syrkkqWFvbT3eLoedvamcUdnnvwyyUNv5FgFXA3KP8td+ATibnlZ0EANW5PYRm8E6MJzEB/72Q==", "integrity": "sha512-Nu4C19tsrTsCp9fDrH+sdcOKoVfdfoQQ7S3VqjJU6vedR7tY3RLkQ5oguOIB3zFW33USDUuYZnPEQYySlgha4w==",
"dependencies": [ "dependencies": [
"@peculiar/asn1-schema", "@peculiar/asn1-schema",
"@peculiar/asn1-x509", "@peculiar/asn1-x509",
"asn1js", "asn1js",
"tslib@2.8.1" "tslib@2.8.1"
], ],
"tarball": "https://verdaccio.lossless.digital/@peculiar/asn1-rsa/-/asn1-rsa-2.5.0.tgz" "tarball": "https://verdaccio.lossless.digital/@peculiar/asn1-rsa/-/asn1-rsa-2.6.0.tgz"
}, },
"@peculiar/asn1-schema@2.5.0": { "@peculiar/asn1-schema@2.6.0": {
"integrity": "sha512-YM/nFfskFJSlHqv59ed6dZlLZqtZQwjRVJ4bBAiWV08Oc+1rSd5lDZcBEx0lGDHfSoH3UziI2pXt2UM33KerPQ==", "integrity": "sha512-xNLYLBFTBKkCzEZIw842BxytQQATQv+lDTCEMZ8C196iJcJJMBUZxrhSTxLaohMyKK8QlzRNTRkUmanucnDSqg==",
"dependencies": [ "dependencies": [
"asn1js", "asn1js",
"pvtsutils", "pvtsutils",
"tslib@2.8.1" "tslib@2.8.1"
], ],
"tarball": "https://verdaccio.lossless.digital/@peculiar/asn1-schema/-/asn1-schema-2.5.0.tgz" "tarball": "https://verdaccio.lossless.digital/@peculiar/asn1-schema/-/asn1-schema-2.6.0.tgz"
}, },
"@peculiar/asn1-x509-attr@2.5.0": { "@peculiar/asn1-x509-attr@2.6.0": {
"integrity": "sha512-9f0hPOxiJDoG/bfNLAFven+Bd4gwz/VzrCIIWc1025LEI4BXO0U5fOCTNDPbbp2ll+UzqKsZ3g61mpBp74gk9A==", "integrity": "sha512-MuIAXFX3/dc8gmoZBkwJWxUWOSvG4MMDntXhrOZpJVMkYX+MYc/rUAU2uJOved9iJEoiUx7//3D8oG83a78UJA==",
"dependencies": [ "dependencies": [
"@peculiar/asn1-schema", "@peculiar/asn1-schema",
"@peculiar/asn1-x509", "@peculiar/asn1-x509",
"asn1js", "asn1js",
"tslib@2.8.1" "tslib@2.8.1"
], ],
"tarball": "https://verdaccio.lossless.digital/@peculiar/asn1-x509-attr/-/asn1-x509-attr-2.5.0.tgz" "tarball": "https://verdaccio.lossless.digital/@peculiar/asn1-x509-attr/-/asn1-x509-attr-2.6.0.tgz"
}, },
"@peculiar/asn1-x509@2.5.0": { "@peculiar/asn1-x509@2.6.0": {
"integrity": "sha512-CpwtMCTJvfvYTFMuiME5IH+8qmDe3yEWzKHe7OOADbGfq7ohxeLaXwQo0q4du3qs0AII3UbLCvb9NF/6q0oTKQ==", "integrity": "sha512-uzYbPEpoQiBoTq0/+jZtpM6Gq6zADBx+JNFP3yqRgziWBxQ/Dt/HcuvRfm9zJTPdRcBqPNdaRHTVwpyiq6iNMA==",
"dependencies": [ "dependencies": [
"@peculiar/asn1-schema", "@peculiar/asn1-schema",
"asn1js", "asn1js",
"pvtsutils", "pvtsutils",
"tslib@2.8.1" "tslib@2.8.1"
], ],
"tarball": "https://verdaccio.lossless.digital/@peculiar/asn1-x509/-/asn1-x509-2.5.0.tgz" "tarball": "https://verdaccio.lossless.digital/@peculiar/asn1-x509/-/asn1-x509-2.6.0.tgz"
}, },
"@peculiar/x509@1.14.0": { "@peculiar/x509@1.14.2": {
"integrity": "sha512-Yc4PDxN3OrxUPiXgU63c+ZRXKGE8YKF2McTciYhUHFtHVB0KMnjeFSU0qpztGhsp4P0uKix4+J2xEpIEDu8oXg==", "integrity": "sha512-r2w1Hg6pODDs0zfAKHkSS5HLkOLSeburtcgwvlLLWWCixw+MmW3U6kD5ddyvc2Y2YdbGuVwCF2S2ASoU1cFAag==",
"dependencies": [ "dependencies": [
"@peculiar/asn1-cms", "@peculiar/asn1-cms",
"@peculiar/asn1-csr", "@peculiar/asn1-csr",
@@ -1305,7 +1315,7 @@
"tslib@2.8.1", "tslib@2.8.1",
"tsyringe" "tsyringe"
], ],
"tarball": "https://verdaccio.lossless.digital/@peculiar/x509/-/x509-1.14.0.tgz" "tarball": "https://verdaccio.lossless.digital/@peculiar/x509/-/x509-1.14.2.tgz"
}, },
"@pnpm/config.env-replace@1.1.0": { "@pnpm/config.env-replace@1.1.0": {
"integrity": "sha512-htyl8TWnKL7K/ESFa1oW2UB5lVDxuF5DpM7tBi6Hu2LNL3mWkIzNLG6N4zoCUP1lCKNxWy/3iu8mS8MvToGd6w==", "integrity": "sha512-htyl8TWnKL7K/ESFa1oW2UB5lVDxuF5DpM7tBi6Hu2LNL3mWkIzNLG6N4zoCUP1lCKNxWy/3iu8mS8MvToGd6w==",
@@ -1432,7 +1442,7 @@
"@push.rocks/smartfile", "@push.rocks/smartfile",
"@push.rocks/smartpath@6.0.0", "@push.rocks/smartpath@6.0.0",
"@push.rocks/smartpromise", "@push.rocks/smartpromise",
"@push.rocks/smartrequest@4.3.4", "@push.rocks/smartrequest@4.4.2",
"@push.rocks/smartrx", "@push.rocks/smartrx",
"@push.rocks/smartstream", "@push.rocks/smartstream",
"@push.rocks/smartunique", "@push.rocks/smartunique",
@@ -1532,8 +1542,8 @@
], ],
"tarball": "https://verdaccio.lossless.digital/@push.rocks/smartcrypto/-/smartcrypto-2.0.4.tgz" "tarball": "https://verdaccio.lossless.digital/@push.rocks/smartcrypto/-/smartcrypto-2.0.4.tgz"
}, },
"@push.rocks/smartdata@5.16.4": { "@push.rocks/smartdata@5.16.7": {
"integrity": "sha512-COiKw8yk9iAcLN44WmZHG8Gi0v+HGkgM8Osoq7Cns+UsOA+grPepqbN2r0XPG1fm5vOdJcaydi2ZU0xrnbGVvQ==", "integrity": "sha512-bu/YSIjQcwxWXkAsuhqE6zs7eT+bTIKV8+/H7TbbjpzeioLCyB3dZ/41cLZk37c/EYt4d4GHgZ0ww80OiKOUMg==",
"dependencies": [ "dependencies": [
"@push.rocks/lik", "@push.rocks/lik",
"@push.rocks/smartdelay", "@push.rocks/smartdelay",
@@ -1548,7 +1558,7 @@
"@tsclass/tsclass@9.3.0", "@tsclass/tsclass@9.3.0",
"mongodb" "mongodb"
], ],
"tarball": "https://verdaccio.lossless.digital/@push.rocks/smartdata/-/smartdata-5.16.4.tgz" "tarball": "https://verdaccio.lossless.digital/@push.rocks/smartdata/-/smartdata-5.16.7.tgz"
}, },
"@push.rocks/smartdelay@3.0.5": { "@push.rocks/smartdelay@3.0.5": {
"integrity": "sha512-mUuI7kj2f7ztjpic96FvRIlf2RsKBa5arw81AHNsndbxO6asRcxuWL8dTVxouEIK8YsBUlj0AsrCkHhMbLQdHw==", "integrity": "sha512-mUuI7kj2f7ztjpic96FvRIlf2RsKBa5arw81AHNsndbxO6asRcxuWL8dTVxouEIK8YsBUlj0AsrCkHhMbLQdHw==",
@@ -1638,7 +1648,7 @@
"@push.rocks/smartmime", "@push.rocks/smartmime",
"@push.rocks/smartpath@6.0.0", "@push.rocks/smartpath@6.0.0",
"@push.rocks/smartpromise", "@push.rocks/smartpromise",
"@push.rocks/smartrequest@4.3.4", "@push.rocks/smartrequest@4.4.2",
"@push.rocks/smartstream", "@push.rocks/smartstream",
"@types/fs-extra", "@types/fs-extra",
"@types/js-yaml@4.0.9", "@types/js-yaml@4.0.9",
@@ -1753,8 +1763,8 @@
], ],
"tarball": "https://verdaccio.lossless.digital/@push.rocks/smartmime/-/smartmime-2.0.4.tgz" "tarball": "https://verdaccio.lossless.digital/@push.rocks/smartmime/-/smartmime-2.0.4.tgz"
}, },
"@push.rocks/smartmongo@2.0.12": { "@push.rocks/smartmongo@2.0.14": {
"integrity": "sha512-NglYiO14BikxnlvW6JF18FtopBtaWQEGAtPxHmmSCbyhU8Mi0aEFO7VgCasE9Kguba/wcR597qhcDEdcpBg1eQ==", "integrity": "sha512-fvfPeCDDy5JaDBpVnsMKednsOoRzuYC0OszO8OoLOX/RaR755zIbRppCCK8Cez0hqd6eNkJGQeWdX/vXlJOPBA==",
"dependencies": [ "dependencies": [
"@push.rocks/mongodump", "@push.rocks/mongodump",
"@push.rocks/smartdata", "@push.rocks/smartdata",
@@ -1762,7 +1772,7 @@
"@push.rocks/smartpromise", "@push.rocks/smartpromise",
"mongodb-memory-server" "mongodb-memory-server"
], ],
"tarball": "https://verdaccio.lossless.digital/@push.rocks/smartmongo/-/smartmongo-2.0.12.tgz" "tarball": "https://verdaccio.lossless.digital/@push.rocks/smartmongo/-/smartmongo-2.0.14.tgz"
}, },
"@push.rocks/smartnetwork@4.4.0": { "@push.rocks/smartnetwork@4.4.0": {
"integrity": "sha512-OvFtz41cvQ7lcXwaIOhghNUUlNoMxvwKDctbDvMyuZyEH08SpLjhyv2FuKbKL/mgwA/WxakTbohoC8SW7t+kiw==", "integrity": "sha512-OvFtz41cvQ7lcXwaIOhghNUUlNoMxvwKDctbDvMyuZyEH08SpLjhyv2FuKbKL/mgwA/WxakTbohoC8SW7t+kiw==",
@@ -1785,7 +1795,7 @@
"@push.rocks/smartfile", "@push.rocks/smartfile",
"@push.rocks/smartpath@6.0.0", "@push.rocks/smartpath@6.0.0",
"@push.rocks/smartpromise", "@push.rocks/smartpromise",
"@push.rocks/smartrequest@4.3.4", "@push.rocks/smartrequest@4.4.2",
"@push.rocks/smarttime", "@push.rocks/smarttime",
"@push.rocks/smartversion", "@push.rocks/smartversion",
"package-json" "package-json"
@@ -1876,17 +1886,17 @@
], ],
"tarball": "https://verdaccio.lossless.digital/@push.rocks/smartrequest/-/smartrequest-2.1.0.tgz" "tarball": "https://verdaccio.lossless.digital/@push.rocks/smartrequest/-/smartrequest-2.1.0.tgz"
}, },
"@push.rocks/smartrequest@4.3.4": { "@push.rocks/smartrequest@4.4.2": {
"integrity": "sha512-b8UH4CS2QTccOjvmIJetOqK26eVz0CuCTkJdJDVU8j34KqPGpaWzn/4D3j3DCsTYRkAqr5nSjkzAFgCJj8eIiA==", "integrity": "sha512-Om4y1Ce4YdSu8VoXREz2SgFz9pDxcFEm0+SC1YYa3RXd0AH2Mknaj/1XfvfMqojnK9L7N2z1fY4xX8tO1IwqFQ==",
"dependencies": [ "dependencies": [
"@push.rocks/smartenv@5.0.13", "@push.rocks/smartenv@6.0.0",
"@push.rocks/smartpath@6.0.0", "@push.rocks/smartpath@6.0.0",
"@push.rocks/smartpromise", "@push.rocks/smartpromise",
"@push.rocks/smarturl", "@push.rocks/smarturl",
"agentkeepalive", "agentkeepalive",
"form-data" "form-data"
], ],
"tarball": "https://verdaccio.lossless.digital/@push.rocks/smartrequest/-/smartrequest-4.3.4.tgz" "tarball": "https://verdaccio.lossless.digital/@push.rocks/smartrequest/-/smartrequest-4.4.2.tgz"
}, },
"@push.rocks/smartrouter@1.3.3": { "@push.rocks/smartrouter@1.3.3": {
"integrity": "sha512-1+xZEnWlhzqLWAaJ1zFNhQ0zgbfCWQl1DBT72LygLxTs+P0K8AwJKgqo/IX6CT55kGCFnPAZIYSbVJlGsgrB0w==", "integrity": "sha512-1+xZEnWlhzqLWAaJ1zFNhQ0zgbfCWQl1DBT72LygLxTs+P0K8AwJKgqo/IX6CT55kGCFnPAZIYSbVJlGsgrB0w==",
@@ -2048,7 +2058,7 @@
"integrity": "sha512-tBcf+HaOIfeEsTMwgUZDtZERCxXQyRsWO8Ar5DjBdiSRchbhVGZQEBzXswMS0W5ZoRenjgPK+4tPW3JQGRTfbg==", "integrity": "sha512-tBcf+HaOIfeEsTMwgUZDtZERCxXQyRsWO8Ar5DjBdiSRchbhVGZQEBzXswMS0W5ZoRenjgPK+4tPW3JQGRTfbg==",
"dependencies": [ "dependencies": [
"@types/js-yaml@3.12.10", "@types/js-yaml@3.12.10",
"js-yaml@3.14.1" "js-yaml@3.14.2"
], ],
"tarball": "https://verdaccio.lossless.digital/@push.rocks/smartyaml/-/smartyaml-2.0.5.tgz" "tarball": "https://verdaccio.lossless.digital/@push.rocks/smartyaml/-/smartyaml-2.0.5.tgz"
}, },
@@ -2402,8 +2412,8 @@
], ],
"tarball": "https://verdaccio.lossless.digital/@smithy/config-resolver/-/config-resolver-4.4.3.tgz" "tarball": "https://verdaccio.lossless.digital/@smithy/config-resolver/-/config-resolver-4.4.3.tgz"
}, },
"@smithy/core@3.18.3": { "@smithy/core@3.18.4": {
"integrity": "sha512-qqpNskkbHOSfrbFbjhYj5o8VMXO26fvN1K/+HbCzUNlTuxgNcPRouUDNm+7D6CkN244WG7aK533Ne18UtJEgAA==", "integrity": "sha512-o5tMqPZILBvvROfC8vC+dSVnWJl9a0u9ax1i1+Bq8515eYjUJqqk5XjjEsDLoeL5dSqGSh6WGdVx1eJ1E/Nwhw==",
"dependencies": [ "dependencies": [
"@smithy/middleware-serde", "@smithy/middleware-serde",
"@smithy/protocol-http", "@smithy/protocol-http",
@@ -2416,7 +2426,7 @@
"@smithy/uuid", "@smithy/uuid",
"tslib@2.8.1" "tslib@2.8.1"
], ],
"tarball": "https://verdaccio.lossless.digital/@smithy/core/-/core-3.18.3.tgz" "tarball": "https://verdaccio.lossless.digital/@smithy/core/-/core-3.18.4.tgz"
}, },
"@smithy/credential-provider-imds@4.2.5": { "@smithy/credential-provider-imds@4.2.5": {
"integrity": "sha512-BZwotjoZWn9+36nimwm/OLIcVe+KYRwzMjfhd4QT7QxPm9WY0HiOV8t/Wlh+HVUif0SBVV7ksq8//hPaBC/okQ==", "integrity": "sha512-BZwotjoZWn9+36nimwm/OLIcVe+KYRwzMjfhd4QT7QxPm9WY0HiOV8t/Wlh+HVUif0SBVV7ksq8//hPaBC/okQ==",
@@ -2554,8 +2564,8 @@
], ],
"tarball": "https://verdaccio.lossless.digital/@smithy/middleware-content-length/-/middleware-content-length-4.2.5.tgz" "tarball": "https://verdaccio.lossless.digital/@smithy/middleware-content-length/-/middleware-content-length-4.2.5.tgz"
}, },
"@smithy/middleware-endpoint@4.3.10": { "@smithy/middleware-endpoint@4.3.11": {
"integrity": "sha512-SoAag3QnWBFoXjwa1jenEThkzJYClidZUyqsLKwWZ8kOlZBwehrLBp4ygVDjNEM2a2AamCQ2FBA/HuzKJ/LiTA==", "integrity": "sha512-eJXq9VJzEer1W7EQh3HY2PDJdEcEUnv6sKuNt4eVjyeNWcQFS4KmnY+CKkYOIR6tSqarn6bjjCqg1UB+8UJiPQ==",
"dependencies": [ "dependencies": [
"@smithy/core", "@smithy/core",
"@smithy/middleware-serde", "@smithy/middleware-serde",
@@ -2566,10 +2576,10 @@
"@smithy/util-middleware", "@smithy/util-middleware",
"tslib@2.8.1" "tslib@2.8.1"
], ],
"tarball": "https://verdaccio.lossless.digital/@smithy/middleware-endpoint/-/middleware-endpoint-4.3.10.tgz" "tarball": "https://verdaccio.lossless.digital/@smithy/middleware-endpoint/-/middleware-endpoint-4.3.11.tgz"
}, },
"@smithy/middleware-retry@4.4.10": { "@smithy/middleware-retry@4.4.11": {
"integrity": "sha512-6fOwX34gXxcqKa3bsG0mR0arc2Cw4ddOS6tp3RgUD2yoTrDTbQ2aVADnDjhUuxaiDZN2iilxndgGDhnpL/XvJA==", "integrity": "sha512-EL5OQHvFOKneJVRgzRW4lU7yidSwp/vRJOe542bHgExN3KNThr1rlg0iE4k4SnA+ohC+qlUxoK+smKeAYPzfAQ==",
"dependencies": [ "dependencies": [
"@smithy/node-config-provider", "@smithy/node-config-provider",
"@smithy/protocol-http", "@smithy/protocol-http",
@@ -2581,16 +2591,16 @@
"@smithy/uuid", "@smithy/uuid",
"tslib@2.8.1" "tslib@2.8.1"
], ],
"tarball": "https://verdaccio.lossless.digital/@smithy/middleware-retry/-/middleware-retry-4.4.10.tgz" "tarball": "https://verdaccio.lossless.digital/@smithy/middleware-retry/-/middleware-retry-4.4.11.tgz"
}, },
"@smithy/middleware-serde@4.2.5": { "@smithy/middleware-serde@4.2.6": {
"integrity": "sha512-La1ldWTJTZ5NqQyPqnCNeH9B+zjFhrNoQIL1jTh4zuqXRlmXhxYHhMtI1/92OlnoAtp6JoN7kzuwhWoXrBwPqg==", "integrity": "sha512-VkLoE/z7e2g8pirwisLz8XJWedUSY8my/qrp81VmAdyrhi94T+riBfwP+AOEEFR9rFTSonC/5D2eWNmFabHyGQ==",
"dependencies": [ "dependencies": [
"@smithy/protocol-http", "@smithy/protocol-http",
"@smithy/types", "@smithy/types",
"tslib@2.8.1" "tslib@2.8.1"
], ],
"tarball": "https://verdaccio.lossless.digital/@smithy/middleware-serde/-/middleware-serde-4.2.5.tgz" "tarball": "https://verdaccio.lossless.digital/@smithy/middleware-serde/-/middleware-serde-4.2.6.tgz"
}, },
"@smithy/middleware-stack@4.2.5": { "@smithy/middleware-stack@4.2.5": {
"integrity": "sha512-bYrutc+neOyWxtZdbB2USbQttZN0mXaOyYLIsaTbJhFsfpXyGWUxJpEuO1rJ8IIJm2qH4+xJT0mxUSsEDTYwdQ==", "integrity": "sha512-bYrutc+neOyWxtZdbB2USbQttZN0mXaOyYLIsaTbJhFsfpXyGWUxJpEuO1rJ8IIJm2qH4+xJT0mxUSsEDTYwdQ==",
@@ -2683,8 +2693,8 @@
], ],
"tarball": "https://verdaccio.lossless.digital/@smithy/signature-v4/-/signature-v4-5.3.5.tgz" "tarball": "https://verdaccio.lossless.digital/@smithy/signature-v4/-/signature-v4-5.3.5.tgz"
}, },
"@smithy/smithy-client@4.9.6": { "@smithy/smithy-client@4.9.7": {
"integrity": "sha512-hGz42hggqReicRRZUvrKDQiAmoJnx1Q+XfAJnYAGu544gOfxQCAC3hGGD7+Px2gEUUxB/kKtQV7LOtBRNyxteQ==", "integrity": "sha512-pskaE4kg0P9xNQWihfqlTMyxyFR3CH6Sr6keHYghgyqqDXzjl2QJg5lAzuVe/LzZiOzcbcVtxKYi1/fZPt/3DA==",
"dependencies": [ "dependencies": [
"@smithy/core", "@smithy/core",
"@smithy/middleware-endpoint", "@smithy/middleware-endpoint",
@@ -2694,7 +2704,7 @@
"@smithy/util-stream", "@smithy/util-stream",
"tslib@2.8.1" "tslib@2.8.1"
], ],
"tarball": "https://verdaccio.lossless.digital/@smithy/smithy-client/-/smithy-client-4.9.6.tgz" "tarball": "https://verdaccio.lossless.digital/@smithy/smithy-client/-/smithy-client-4.9.7.tgz"
}, },
"@smithy/types@4.9.0": { "@smithy/types@4.9.0": {
"integrity": "sha512-MvUbdnXDTwykR8cB1WZvNNwqoWVaTRA0RLlLmf/cIFNMM2cKWz01X4Ly6SMC4Kks30r8tT3Cty0jmeWfiuyHTA==", "integrity": "sha512-MvUbdnXDTwykR8cB1WZvNNwqoWVaTRA0RLlLmf/cIFNMM2cKWz01X4Ly6SMC4Kks30r8tT3Cty0jmeWfiuyHTA==",
@@ -2758,18 +2768,18 @@
], ],
"tarball": "https://verdaccio.lossless.digital/@smithy/util-config-provider/-/util-config-provider-4.2.0.tgz" "tarball": "https://verdaccio.lossless.digital/@smithy/util-config-provider/-/util-config-provider-4.2.0.tgz"
}, },
"@smithy/util-defaults-mode-browser@4.3.9": { "@smithy/util-defaults-mode-browser@4.3.10": {
"integrity": "sha512-Bh5bU40BgdkXE2BcaNazhNtEXi1TC0S+1d84vUwv5srWfvbeRNUKFzwKQgC6p6MXPvEgw+9+HdX3pOwT6ut5aw==", "integrity": "sha512-3iA3JVO1VLrP21FsZZpMCeF93aqP3uIOMvymAT3qHIJz2YlgDeRvNUspFwCNqd/j3qqILQJGtsVQnJZICh/9YA==",
"dependencies": [ "dependencies": [
"@smithy/property-provider", "@smithy/property-provider",
"@smithy/smithy-client", "@smithy/smithy-client",
"@smithy/types", "@smithy/types",
"tslib@2.8.1" "tslib@2.8.1"
], ],
"tarball": "https://verdaccio.lossless.digital/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-4.3.9.tgz" "tarball": "https://verdaccio.lossless.digital/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-4.3.10.tgz"
}, },
"@smithy/util-defaults-mode-node@4.2.12": { "@smithy/util-defaults-mode-node@4.2.13": {
"integrity": "sha512-EHZwe1E9Q7umImIyCKQg/Cm+S+7rjXxCRvfGmKifqwYvn7M8M4ZcowwUOQzvuuxUUmdzCkqL0Eq0z1m74Pq6pw==", "integrity": "sha512-PTc6IpnpSGASuzZAgyUtaVfOFpU0jBD2mcGwrgDuHf7PlFgt5TIPxCYBDbFQs06jxgeV3kd/d/sok1pzV0nJRg==",
"dependencies": [ "dependencies": [
"@smithy/config-resolver", "@smithy/config-resolver",
"@smithy/credential-provider-imds", "@smithy/credential-provider-imds",
@@ -2779,7 +2789,7 @@
"@smithy/types", "@smithy/types",
"tslib@2.8.1" "tslib@2.8.1"
], ],
"tarball": "https://verdaccio.lossless.digital/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-4.2.12.tgz" "tarball": "https://verdaccio.lossless.digital/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-4.2.13.tgz"
}, },
"@smithy/util-endpoints@3.2.5": { "@smithy/util-endpoints@3.2.5": {
"integrity": "sha512-3O63AAWu2cSNQZp+ayl9I3NapW1p1rR5mlVHcF6hAB1dPZUQFfRPYtplWX/3xrzWthPGj5FqB12taJJCfH6s8A==", "integrity": "sha512-3O63AAWu2cSNQZp+ayl9I3NapW1p1rR5mlVHcF6hAB1dPZUQFfRPYtplWX/3xrzWthPGj5FqB12taJJCfH6s8A==",
@@ -3649,12 +3659,12 @@
], ],
"tarball": "https://verdaccio.lossless.digital/color-convert/-/color-convert-2.0.1.tgz" "tarball": "https://verdaccio.lossless.digital/color-convert/-/color-convert-2.0.1.tgz"
}, },
"color-convert@3.1.2": { "color-convert@3.1.3": {
"integrity": "sha512-UNqkvCDXstVck3kdowtOTWROIJQwafjOfXSmddoDrXo4cewMKmusCeF22Q24zvjR8nwWib/3S/dfyzPItPEiJg==", "integrity": "sha512-fasDH2ont2GqF5HpyO4w0+BcewlhHEZOFn9c1ckZdHpJ56Qb7MHhH/IcJZbBGgvdtwdwNbLvxiBEdg336iA9Sg==",
"dependencies": [ "dependencies": [
"color-name@2.0.2" "color-name@2.1.0"
], ],
"tarball": "https://verdaccio.lossless.digital/color-convert/-/color-convert-3.1.2.tgz" "tarball": "https://verdaccio.lossless.digital/color-convert/-/color-convert-3.1.3.tgz"
}, },
"color-name@1.1.3": { "color-name@1.1.3": {
"integrity": "a7d0558bd89c42f795dd42328f740831ca53bc25", "integrity": "a7d0558bd89c42f795dd42328f740831ca53bc25",
@@ -3664,24 +3674,24 @@
"integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
"tarball": "https://verdaccio.lossless.digital/color-name/-/color-name-1.1.4.tgz" "tarball": "https://verdaccio.lossless.digital/color-name/-/color-name-1.1.4.tgz"
}, },
"color-name@2.0.2": { "color-name@2.1.0": {
"integrity": "sha512-9vEt7gE16EW7Eu7pvZnR0abW9z6ufzhXxGXZEVU9IqPdlsUiMwJeJfRtq0zePUmnbHGT9zajca7mX8zgoayo4A==", "integrity": "sha512-1bPaDNFm0axzE4MEAzKPuqKWeRaT43U/hyxKPBdqTfmPF+d6n7FSoTFxLVULUJOmiLp01KjhIPPH+HrXZJN4Rg==",
"tarball": "https://verdaccio.lossless.digital/color-name/-/color-name-2.0.2.tgz" "tarball": "https://verdaccio.lossless.digital/color-name/-/color-name-2.1.0.tgz"
}, },
"color-string@2.1.2": { "color-string@2.1.4": {
"integrity": "sha512-RxmjYxbWemV9gKu4zPgiZagUxbH3RQpEIO77XoSSX0ivgABDZ+h8Zuash/EMFLTI4N9QgFPOJ6JQpPZKFxa+dA==", "integrity": "sha512-Bb6Cq8oq0IjDOe8wJmi4JeNn763Xs9cfrBcaylK1tPypWzyoy2G3l90v9k64kjphl/ZJjPIShFztenRomi8WTg==",
"dependencies": [ "dependencies": [
"color-name@2.0.2" "color-name@2.1.0"
], ],
"tarball": "https://verdaccio.lossless.digital/color-string/-/color-string-2.1.2.tgz" "tarball": "https://verdaccio.lossless.digital/color-string/-/color-string-2.1.4.tgz"
}, },
"color@5.0.2": { "color@5.0.3": {
"integrity": "sha512-e2hz5BzbUPcYlIRHo8ieAhYgoajrJr+hWoceg6E345TPsATMUKqDgzt8fSXZJJbxfpiPzkWyphz8yn8At7q3fA==", "integrity": "sha512-ezmVcLR3xAVp8kYOm4GS45ZLLgIE6SPAFoduLr6hTDajwb3KZ2F46gulK3XpcwRFb5KKGCSezCBAY4Dw4HsyXA==",
"dependencies": [ "dependencies": [
"color-convert@3.1.2", "color-convert@3.1.3",
"color-string" "color-string"
], ],
"tarball": "https://verdaccio.lossless.digital/color/-/color-5.0.2.tgz" "tarball": "https://verdaccio.lossless.digital/color/-/color-5.0.3.tgz"
}, },
"combined-stream@1.0.8": { "combined-stream@1.0.8": {
"integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==",
@@ -4351,8 +4361,8 @@
"integrity": "sha512-yDYSgNMraqvnxiEXO4hi88+YZxaHC6QKzb5N84iRCTDeRO7ZALpir/lVmf/uXUhnwUr2O4HU8s/n6x+yNjQkHw==", "integrity": "sha512-yDYSgNMraqvnxiEXO4hi88+YZxaHC6QKzb5N84iRCTDeRO7ZALpir/lVmf/uXUhnwUr2O4HU8s/n6x+yNjQkHw==",
"tarball": "https://verdaccio.lossless.digital/form-data-encoder/-/form-data-encoder-2.1.4.tgz" "tarball": "https://verdaccio.lossless.digital/form-data-encoder/-/form-data-encoder-2.1.4.tgz"
}, },
"form-data@4.0.4": { "form-data@4.0.5": {
"integrity": "sha512-KrGhL9Q4zjj0kiUt5OO4Mr/A/jlI2jDYs5eHBpYHPcBEVSiipAvn2Ko2HnPe20rmcuuvMHNdZFp+4IlGTMF0Ow==", "integrity": "sha512-8RipRLol37bNs2bhoV67fiTEvdTrbMUYcFTiy3+wuuOnUog2QBHCZWXDRijWQfAkhBj2Uf5UnVaiWwA5vdd82w==",
"dependencies": [ "dependencies": [
"asynckit", "asynckit",
"combined-stream", "combined-stream",
@@ -4360,7 +4370,7 @@
"hasown", "hasown",
"mime-types@2.1.35" "mime-types@2.1.35"
], ],
"tarball": "https://verdaccio.lossless.digital/form-data/-/form-data-4.0.4.tgz" "tarball": "https://verdaccio.lossless.digital/form-data/-/form-data-4.0.5.tgz"
}, },
"format@0.2.2": { "format@0.2.2": {
"integrity": "d6170107e9efdc4ed30c9dc39016df942b5cb58b", "integrity": "d6170107e9efdc4ed30c9dc39016df942b5cb58b",
@@ -4753,9 +4763,9 @@
"integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==",
"tarball": "https://verdaccio.lossless.digital/ini/-/ini-1.3.8.tgz" "tarball": "https://verdaccio.lossless.digital/ini/-/ini-1.3.8.tgz"
}, },
"ip-address@10.0.1": { "ip-address@10.1.0": {
"integrity": "sha512-NWv9YLW4PoW2B7xtzaS3NCot75m6nK7Icdv0o3lfMceJVRfSoQwqD4wEH5rLwoKJwUiZ/rfpiVBhnaF0FK4HoA==", "integrity": "sha512-XXADHxXmvT9+CRxhXg56LJovE+bmWnEWB78LB83VZTprKTmaC5QfruXocxzTZ2Kl0DNwKuBdlIhjL8LeY8Sf8Q==",
"tarball": "https://verdaccio.lossless.digital/ip-address/-/ip-address-10.0.1.tgz" "tarball": "https://verdaccio.lossless.digital/ip-address/-/ip-address-10.1.0.tgz"
}, },
"ipaddr.js@1.9.1": { "ipaddr.js@1.9.1": {
"integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==",
@@ -4878,6 +4888,15 @@
"bin": true, "bin": true,
"tarball": "https://verdaccio.lossless.digital/js-yaml/-/js-yaml-3.14.1.tgz" "tarball": "https://verdaccio.lossless.digital/js-yaml/-/js-yaml-3.14.1.tgz"
}, },
"js-yaml@3.14.2": {
"integrity": "sha512-PMSmkqxr106Xa156c2M265Z+FTrPl+oxd/rgOQy2tijQeK5TxQ43psO1ZCwhVOSdnn+RzkzlRz/eY4BgJBYVpg==",
"dependencies": [
"argparse@1.0.10",
"esprima"
],
"bin": true,
"tarball": "https://verdaccio.lossless.digital/js-yaml/-/js-yaml-3.14.2.tgz"
},
"js-yaml@4.1.1": { "js-yaml@4.1.1": {
"integrity": "sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==", "integrity": "sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==",
"dependencies": [ "dependencies": [
@@ -7172,16 +7191,16 @@
"workspace": { "workspace": {
"packageJson": { "packageJson": {
"dependencies": [ "dependencies": [
"npm:@git.zone/tsbuild@^2.7.1", "npm:@git.zone/tsbuild@^3.1.0",
"npm:@git.zone/tsrun@^1.6.2", "npm:@git.zone/tsrun@2",
"npm:@git.zone/tstest@^2.7.0", "npm:@git.zone/tstest@^2.8.2",
"npm:@push.rocks/smartenv@6", "npm:@push.rocks/smartenv@6",
"npm:@push.rocks/smartpath@6", "npm:@push.rocks/smartpath@6",
"npm:@push.rocks/smartpromise@^4.0.4", "npm:@push.rocks/smartpromise@^4.0.4",
"npm:@push.rocks/smarturl@^3.1.0", "npm:@push.rocks/smarturl@^3.1.0",
"npm:@types/node@^22.9.0", "npm:@types/node@^22.9.0",
"npm:agentkeepalive@^4.5.0", "npm:agentkeepalive@^4.5.0",
"npm:form-data@^4.0.4" "npm:form-data@^4.0.5"
] ]
} }
} }

View File

@@ -1,6 +1,6 @@
{ {
"name": "@push.rocks/smartrequest", "name": "@push.rocks/smartrequest",
"version": "4.4.2", "version": "5.0.1",
"private": false, "private": false,
"description": "A module for modern HTTP/HTTPS requests with support for form data, file uploads, JSON, binary data, streams, and more.", "description": "A module for modern HTTP/HTTPS requests with support for form data, file uploads, JSON, binary data, streams, and more.",
"exports": { "exports": {
@@ -12,7 +12,7 @@
}, },
"type": "module", "type": "module",
"scripts": { "scripts": {
"test": "(tstest test/ --verbose --timeout 120)", "test": "(tstest test/ --verbose --timeout 120 --logfile)",
"build": "(tsbuild --web)", "build": "(tsbuild --web)",
"buildDocs": "tsdoc" "buildDocs": "tsdoc"
}, },
@@ -50,12 +50,12 @@
"@push.rocks/smartpromise": "^4.0.4", "@push.rocks/smartpromise": "^4.0.4",
"@push.rocks/smarturl": "^3.1.0", "@push.rocks/smarturl": "^3.1.0",
"agentkeepalive": "^4.5.0", "agentkeepalive": "^4.5.0",
"form-data": "^4.0.4" "form-data": "^4.0.5"
}, },
"devDependencies": { "devDependencies": {
"@git.zone/tsbuild": "^2.7.1", "@git.zone/tsbuild": "^3.1.0",
"@git.zone/tsrun": "^1.6.2", "@git.zone/tsrun": "^2.0.0",
"@git.zone/tstest": "^2.7.0", "@git.zone/tstest": "^2.8.2",
"@types/node": "^22.9.0" "@types/node": "^22.9.0"
}, },
"files": [ "files": [

2071
pnpm-lock.yaml generated

File diff suppressed because it is too large Load Diff

183
readme.md
View File

@@ -182,11 +182,11 @@ async function downloadImage(url: string) {
return Buffer.from(buffer); // Convert ArrayBuffer to Buffer if needed return Buffer.from(buffer); // Convert ArrayBuffer to Buffer if needed
} }
// Streaming response (Web Streams API) // Streaming response (Web Streams API - cross-platform)
async function streamLargeFile(url: string) { async function streamLargeFile(url: string) {
const response = await SmartRequest.create().url(url).get(); const response = await SmartRequest.create().url(url).get();
// Get a web-style ReadableStream (works in both Node.js and browsers) // Get a web-style ReadableStream (works everywhere)
const stream = response.stream(); const stream = response.stream();
if (stream) { if (stream) {
@@ -204,12 +204,14 @@ async function streamLargeFile(url: string) {
} }
} }
// Node.js specific stream (only in Node.js environment) // Convert to Node.js stream if needed (Node.js only)
async function streamWithNodeApi(url: string) { async function streamWithNodeApi(url: string) {
const response = await SmartRequest.create().url(url).get(); const response = await SmartRequest.create().url(url).get();
// Only available in Node.js, throws error in browser/Bun/Deno // Convert web stream to Node.js stream
const nodeStream = response.streamNode(); import { Readable } from 'stream';
const webStream = response.stream();
const nodeStream = Readable.fromWeb(webStream);
nodeStream.on('data', (chunk) => { nodeStream.on('data', (chunk) => {
console.log(`Received ${chunk.length} bytes of data`); console.log(`Received ${chunk.length} bytes of data`);
@@ -230,8 +232,7 @@ The response object provides these methods:
- `text(): Promise<string>` - Get response as text - `text(): Promise<string>` - Get response as text
- `arrayBuffer(): Promise<ArrayBuffer>` - Get response as ArrayBuffer - `arrayBuffer(): Promise<ArrayBuffer>` - Get response as ArrayBuffer
- `stream(): ReadableStream<Uint8Array> | null` - Get web-style ReadableStream (cross-platform) - `stream(): ReadableStream<Uint8Array> | null` - Get web-style ReadableStream (cross-platform)
- `streamNode(): NodeJS.ReadableStream` - Get Node.js stream (Node.js only, throws in browser/Bun/Deno) - `raw(): Response | http.IncomingMessage` - Get the underlying platform response object
- `raw(): Response | http.IncomingMessage` - Get the underlying platform response
Each body method can only be called once per response, similar to the fetch API. Each body method can only be called once per response, similar to the fetch API.
@@ -368,24 +369,7 @@ async function streamData(dataSource: Readable) {
return await response.json(); return await response.json();
} }
// Advanced: Full control over request streaming (Node.js only) // Send Uint8Array (works everywhere)
async function customStreaming() {
const response = await SmartRequest.create()
.url('https://api.example.com/stream')
.raw((request) => {
// Custom streaming logic - you have full control
request.write('chunk1');
request.write('chunk2');
// Stream from another source
someReadableStream.pipe(request);
})
.post();
return await response.json();
}
// Send Uint8Array (works in both Node.js and browser)
async function uploadBinaryData() { async function uploadBinaryData() {
const data = new Uint8Array([72, 101, 108, 108, 111]); // "Hello" const data = new Uint8Array([72, 101, 108, 108, 111]); // "Hello"
@@ -411,11 +395,6 @@ async function uploadBinaryData() {
- ✅ Web ReadableStream works everywhere (Node.js, Bun, Deno, browsers) - ✅ Web ReadableStream works everywhere (Node.js, Bun, Deno, browsers)
- ⚠️ Node.js streams only work in Node.js (automatically converted to web streams in Bun/Deno) - ⚠️ Node.js streams only work in Node.js (automatically converted to web streams in Bun/Deno)
- **`.raw(streamFunc)`** - Advanced control over request streaming
- `streamFunc`: Function that receives the raw request object for custom streaming
-**Node.js only** - not supported in browsers, Bun, or Deno
- Use for advanced scenarios like chunked transfer encoding
These methods are particularly useful for: These methods are particularly useful for:
- Uploading large files without loading them into memory - Uploading large files without loading them into memory
- Streaming real-time data to servers - Streaming real-time data to servers
@@ -687,13 +666,12 @@ const response = await SmartRequest.create()
}) })
.get(); .get();
// Bun uses web streams - streamNode() throws an error // Bun uses web streams natively
const streamResponse = await SmartRequest.create() const streamResponse = await SmartRequest.create()
.url('https://api.example.com/data') .url('https://api.example.com/data')
.get(); .get();
const webStream = streamResponse.stream(); // ✅ Use web streams in Bun const webStream = streamResponse.stream(); // ✅ Use web streams in Bun
// streamNode() is not available - throws error directing you to use stream()
``` ```
### Deno-Specific Options ### Deno-Specific Options
@@ -716,13 +694,12 @@ const response = await SmartRequest.create()
// Remember to clean up clients when done // Remember to clean up clients when done
client.close(); client.close();
// Deno uses web streams - streamNode() throws an error // Deno uses web streams natively
const streamResponse = await SmartRequest.create() const streamResponse = await SmartRequest.create()
.url('https://api.example.com/data') .url('https://api.example.com/data')
.get(); .get();
const webStream = streamResponse.stream(); // ✅ Use web streams in Deno const webStream = streamResponse.stream(); // ✅ Use web streams in Deno
// streamNode() is not available - throws error directing you to use stream()
``` ```
## Complete Example: Building a REST API Client ## Complete Example: Building a REST API Client
@@ -838,6 +815,144 @@ async function fetchWithErrorHandling(url: string) {
## Migrating from Earlier Versions ## Migrating from Earlier Versions
### From v4.x to v5.x
Version 5.0 completes the transition to modern web standards by removing Node.js-specific streaming APIs:
#### **Breaking Changes**
1. **`.streamNode()` Method Removed**
- The `.streamNode()` method has been removed from all response objects
- Use the cross-platform `.stream()` method instead, which returns a web `ReadableStream<Uint8Array>`
- For Node.js users who need Node.js streams, convert using `Readable.fromWeb()`
```typescript
// ❌ Before (v4.x) - Node.js only
const response = await SmartRequest.create().url(url).get();
const nodeStream = response.streamNode();
// ✅ After (v5.x) - Cross-platform
import { Readable } from 'stream';
const response = await SmartRequest.create().url(url).get();
const webStream = response.stream();
const nodeStream = Readable.fromWeb(webStream); // Convert to Node.js stream
```
2. **Request `.raw()` Method Removed**
- The `.raw(streamFunc)` method has been removed from the SmartRequest client
- Use `.stream()` with a web `ReadableStream` instead for request body streaming
- Node.js users can create web streams from Node.js streams using `Readable.toWeb()`
```typescript
// ❌ Before (v4.x) - Node.js only
const response = await SmartRequest.create()
.url(url)
.raw((request) => {
request.write('chunk1');
request.write('chunk2');
request.end();
})
.post();
// ✅ After (v5.x) - Cross-platform
const stream = new ReadableStream({
start(controller) {
controller.enqueue(new TextEncoder().encode('chunk1'));
controller.enqueue(new TextEncoder().encode('chunk2'));
controller.close();
}
});
const response = await SmartRequest.create()
.url(url)
.stream(stream)
.post();
// Or convert from Node.js stream (Node.js only)
import { Readable } from 'stream';
import * as fs from 'fs';
const nodeStream = fs.createReadStream('file.txt');
const webStream = Readable.toWeb(nodeStream);
const response = await SmartRequest.create()
.url(url)
.stream(webStream)
.post();
```
3. **Response `.raw()` Method Preserved**
- The `response.raw()` method is still available for accessing platform-specific response objects
- Returns `http.IncomingMessage` in Node.js or `Response` in other runtimes
- Use for advanced scenarios requiring access to raw platform objects
```typescript
// ✅ Still works in v5.x
const response = await SmartRequest.create().url(url).get();
const rawResponse = response.raw(); // http.IncomingMessage or Response
```
#### **Migration Guide**
**For Response Streaming:**
```typescript
// Before (v4.x)
const response = await SmartRequest.create().url(url).get();
const nodeStream = response.streamNode();
nodeStream.on('data', (chunk) => {
console.log(`Received ${chunk.length} bytes`);
});
// After (v5.x) - Option 1: Use web streams directly
const response = await SmartRequest.create().url(url).get();
const webStream = response.stream();
if (webStream) {
const reader = webStream.getReader();
while (true) {
const { done, value } = await reader.read();
if (done) break;
console.log(`Received ${value.length} bytes`);
}
reader.releaseLock();
}
// After (v5.x) - Option 2: Convert to Node.js stream (Node.js only)
import { Readable } from 'stream';
const response = await SmartRequest.create().url(url).get();
const webStream = response.stream();
const nodeStream = Readable.fromWeb(webStream);
nodeStream.on('data', (chunk) => {
console.log(`Received ${chunk.length} bytes`);
});
```
**For Request Streaming:**
Node.js streams are still accepted by the `.stream()` method and automatically converted internally. No changes required for most use cases:
```typescript
// ✅ Still works in v5.x
import * as fs from 'fs';
const fileStream = fs.createReadStream('large-file.bin');
const response = await SmartRequest.create()
.url('https://api.example.com/upload')
.stream(fileStream, 'application/octet-stream')
.post();
```
**Benefits:**
- ✅ True cross-platform compatibility
- ✅ Modern web standards
- ✅ Cleaner API surface
- ✅ Single streaming approach works everywhere
### From v3.x to v4.x ### From v3.x to v4.x
Version 4.0 adds comprehensive cross-platform support: Version 4.0 adds comprehensive cross-platform support:

View File

@@ -1,17 +1,27 @@
import { tap, expect } from '@git.zone/tstest/tapbundle'; import { tap, expect } from '@git.zone/tstest/tapbundle';
import { SmartRequest } from '../ts/index.js'; import { SmartRequest } from '../ts/index.js';
import { Readable } from 'stream';
tap.test('should have streamNode() method available', async () => { tap.test('should have stream() method that returns web ReadableStream', async () => {
const response = await SmartRequest.create() const response = await SmartRequest.create()
.url('https://httpbin.org/get') .url('https://httpbin.org/get')
.get(); .get();
// Verify streamNode() method exists // Verify stream() method exists
expect(response.streamNode).toBeDefined(); expect(response.stream).toBeDefined();
expect(typeof response.streamNode).toEqual('function'); expect(typeof response.stream).toEqual('function');
// In Node.js, it should return a stream // Get web stream
const nodeStream = response.streamNode(); const webStream = response.stream();
expect(webStream).toBeDefined();
// Verify it's a web ReadableStream
expect(typeof webStream.getReader).toEqual('function');
expect(typeof webStream.cancel).toEqual('function');
// Convert to Node.js stream using Readable.fromWeb()
// Known TypeScript limitation: @types/node ReadableStream differs from web ReadableStream
const nodeStream = Readable.fromWeb(webStream as any);
expect(nodeStream).toBeDefined(); expect(nodeStream).toBeDefined();
// Verify it's a Node.js readable stream // Verify it's a Node.js readable stream
@@ -22,6 +32,37 @@ tap.test('should have streamNode() method available', async () => {
nodeStream.resume(); nodeStream.resume();
}); });
tap.test('should convert web stream to Node.js stream correctly', async () => {
const response = await SmartRequest.create()
.url('https://httpbin.org/get')
.get();
const webStream = response.stream();
const nodeStream = Readable.fromWeb(webStream as any);
// Collect data from stream
const chunks: Buffer[] = [];
await new Promise<void>((resolve, reject) => {
nodeStream.on('data', (chunk) => {
chunks.push(chunk);
});
nodeStream.on('end', () => {
resolve();
});
nodeStream.on('error', reject);
});
// Verify we received data
const data = Buffer.concat(chunks);
expect(data.length).toBeGreaterThan(0);
// Verify it's valid JSON
const json = JSON.parse(data.toString('utf-8'));
expect(json).toBeDefined();
expect(json.url).toEqual('https://httpbin.org/get');
});
export default tap.start(); export default tap.start();

View File

@@ -3,6 +3,6 @@
*/ */
export const commitinfo = { export const commitinfo = {
name: '@push.rocks/smartrequest', name: '@push.rocks/smartrequest',
version: '4.4.2', version: '5.0.1',
description: 'A module for modern HTTP/HTTPS requests with support for form data, file uploads, JSON, binary data, streams, and more.' description: 'A module for modern HTTP/HTTPS requests with support for form data, file uploads, JSON, binary data, streams, and more.'
} }

View File

@@ -8,7 +8,6 @@ import type {
ResponseType, ResponseType,
FormField, FormField,
RateLimitConfig, RateLimitConfig,
RawStreamFunction,
} from './types/common.js'; } from './types/common.js';
import { import {
type TPaginationConfig, type TPaginationConfig,
@@ -161,17 +160,6 @@ export class SmartRequest<T = any> {
return this; return this;
} }
/**
* Provide a custom function to handle raw request streaming
* This gives full control over the request body streaming
* Note: Only works in Node.js environment, not supported in browsers
*/
raw(streamFunc: RawStreamFunction): this {
// Store the raw streaming function to be used later
(this._options as any).__rawStreamFunc = streamFunc;
return this;
}
/** /**
* Set request timeout in milliseconds * Set request timeout in milliseconds
*/ */
@@ -440,7 +428,7 @@ export class SmartRequest<T = any> {
// Main retry loop // Main retry loop
for (let attempt = 0; attempt <= this._retries; attempt++) { for (let attempt = 0; attempt <= this._retries; attempt++) {
try { try {
// Check if we have a Node.js stream or raw function that needs special handling // Check if we have a Node.js stream that needs special handling
let requestDataFunc = null; let requestDataFunc = null;
if ((this._options as any).__nodeStream) { if ((this._options as any).__nodeStream) {
const nodeStream = (this._options as any).__nodeStream; const nodeStream = (this._options as any).__nodeStream;
@@ -449,16 +437,12 @@ export class SmartRequest<T = any> {
}; };
// Don't delete __nodeStream yet - let CoreRequest implementations handle it // Don't delete __nodeStream yet - let CoreRequest implementations handle it
// Node.js will use requestDataFunc, Bun/Deno will convert the stream // Node.js will use requestDataFunc, Bun/Deno will convert the stream
} else if ((this._options as any).__rawStreamFunc) {
requestDataFunc = (this._options as any).__rawStreamFunc;
// Don't delete __rawStreamFunc yet - let CoreRequest implementations handle it
} }
const request = new CoreRequest(this._url, this._options as any, requestDataFunc); const request = new CoreRequest(this._url, this._options as any, requestDataFunc);
// Clean up temporary properties after CoreRequest has been created // Clean up temporary properties after CoreRequest has been created
delete (this._options as any).__nodeStream; delete (this._options as any).__nodeStream;
delete (this._options as any).__rawStreamFunc;
const response = (await request.fire()) as ICoreResponse<R>; const response = (await request.fire()) as ICoreResponse<R>;
// Check for 429 status if rate limit handling is enabled // Check for 429 status if rate limit handling is enabled

View File

@@ -66,9 +66,3 @@ export interface RateLimitConfig {
backoffFactor?: number; // Exponential backoff factor (default: 2) backoffFactor?: number; // Exponential backoff factor (default: 2)
onRateLimit?: (attempt: number, waitTime: number) => void; // Callback for rate limit events onRateLimit?: (attempt: number, waitTime: number) => void; // Callback for rate limit events
} }
/**
* Raw streaming function for advanced request body control
* Note: The request parameter type depends on the environment (Node.js ClientRequest or fetch Request)
*/
export type RawStreamFunction = (request: any) => void;

View File

@@ -42,9 +42,4 @@ export abstract class CoreResponse<T = any> implements types.ICoreResponse<T> {
* Get response as a web-style ReadableStream * Get response as a web-style ReadableStream
*/ */
abstract stream(): ReadableStream<Uint8Array> | null; abstract stream(): ReadableStream<Uint8Array> | null;
/**
* Get response as a Node.js stream (throws in browser)
*/
abstract streamNode(): NodeJS.ReadableStream | never;
} }

View File

@@ -86,5 +86,4 @@ export interface ICoreResponse<T = any> {
text(): Promise<string>; text(): Promise<string>;
arrayBuffer(): Promise<ArrayBuffer>; arrayBuffer(): Promise<ArrayBuffer>;
stream(): ReadableStream<Uint8Array> | null; // Always returns web-style stream stream(): ReadableStream<Uint8Array> | null; // Always returns web-style stream
streamNode(): NodeJS.ReadableStream | never; // Returns Node.js stream or throws in browser
} }

View File

@@ -72,20 +72,6 @@ export class CoreResponse<T = any>
return this.response.body; return this.response.body;
} }
/**
* Get response as a Node.js-style stream
* Bun supports Node.js streams, so we can provide this functionality
*
* Note: In Bun, you may also be able to use the web stream directly with stream() method
*/
streamNode(): never {
// Bun primarily uses web streams and has excellent compatibility
// For most use cases, use stream() which returns a standard ReadableStream
throw new Error(
'streamNode() is not available in Bun environment. Use stream() for web-style ReadableStream, which Bun fully supports.',
);
}
/** /**
* Get the raw Response object * Get the raw Response object
*/ */

View File

@@ -72,16 +72,6 @@ export class CoreResponse<T = any>
return this.response.body; return this.response.body;
} }
/**
* Node.js stream method - not available in Deno's standard mode
* Throws an error as Deno uses web-standard ReadableStream
*/
streamNode(): never {
throw new Error(
'streamNode() is not available in Deno environment. Use stream() for web-style ReadableStream.',
);
}
/** /**
* Get the raw Response object * Get the raw Response object
*/ */

View File

@@ -72,15 +72,6 @@ export class CoreResponse<T = any>
return this.response.body; return this.response.body;
} }
/**
* Node.js stream method - not available in browser
*/
streamNode(): never {
throw new Error(
'streamNode() is not available in browser/fetch environment. Use stream() for web-style ReadableStream.',
);
}
/** /**
* Get the raw Response object * Get the raw Response object
*/ */

View File

@@ -129,41 +129,15 @@ export class CoreResponse<T = any>
stream(): ReadableStream<Uint8Array> | null { stream(): ReadableStream<Uint8Array> | null {
this.ensureNotConsumed(); this.ensureNotConsumed();
// Convert Node.js stream to web stream // Convert Node.js stream to web stream using Readable.toWeb()
// In Node.js 16.5+ we can use Readable.toWeb() // This creates a proper Node.js-compatible web stream that works with Readable.fromWeb()
if (this.incomingMessage.readableEnded || this.incomingMessage.destroyed) { if (this.incomingMessage.readableEnded || this.incomingMessage.destroyed) {
return null; return null;
} }
// Create a web ReadableStream from the Node.js stream // Use Readable.toWeb() to convert Node.js stream to web stream (Node.js 16.5+)
const nodeStream = this.incomingMessage; // The returned type is automatically Node.js ReadableStream which is compatible with Readable.fromWeb()
return new ReadableStream<Uint8Array>({ return plugins.stream.Readable.toWeb(this.incomingMessage) as any;
start(controller) {
nodeStream.on('data', (chunk) => {
controller.enqueue(new Uint8Array(chunk));
});
nodeStream.on('end', () => {
controller.close();
});
nodeStream.on('error', (err) => {
controller.error(err);
});
},
cancel() {
nodeStream.destroy();
},
});
}
/**
* Get response as a Node.js readable stream
*/
streamNode(): NodeJS.ReadableStream {
this.ensureNotConsumed();
return this.incomingMessage;
} }
/** /**