@planqk/planqk-service-sdk 1.9.1 → 2.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.devcontainer/devcontainer.json +32 -0
- package/.devcontainer/post-create.sh +7 -0
- package/.env.template +4 -0
- package/.gitlab-ci.yml +103 -0
- package/.python-version +1 -0
- package/.releaserc.json +45 -0
- package/LICENSE +201 -0
- package/README-node.md +41 -0
- package/README-python.md +52 -0
- package/README.md +42 -21
- package/dist/auth.js +12 -19
- package/dist/client.d.ts +2 -12
- package/dist/client.js +5 -76
- package/dist/sdk/Client.d.ts +4 -3
- package/dist/sdk/Client.js +4 -8
- package/dist/sdk/api/errors/BadRequestError.d.ts +1 -1
- package/dist/sdk/api/errors/BadRequestError.js +18 -8
- package/dist/sdk/api/errors/ForbiddenError.d.ts +1 -1
- package/dist/sdk/api/errors/ForbiddenError.js +18 -8
- package/dist/sdk/api/errors/InternalServerError.d.ts +1 -1
- package/dist/sdk/api/errors/InternalServerError.js +18 -8
- package/dist/sdk/api/errors/NotFoundError.d.ts +1 -1
- package/dist/sdk/api/errors/NotFoundError.js +18 -8
- package/dist/sdk/api/errors/UnauthorizedError.d.ts +1 -1
- package/dist/sdk/api/errors/UnauthorizedError.js +18 -8
- package/dist/sdk/api/resources/index.d.ts +0 -3
- package/dist/sdk/api/resources/index.js +18 -11
- package/dist/sdk/api/resources/serviceApi/client/Client.d.ts +65 -12
- package/dist/sdk/api/resources/serviceApi/client/Client.js +405 -261
- package/dist/sdk/api/resources/serviceApi/client/index.d.ts +1 -1
- package/dist/sdk/api/resources/serviceApi/client/index.js +0 -15
- package/dist/sdk/api/resources/serviceApi/types/GetResultResponse.d.ts +4 -1
- package/dist/sdk/api/resources/serviceApi/types/{GetInterimResultsResponse.d.ts → GetResultResponseEmbedded.d.ts} +3 -1
- package/dist/sdk/api/resources/serviceApi/types/GetResultResponseLinks.d.ts +7 -0
- package/dist/sdk/api/resources/{statusApi → serviceApi}/types/HealthCheckResponse.d.ts +1 -0
- package/dist/sdk/api/resources/serviceApi/types/index.d.ts +3 -1
- package/dist/sdk/api/resources/serviceApi/types/index.js +3 -1
- package/dist/sdk/api/types/HalLink.d.ts +21 -0
- package/dist/sdk/api/types/InputData.d.ts +1 -1
- package/dist/sdk/api/types/{InputRef.d.ts → InputDataRef.d.ts} +1 -1
- package/dist/sdk/api/types/InputParams.d.ts +1 -1
- package/dist/sdk/api/types/{Job.d.ts → ServiceExecution.d.ts} +2 -2
- package/dist/sdk/api/types/{JobStatus.d.ts → ServiceExecutionStatus.d.ts} +2 -2
- package/dist/sdk/api/types/{JobStatus.js → ServiceExecutionStatus.js} +2 -2
- package/dist/sdk/api/types/index.d.ts +4 -8
- package/dist/sdk/api/types/index.js +4 -8
- package/dist/sdk/core/fetcher/APIResponse.d.ts +1 -0
- package/dist/sdk/core/fetcher/Fetcher.d.ts +6 -5
- package/dist/sdk/core/fetcher/Fetcher.js +68 -112
- package/dist/sdk/core/fetcher/Supplier.js +2 -11
- package/dist/sdk/core/fetcher/createRequestUrl.d.ts +1 -0
- package/dist/sdk/core/fetcher/createRequestUrl.js +12 -0
- package/dist/sdk/core/fetcher/getFetchFn.d.ts +4 -0
- package/dist/sdk/core/fetcher/getFetchFn.js +57 -0
- package/dist/sdk/core/fetcher/getHeader.d.ts +1 -0
- package/dist/sdk/core/fetcher/getHeader.js +11 -0
- package/dist/sdk/core/fetcher/getRequestBody.d.ts +7 -0
- package/dist/sdk/core/fetcher/getRequestBody.js +11 -0
- package/dist/sdk/core/fetcher/getResponseBody.d.ts +1 -0
- package/dist/sdk/core/fetcher/getResponseBody.js +40 -0
- package/dist/sdk/core/fetcher/index.d.ts +1 -0
- package/dist/sdk/core/fetcher/index.js +3 -1
- package/dist/sdk/core/fetcher/makeRequest.d.ts +1 -0
- package/dist/sdk/core/fetcher/makeRequest.js +33 -0
- package/dist/sdk/core/fetcher/requestWithRetries.d.ts +1 -0
- package/dist/sdk/core/fetcher/requestWithRetries.js +20 -0
- package/dist/sdk/core/fetcher/signals.d.ts +11 -0
- package/dist/sdk/core/fetcher/signals.js +36 -0
- package/dist/sdk/core/fetcher/stream-wrappers/Node18UniversalStreamWrapper.d.ts +30 -0
- package/dist/sdk/core/fetcher/stream-wrappers/Node18UniversalStreamWrapper.js +232 -0
- package/dist/sdk/core/fetcher/stream-wrappers/NodePre18StreamWrapper.d.ts +21 -0
- package/dist/sdk/core/fetcher/stream-wrappers/NodePre18StreamWrapper.js +91 -0
- package/dist/sdk/core/fetcher/stream-wrappers/UndiciStreamWrapper.d.ts +31 -0
- package/dist/sdk/core/fetcher/stream-wrappers/UndiciStreamWrapper.js +214 -0
- package/dist/sdk/core/fetcher/stream-wrappers/chooseStreamWrapper.d.ts +18 -0
- package/dist/sdk/core/fetcher/stream-wrappers/chooseStreamWrapper.js +48 -0
- package/dist/sdk/core/index.d.ts +1 -0
- package/dist/sdk/core/index.js +1 -0
- package/dist/sdk/core/runtime/index.d.ts +1 -0
- package/dist/sdk/core/runtime/index.js +5 -0
- package/dist/sdk/core/runtime/runtime.d.ts +9 -0
- package/dist/sdk/core/runtime/runtime.js +92 -0
- package/dist/sdk/errors/PlanqkServiceApiError.js +2 -0
- package/dist/sdk/index.js +17 -7
- package/eslint.config.mjs +11 -0
- package/fern/fern.config.json +4 -0
- package/fern/generators.yml +25 -0
- package/fern/openapi/openapi.yml +342 -0
- package/notebooks/python-sdk.ipynb +280 -0
- package/package.json +27 -28
- package/planqk/__init__.py +0 -0
- package/planqk/service/__init__.py +1 -0
- package/planqk/service/_version.py +1 -0
- package/planqk/service/auth.py +30 -0
- package/planqk/service/client.py +151 -0
- package/planqk/service/sdk/__init__.py +48 -0
- package/planqk/service/sdk/client.py +152 -0
- package/planqk/service/sdk/core/__init__.py +47 -0
- package/planqk/service/sdk/core/api_error.py +17 -0
- package/planqk/service/sdk/core/client_wrapper.py +74 -0
- package/planqk/service/sdk/core/datetime_utils.py +30 -0
- package/planqk/service/sdk/core/file.py +70 -0
- package/planqk/service/sdk/core/http_client.py +575 -0
- package/planqk/service/sdk/core/jsonable_encoder.py +103 -0
- package/planqk/service/sdk/core/pydantic_utilities.py +323 -0
- package/planqk/service/sdk/core/query_encoder.py +60 -0
- package/planqk/service/sdk/core/remove_none_from_dict.py +11 -0
- package/planqk/service/sdk/core/request_options.py +35 -0
- package/planqk/service/sdk/core/serialization.py +276 -0
- package/planqk/service/sdk/environment.py +7 -0
- package/planqk/service/sdk/errors/__init__.py +15 -0
- package/planqk/service/sdk/errors/bad_request_error.py +9 -0
- package/planqk/service/sdk/errors/forbidden_error.py +9 -0
- package/planqk/service/sdk/errors/internal_server_error.py +9 -0
- package/planqk/service/sdk/errors/not_found_error.py +9 -0
- package/planqk/service/sdk/errors/unauthorized_error.py +9 -0
- package/planqk/service/sdk/service_api/__init__.py +15 -0
- package/planqk/service/sdk/service_api/client.py +1257 -0
- package/planqk/service/sdk/service_api/types/__init__.py +13 -0
- package/planqk/service/sdk/service_api/types/get_result_response.py +30 -0
- package/planqk/service/sdk/service_api/types/get_result_response_embedded.py +22 -0
- package/planqk/service/sdk/service_api/types/get_result_response_links.py +22 -0
- package/planqk/service/sdk/service_api/types/health_check_response.py +24 -0
- package/planqk/service/sdk/types/__init__.py +17 -0
- package/planqk/service/sdk/types/hal_link.py +59 -0
- package/planqk/service/sdk/types/input_data.py +5 -0
- package/planqk/service/sdk/types/input_data_ref.py +27 -0
- package/planqk/service/sdk/types/input_params.py +5 -0
- package/planqk/service/sdk/types/service_execution.py +34 -0
- package/planqk/service/sdk/types/service_execution_status.py +8 -0
- package/pyproject.toml +51 -0
- package/scripts/update-version.sh +6 -0
- package/src/client.ts +4 -78
- package/src/index.test.ts +43 -0
- package/src/sdk/Client.ts +4 -7
- package/src/sdk/api/errors/BadRequestError.ts +1 -1
- package/src/sdk/api/errors/ForbiddenError.ts +1 -1
- package/src/sdk/api/errors/InternalServerError.ts +1 -1
- package/src/sdk/api/errors/NotFoundError.ts +1 -1
- package/src/sdk/api/errors/UnauthorizedError.ts +1 -1
- package/src/sdk/api/resources/index.ts +0 -3
- package/src/sdk/api/resources/serviceApi/client/Client.ts +205 -32
- package/src/sdk/api/resources/serviceApi/client/index.ts +1 -1
- package/src/sdk/api/resources/serviceApi/types/GetResultResponse.ts +4 -5
- package/src/sdk/api/resources/serviceApi/types/GetResultResponseEmbedded.ts +9 -0
- package/src/sdk/api/resources/serviceApi/types/GetResultResponseLinks.ts +9 -0
- package/src/sdk/api/resources/{statusApi → serviceApi}/types/HealthCheckResponse.ts +1 -0
- package/src/sdk/api/resources/serviceApi/types/index.ts +3 -1
- package/src/sdk/api/types/HalLink.ts +22 -0
- package/src/sdk/api/types/InputData.ts +1 -1
- package/src/sdk/api/types/{InputRef.ts → InputDataRef.ts} +1 -1
- package/src/sdk/api/types/InputParams.ts +1 -1
- package/src/sdk/api/types/{Job.ts → ServiceExecution.ts} +2 -2
- package/src/sdk/api/types/{JobStatus.ts → ServiceExecutionStatus.ts} +2 -2
- package/src/sdk/api/types/index.ts +4 -8
- package/src/sdk/core/fetcher/APIResponse.ts +1 -0
- package/src/sdk/core/fetcher/Fetcher.ts +55 -72
- package/src/sdk/core/fetcher/createRequestUrl.ts +10 -0
- package/src/sdk/core/fetcher/getFetchFn.ts +25 -0
- package/src/sdk/core/fetcher/getHeader.ts +8 -0
- package/src/sdk/core/fetcher/getRequestBody.ts +14 -0
- package/src/sdk/core/fetcher/getResponseBody.ts +32 -0
- package/src/sdk/core/fetcher/index.ts +1 -0
- package/src/sdk/core/fetcher/makeRequest.ts +44 -0
- package/src/sdk/core/fetcher/requestWithRetries.ts +21 -0
- package/src/sdk/core/fetcher/signals.ts +38 -0
- package/src/sdk/core/fetcher/stream-wrappers/Node18UniversalStreamWrapper.ts +252 -0
- package/src/sdk/core/fetcher/stream-wrappers/NodePre18StreamWrapper.ts +106 -0
- package/src/sdk/core/fetcher/stream-wrappers/UndiciStreamWrapper.ts +239 -0
- package/src/sdk/core/fetcher/stream-wrappers/chooseStreamWrapper.ts +33 -0
- package/src/sdk/core/index.ts +1 -0
- package/src/sdk/core/runtime/index.ts +1 -0
- package/src/sdk/core/runtime/runtime.ts +126 -0
- package/tsconfig.json +15 -107
- package/uv.lock +1109 -0
- package/.eslintignore +0 -3
- package/.eslintrc +0 -7
- package/dist/sdk/api/resources/serviceApi/client/requests/GetInterimResultsRequest.d.ts +0 -9
- package/dist/sdk/api/resources/serviceApi/client/requests/StartExecutionRequest.d.ts +0 -13
- package/dist/sdk/api/resources/serviceApi/client/requests/index.d.ts +0 -2
- package/dist/sdk/api/resources/serviceApi/client/requests/index.js +0 -2
- package/dist/sdk/api/resources/statusApi/client/Client.d.ts +0 -28
- package/dist/sdk/api/resources/statusApi/client/Client.js +0 -97
- package/dist/sdk/api/resources/statusApi/client/index.d.ts +0 -1
- package/dist/sdk/api/resources/statusApi/client/index.js +0 -2
- package/dist/sdk/api/resources/statusApi/index.d.ts +0 -2
- package/dist/sdk/api/resources/statusApi/index.js +0 -18
- package/dist/sdk/api/resources/statusApi/types/index.d.ts +0 -1
- package/dist/sdk/api/resources/statusApi/types/index.js +0 -17
- package/dist/sdk/api/types/ArrayResponse.d.ts +0 -4
- package/dist/sdk/api/types/InterimResultResponse.d.ts +0 -4
- package/dist/sdk/api/types/InterimResultResponse.js +0 -5
- package/dist/sdk/api/types/Job.js +0 -5
- package/dist/sdk/api/types/NumberResponse.d.ts +0 -4
- package/dist/sdk/api/types/NumberResponse.js +0 -5
- package/dist/sdk/api/types/ObjectResponse.d.ts +0 -4
- package/dist/sdk/api/types/ObjectResponse.js +0 -5
- package/dist/sdk/api/types/StringResponse.d.ts +0 -4
- package/dist/sdk/api/types/StringResponse.js +0 -5
- package/jest.config.js +0 -12
- package/src/sdk/api/resources/serviceApi/client/requests/GetInterimResultsRequest.ts +0 -10
- package/src/sdk/api/resources/serviceApi/client/requests/StartExecutionRequest.ts +0 -15
- package/src/sdk/api/resources/serviceApi/client/requests/index.ts +0 -2
- package/src/sdk/api/resources/serviceApi/types/GetInterimResultsResponse.ts +0 -9
- package/src/sdk/api/resources/statusApi/client/Client.ts +0 -75
- package/src/sdk/api/resources/statusApi/client/index.ts +0 -1
- package/src/sdk/api/resources/statusApi/index.ts +0 -2
- package/src/sdk/api/resources/statusApi/types/index.ts +0 -1
- package/src/sdk/api/types/ArrayResponse.ts +0 -5
- package/src/sdk/api/types/InterimResultResponse.ts +0 -5
- package/src/sdk/api/types/NumberResponse.ts +0 -5
- package/src/sdk/api/types/ObjectResponse.ts +0 -5
- package/src/sdk/api/types/StringResponse.ts +0 -5
- package/tests/fixtures/complex-input.ts +0 -477
- package/tests/integration.test.ts +0 -92
- /package/dist/sdk/api/resources/serviceApi/{client/requests/GetInterimResultsRequest.js → types/GetResultResponseEmbedded.js} +0 -0
- /package/dist/sdk/api/resources/serviceApi/{client/requests/StartExecutionRequest.js → types/GetResultResponseLinks.js} +0 -0
- /package/dist/sdk/api/resources/{statusApi → serviceApi}/types/HealthCheckResponse.js +0 -0
- /package/dist/sdk/api/{resources/serviceApi/types/GetInterimResultsResponse.js → types/HalLink.js} +0 -0
- /package/dist/sdk/api/types/{ArrayResponse.js → InputDataRef.js} +0 -0
- /package/dist/sdk/api/types/{InputRef.js → ServiceExecution.js} +0 -0
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.makeRequest = void 0;
|
|
4
|
+
const signals_1 = require("./signals");
|
|
5
|
+
const makeRequest = async (fetchFn, url, method, headers, requestBody, timeoutMs, abortSignal, withCredentials, duplex) => {
|
|
6
|
+
const signals = [];
|
|
7
|
+
// Add timeout signal
|
|
8
|
+
let timeoutAbortId = undefined;
|
|
9
|
+
if (timeoutMs != null) {
|
|
10
|
+
const { signal, abortId } = (0, signals_1.getTimeoutSignal)(timeoutMs);
|
|
11
|
+
timeoutAbortId = abortId;
|
|
12
|
+
signals.push(signal);
|
|
13
|
+
}
|
|
14
|
+
// Add arbitrary signal
|
|
15
|
+
if (abortSignal != null) {
|
|
16
|
+
signals.push(abortSignal);
|
|
17
|
+
}
|
|
18
|
+
let newSignals = (0, signals_1.anySignal)(signals);
|
|
19
|
+
const response = await fetchFn(url, {
|
|
20
|
+
method: method,
|
|
21
|
+
headers,
|
|
22
|
+
body: requestBody,
|
|
23
|
+
signal: newSignals,
|
|
24
|
+
credentials: withCredentials ? "include" : undefined,
|
|
25
|
+
// @ts-ignore
|
|
26
|
+
duplex,
|
|
27
|
+
});
|
|
28
|
+
if (timeoutAbortId != null) {
|
|
29
|
+
clearTimeout(timeoutAbortId);
|
|
30
|
+
}
|
|
31
|
+
return response;
|
|
32
|
+
};
|
|
33
|
+
exports.makeRequest = makeRequest;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function requestWithRetries(requestFn: () => Promise<Response>, maxRetries?: number): Promise<Response>;
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.requestWithRetries = requestWithRetries;
|
|
4
|
+
const INITIAL_RETRY_DELAY = 1;
|
|
5
|
+
const MAX_RETRY_DELAY = 60;
|
|
6
|
+
const DEFAULT_MAX_RETRIES = 2;
|
|
7
|
+
async function requestWithRetries(requestFn, maxRetries = DEFAULT_MAX_RETRIES) {
|
|
8
|
+
let response = await requestFn();
|
|
9
|
+
for (let i = 0; i < maxRetries; ++i) {
|
|
10
|
+
if ([408, 409, 429].includes(response.status) || response.status >= 500) {
|
|
11
|
+
const delay = Math.min(INITIAL_RETRY_DELAY * Math.pow(2, i), MAX_RETRY_DELAY);
|
|
12
|
+
await new Promise((resolve) => setTimeout(resolve, delay));
|
|
13
|
+
response = await requestFn();
|
|
14
|
+
}
|
|
15
|
+
else {
|
|
16
|
+
break;
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
return response;
|
|
20
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export declare function getTimeoutSignal(timeoutMs: number): {
|
|
2
|
+
signal: AbortSignal;
|
|
3
|
+
abortId: NodeJS.Timeout;
|
|
4
|
+
};
|
|
5
|
+
/**
|
|
6
|
+
* Returns an abort signal that is getting aborted when
|
|
7
|
+
* at least one of the specified abort signals is aborted.
|
|
8
|
+
*
|
|
9
|
+
* Requires at least node.js 18.
|
|
10
|
+
*/
|
|
11
|
+
export declare function anySignal(...args: AbortSignal[] | [AbortSignal[]]): AbortSignal;
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getTimeoutSignal = getTimeoutSignal;
|
|
4
|
+
exports.anySignal = anySignal;
|
|
5
|
+
const TIMEOUT = "timeout";
|
|
6
|
+
function getTimeoutSignal(timeoutMs) {
|
|
7
|
+
const controller = new AbortController();
|
|
8
|
+
const abortId = setTimeout(() => controller.abort(TIMEOUT), timeoutMs);
|
|
9
|
+
return { signal: controller.signal, abortId };
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Returns an abort signal that is getting aborted when
|
|
13
|
+
* at least one of the specified abort signals is aborted.
|
|
14
|
+
*
|
|
15
|
+
* Requires at least node.js 18.
|
|
16
|
+
*/
|
|
17
|
+
function anySignal(...args) {
|
|
18
|
+
// Allowing signals to be passed either as array
|
|
19
|
+
// of signals or as multiple arguments.
|
|
20
|
+
const signals = (args.length === 1 && Array.isArray(args[0]) ? args[0] : args);
|
|
21
|
+
const controller = new AbortController();
|
|
22
|
+
for (const signal of signals) {
|
|
23
|
+
if (signal.aborted) {
|
|
24
|
+
// Exiting early if one of the signals
|
|
25
|
+
// is already aborted.
|
|
26
|
+
controller.abort(signal?.reason);
|
|
27
|
+
break;
|
|
28
|
+
}
|
|
29
|
+
// Listening for signals and removing the listeners
|
|
30
|
+
// when at least one symbol is aborted.
|
|
31
|
+
signal.addEventListener("abort", () => controller.abort(signal?.reason), {
|
|
32
|
+
signal: controller.signal,
|
|
33
|
+
});
|
|
34
|
+
}
|
|
35
|
+
return controller.signal;
|
|
36
|
+
}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import type { Writable } from "stream";
|
|
2
|
+
import { EventCallback, StreamWrapper } from "./chooseStreamWrapper";
|
|
3
|
+
export declare class Node18UniversalStreamWrapper<ReadFormat extends Uint8Array | Uint16Array | Uint32Array> implements StreamWrapper<Node18UniversalStreamWrapper<ReadFormat> | Writable | WritableStream<ReadFormat>, ReadFormat> {
|
|
4
|
+
private readableStream;
|
|
5
|
+
private reader;
|
|
6
|
+
private events;
|
|
7
|
+
private paused;
|
|
8
|
+
private resumeCallback;
|
|
9
|
+
private encoding;
|
|
10
|
+
constructor(readableStream: ReadableStream<ReadFormat>);
|
|
11
|
+
on(event: string, callback: EventCallback): void;
|
|
12
|
+
off(event: string, callback: EventCallback): void;
|
|
13
|
+
pipe(dest: Node18UniversalStreamWrapper<ReadFormat> | Writable | WritableStream<ReadFormat>): Node18UniversalStreamWrapper<ReadFormat> | Writable | WritableStream<ReadFormat>;
|
|
14
|
+
pipeTo(dest: Node18UniversalStreamWrapper<ReadFormat> | Writable | WritableStream<ReadFormat>): Node18UniversalStreamWrapper<ReadFormat> | Writable | WritableStream<ReadFormat>;
|
|
15
|
+
unpipe(dest: Node18UniversalStreamWrapper<ReadFormat> | Writable | WritableStream<ReadFormat>): void;
|
|
16
|
+
destroy(error?: Error): void;
|
|
17
|
+
pause(): void;
|
|
18
|
+
resume(): void;
|
|
19
|
+
get isPaused(): boolean;
|
|
20
|
+
read(): Promise<ReadFormat | undefined>;
|
|
21
|
+
setEncoding(encoding: string): void;
|
|
22
|
+
text(): Promise<string>;
|
|
23
|
+
json<T>(): Promise<T>;
|
|
24
|
+
private _write;
|
|
25
|
+
private _end;
|
|
26
|
+
private _error;
|
|
27
|
+
private _emit;
|
|
28
|
+
private _startReading;
|
|
29
|
+
[Symbol.asyncIterator](): AsyncIterableIterator<ReadFormat>;
|
|
30
|
+
}
|
|
@@ -0,0 +1,232 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.Node18UniversalStreamWrapper = void 0;
|
|
4
|
+
class Node18UniversalStreamWrapper {
|
|
5
|
+
readableStream;
|
|
6
|
+
reader;
|
|
7
|
+
events;
|
|
8
|
+
paused;
|
|
9
|
+
resumeCallback;
|
|
10
|
+
encoding;
|
|
11
|
+
constructor(readableStream) {
|
|
12
|
+
this.readableStream = readableStream;
|
|
13
|
+
this.reader = this.readableStream.getReader();
|
|
14
|
+
this.events = {
|
|
15
|
+
data: [],
|
|
16
|
+
end: [],
|
|
17
|
+
error: [],
|
|
18
|
+
readable: [],
|
|
19
|
+
close: [],
|
|
20
|
+
pause: [],
|
|
21
|
+
resume: [],
|
|
22
|
+
};
|
|
23
|
+
this.paused = false;
|
|
24
|
+
this.resumeCallback = null;
|
|
25
|
+
this.encoding = null;
|
|
26
|
+
}
|
|
27
|
+
on(event, callback) {
|
|
28
|
+
this.events[event]?.push(callback);
|
|
29
|
+
}
|
|
30
|
+
off(event, callback) {
|
|
31
|
+
this.events[event] = this.events[event]?.filter((cb) => cb !== callback);
|
|
32
|
+
}
|
|
33
|
+
pipe(dest) {
|
|
34
|
+
this.on("data", async (chunk) => {
|
|
35
|
+
if (dest instanceof Node18UniversalStreamWrapper) {
|
|
36
|
+
dest._write(chunk);
|
|
37
|
+
}
|
|
38
|
+
else if (dest instanceof WritableStream) {
|
|
39
|
+
const writer = dest.getWriter();
|
|
40
|
+
writer.write(chunk).then(() => writer.releaseLock());
|
|
41
|
+
}
|
|
42
|
+
else {
|
|
43
|
+
dest.write(chunk);
|
|
44
|
+
}
|
|
45
|
+
});
|
|
46
|
+
this.on("end", async () => {
|
|
47
|
+
if (dest instanceof Node18UniversalStreamWrapper) {
|
|
48
|
+
dest._end();
|
|
49
|
+
}
|
|
50
|
+
else if (dest instanceof WritableStream) {
|
|
51
|
+
const writer = dest.getWriter();
|
|
52
|
+
writer.close();
|
|
53
|
+
}
|
|
54
|
+
else {
|
|
55
|
+
dest.end();
|
|
56
|
+
}
|
|
57
|
+
});
|
|
58
|
+
this.on("error", async (error) => {
|
|
59
|
+
if (dest instanceof Node18UniversalStreamWrapper) {
|
|
60
|
+
dest._error(error);
|
|
61
|
+
}
|
|
62
|
+
else if (dest instanceof WritableStream) {
|
|
63
|
+
const writer = dest.getWriter();
|
|
64
|
+
writer.abort(error);
|
|
65
|
+
}
|
|
66
|
+
else {
|
|
67
|
+
dest.destroy(error);
|
|
68
|
+
}
|
|
69
|
+
});
|
|
70
|
+
this._startReading();
|
|
71
|
+
return dest;
|
|
72
|
+
}
|
|
73
|
+
pipeTo(dest) {
|
|
74
|
+
return this.pipe(dest);
|
|
75
|
+
}
|
|
76
|
+
unpipe(dest) {
|
|
77
|
+
this.off("data", async (chunk) => {
|
|
78
|
+
if (dest instanceof Node18UniversalStreamWrapper) {
|
|
79
|
+
dest._write(chunk);
|
|
80
|
+
}
|
|
81
|
+
else if (dest instanceof WritableStream) {
|
|
82
|
+
const writer = dest.getWriter();
|
|
83
|
+
writer.write(chunk).then(() => writer.releaseLock());
|
|
84
|
+
}
|
|
85
|
+
else {
|
|
86
|
+
dest.write(chunk);
|
|
87
|
+
}
|
|
88
|
+
});
|
|
89
|
+
this.off("end", async () => {
|
|
90
|
+
if (dest instanceof Node18UniversalStreamWrapper) {
|
|
91
|
+
dest._end();
|
|
92
|
+
}
|
|
93
|
+
else if (dest instanceof WritableStream) {
|
|
94
|
+
const writer = dest.getWriter();
|
|
95
|
+
writer.close();
|
|
96
|
+
}
|
|
97
|
+
else {
|
|
98
|
+
dest.end();
|
|
99
|
+
}
|
|
100
|
+
});
|
|
101
|
+
this.off("error", async (error) => {
|
|
102
|
+
if (dest instanceof Node18UniversalStreamWrapper) {
|
|
103
|
+
dest._error(error);
|
|
104
|
+
}
|
|
105
|
+
else if (dest instanceof WritableStream) {
|
|
106
|
+
const writer = dest.getWriter();
|
|
107
|
+
writer.abort(error);
|
|
108
|
+
}
|
|
109
|
+
else {
|
|
110
|
+
dest.destroy(error);
|
|
111
|
+
}
|
|
112
|
+
});
|
|
113
|
+
}
|
|
114
|
+
destroy(error) {
|
|
115
|
+
this.reader
|
|
116
|
+
.cancel(error)
|
|
117
|
+
.then(() => {
|
|
118
|
+
this._emit("close");
|
|
119
|
+
})
|
|
120
|
+
.catch((err) => {
|
|
121
|
+
this._emit("error", err);
|
|
122
|
+
});
|
|
123
|
+
}
|
|
124
|
+
pause() {
|
|
125
|
+
this.paused = true;
|
|
126
|
+
this._emit("pause");
|
|
127
|
+
}
|
|
128
|
+
resume() {
|
|
129
|
+
if (this.paused) {
|
|
130
|
+
this.paused = false;
|
|
131
|
+
this._emit("resume");
|
|
132
|
+
if (this.resumeCallback) {
|
|
133
|
+
this.resumeCallback();
|
|
134
|
+
this.resumeCallback = null;
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
get isPaused() {
|
|
139
|
+
return this.paused;
|
|
140
|
+
}
|
|
141
|
+
async read() {
|
|
142
|
+
if (this.paused) {
|
|
143
|
+
await new Promise((resolve) => {
|
|
144
|
+
this.resumeCallback = resolve;
|
|
145
|
+
});
|
|
146
|
+
}
|
|
147
|
+
const { done, value } = await this.reader.read();
|
|
148
|
+
if (done) {
|
|
149
|
+
return undefined;
|
|
150
|
+
}
|
|
151
|
+
return value;
|
|
152
|
+
}
|
|
153
|
+
setEncoding(encoding) {
|
|
154
|
+
this.encoding = encoding;
|
|
155
|
+
}
|
|
156
|
+
async text() {
|
|
157
|
+
const chunks = [];
|
|
158
|
+
while (true) {
|
|
159
|
+
const { done, value } = await this.reader.read();
|
|
160
|
+
if (done)
|
|
161
|
+
break;
|
|
162
|
+
if (value)
|
|
163
|
+
chunks.push(value);
|
|
164
|
+
}
|
|
165
|
+
const decoder = new TextDecoder(this.encoding || "utf-8");
|
|
166
|
+
return decoder.decode(await new Blob(chunks).arrayBuffer());
|
|
167
|
+
}
|
|
168
|
+
async json() {
|
|
169
|
+
const text = await this.text();
|
|
170
|
+
return JSON.parse(text);
|
|
171
|
+
}
|
|
172
|
+
_write(chunk) {
|
|
173
|
+
this._emit("data", chunk);
|
|
174
|
+
}
|
|
175
|
+
_end() {
|
|
176
|
+
this._emit("end");
|
|
177
|
+
}
|
|
178
|
+
_error(error) {
|
|
179
|
+
this._emit("error", error);
|
|
180
|
+
}
|
|
181
|
+
_emit(event, data) {
|
|
182
|
+
if (this.events[event]) {
|
|
183
|
+
for (const callback of this.events[event] || []) {
|
|
184
|
+
callback(data);
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
async _startReading() {
|
|
189
|
+
try {
|
|
190
|
+
this._emit("readable");
|
|
191
|
+
while (true) {
|
|
192
|
+
if (this.paused) {
|
|
193
|
+
await new Promise((resolve) => {
|
|
194
|
+
this.resumeCallback = resolve;
|
|
195
|
+
});
|
|
196
|
+
}
|
|
197
|
+
const { done, value } = await this.reader.read();
|
|
198
|
+
if (done) {
|
|
199
|
+
this._emit("end");
|
|
200
|
+
this._emit("close");
|
|
201
|
+
break;
|
|
202
|
+
}
|
|
203
|
+
if (value) {
|
|
204
|
+
this._emit("data", value);
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
catch (error) {
|
|
209
|
+
this._emit("error", error);
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
[Symbol.asyncIterator]() {
|
|
213
|
+
return {
|
|
214
|
+
next: async () => {
|
|
215
|
+
if (this.paused) {
|
|
216
|
+
await new Promise((resolve) => {
|
|
217
|
+
this.resumeCallback = resolve;
|
|
218
|
+
});
|
|
219
|
+
}
|
|
220
|
+
const { done, value } = await this.reader.read();
|
|
221
|
+
if (done) {
|
|
222
|
+
return { done: true, value: undefined };
|
|
223
|
+
}
|
|
224
|
+
return { done: false, value };
|
|
225
|
+
},
|
|
226
|
+
[Symbol.asyncIterator]() {
|
|
227
|
+
return this;
|
|
228
|
+
},
|
|
229
|
+
};
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
exports.Node18UniversalStreamWrapper = Node18UniversalStreamWrapper;
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type { Readable, Writable } from "stream";
|
|
2
|
+
import { EventCallback, StreamWrapper } from "./chooseStreamWrapper";
|
|
3
|
+
export declare class NodePre18StreamWrapper implements StreamWrapper<Writable, Buffer> {
|
|
4
|
+
private readableStream;
|
|
5
|
+
private encoding;
|
|
6
|
+
constructor(readableStream: Readable);
|
|
7
|
+
on(event: string, callback: EventCallback): void;
|
|
8
|
+
off(event: string, callback: EventCallback): void;
|
|
9
|
+
pipe(dest: Writable): Writable;
|
|
10
|
+
pipeTo(dest: Writable): Writable;
|
|
11
|
+
unpipe(dest?: Writable): void;
|
|
12
|
+
destroy(error?: Error): void;
|
|
13
|
+
pause(): void;
|
|
14
|
+
resume(): void;
|
|
15
|
+
get isPaused(): boolean;
|
|
16
|
+
read(): Promise<Buffer | undefined>;
|
|
17
|
+
setEncoding(encoding?: string): void;
|
|
18
|
+
text(): Promise<string>;
|
|
19
|
+
json<T>(): Promise<T>;
|
|
20
|
+
[Symbol.asyncIterator](): AsyncIterableIterator<Buffer>;
|
|
21
|
+
}
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.NodePre18StreamWrapper = void 0;
|
|
4
|
+
class NodePre18StreamWrapper {
|
|
5
|
+
readableStream;
|
|
6
|
+
encoding;
|
|
7
|
+
constructor(readableStream) {
|
|
8
|
+
this.readableStream = readableStream;
|
|
9
|
+
}
|
|
10
|
+
on(event, callback) {
|
|
11
|
+
this.readableStream.on(event, callback);
|
|
12
|
+
}
|
|
13
|
+
off(event, callback) {
|
|
14
|
+
this.readableStream.off(event, callback);
|
|
15
|
+
}
|
|
16
|
+
pipe(dest) {
|
|
17
|
+
this.readableStream.pipe(dest);
|
|
18
|
+
return dest;
|
|
19
|
+
}
|
|
20
|
+
pipeTo(dest) {
|
|
21
|
+
return this.pipe(dest);
|
|
22
|
+
}
|
|
23
|
+
unpipe(dest) {
|
|
24
|
+
if (dest) {
|
|
25
|
+
this.readableStream.unpipe(dest);
|
|
26
|
+
}
|
|
27
|
+
else {
|
|
28
|
+
this.readableStream.unpipe();
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
destroy(error) {
|
|
32
|
+
this.readableStream.destroy(error);
|
|
33
|
+
}
|
|
34
|
+
pause() {
|
|
35
|
+
this.readableStream.pause();
|
|
36
|
+
}
|
|
37
|
+
resume() {
|
|
38
|
+
this.readableStream.resume();
|
|
39
|
+
}
|
|
40
|
+
get isPaused() {
|
|
41
|
+
return this.readableStream.isPaused();
|
|
42
|
+
}
|
|
43
|
+
async read() {
|
|
44
|
+
return new Promise((resolve, reject) => {
|
|
45
|
+
const chunk = this.readableStream.read();
|
|
46
|
+
if (chunk) {
|
|
47
|
+
resolve(chunk);
|
|
48
|
+
}
|
|
49
|
+
else {
|
|
50
|
+
this.readableStream.once("readable", () => {
|
|
51
|
+
const chunk = this.readableStream.read();
|
|
52
|
+
resolve(chunk);
|
|
53
|
+
});
|
|
54
|
+
this.readableStream.once("error", reject);
|
|
55
|
+
}
|
|
56
|
+
});
|
|
57
|
+
}
|
|
58
|
+
setEncoding(encoding) {
|
|
59
|
+
this.readableStream.setEncoding(encoding);
|
|
60
|
+
this.encoding = encoding;
|
|
61
|
+
}
|
|
62
|
+
async text() {
|
|
63
|
+
const chunks = [];
|
|
64
|
+
const encoder = new TextEncoder();
|
|
65
|
+
this.readableStream.setEncoding((this.encoding || "utf-8"));
|
|
66
|
+
for await (const chunk of this.readableStream) {
|
|
67
|
+
chunks.push(encoder.encode(chunk));
|
|
68
|
+
}
|
|
69
|
+
const decoder = new TextDecoder(this.encoding || "utf-8");
|
|
70
|
+
return decoder.decode(Buffer.concat(chunks));
|
|
71
|
+
}
|
|
72
|
+
async json() {
|
|
73
|
+
const text = await this.text();
|
|
74
|
+
return JSON.parse(text);
|
|
75
|
+
}
|
|
76
|
+
[Symbol.asyncIterator]() {
|
|
77
|
+
const readableStream = this.readableStream;
|
|
78
|
+
const iterator = readableStream[Symbol.asyncIterator]();
|
|
79
|
+
// Create and return an async iterator that yields buffers
|
|
80
|
+
return {
|
|
81
|
+
async next() {
|
|
82
|
+
const { value, done } = await iterator.next();
|
|
83
|
+
return { value: value, done };
|
|
84
|
+
},
|
|
85
|
+
[Symbol.asyncIterator]() {
|
|
86
|
+
return this;
|
|
87
|
+
},
|
|
88
|
+
};
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
exports.NodePre18StreamWrapper = NodePre18StreamWrapper;
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { StreamWrapper } from "./chooseStreamWrapper";
|
|
2
|
+
type EventCallback = (data?: any) => void;
|
|
3
|
+
export declare class UndiciStreamWrapper<ReadFormat extends Uint8Array | Uint16Array | Uint32Array> implements StreamWrapper<UndiciStreamWrapper<ReadFormat> | WritableStream<ReadFormat>, ReadFormat> {
|
|
4
|
+
private readableStream;
|
|
5
|
+
private reader;
|
|
6
|
+
private events;
|
|
7
|
+
private paused;
|
|
8
|
+
private resumeCallback;
|
|
9
|
+
private encoding;
|
|
10
|
+
constructor(readableStream: ReadableStream<ReadFormat>);
|
|
11
|
+
on(event: string, callback: EventCallback): void;
|
|
12
|
+
off(event: string, callback: EventCallback): void;
|
|
13
|
+
pipe(dest: UndiciStreamWrapper<ReadFormat> | WritableStream<ReadFormat>): UndiciStreamWrapper<ReadFormat> | WritableStream<ReadFormat>;
|
|
14
|
+
pipeTo(dest: UndiciStreamWrapper<ReadFormat> | WritableStream<ReadFormat>): UndiciStreamWrapper<ReadFormat> | WritableStream<ReadFormat>;
|
|
15
|
+
unpipe(dest: UndiciStreamWrapper<ReadFormat> | WritableStream<any>): void;
|
|
16
|
+
destroy(error?: Error): void;
|
|
17
|
+
pause(): void;
|
|
18
|
+
resume(): void;
|
|
19
|
+
get isPaused(): boolean;
|
|
20
|
+
read(): Promise<ReadFormat | undefined>;
|
|
21
|
+
setEncoding(encoding: string): void;
|
|
22
|
+
text(): Promise<string>;
|
|
23
|
+
json<T>(): Promise<T>;
|
|
24
|
+
private _write;
|
|
25
|
+
private _end;
|
|
26
|
+
private _error;
|
|
27
|
+
private _emit;
|
|
28
|
+
private _startReading;
|
|
29
|
+
[Symbol.asyncIterator](): AsyncIterableIterator<ReadFormat>;
|
|
30
|
+
}
|
|
31
|
+
export {};
|