@temporary-name/standard-server 1.9.3-alpha.b7ce8fb6e9463a26fd2564cb172dc612ae4de52d → 1.9.3-alpha.c13915862ce0feb161cb37a7c0da5ab7d57bd1bf

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/dist/index.d.mts CHANGED
@@ -1,4 +1,4 @@
1
- import { AsyncIteratorClass, StandardHeaders, StandardLazyResponse } from '@temporary-name/shared';
1
+ import { AsyncIteratorClass, StandardLazyResponse } from '@temporary-name/shared';
2
2
 
3
3
  interface EventMessage {
4
4
  event: string | undefined;
@@ -69,10 +69,9 @@ declare class HibernationEventIterator<T, TReturn = unknown, TNext = unknown> ex
69
69
 
70
70
  declare function generateContentDisposition(filename: string): string;
71
71
  declare function getFilenameFromContentDisposition(contentDisposition: string): string | undefined;
72
- declare function mergeStandardHeaders(a: StandardHeaders, b: StandardHeaders): StandardHeaders;
73
- declare function flattenHeader(header: string | readonly string[] | undefined): string | undefined;
72
+ declare function maybeSetHeader(headers: Headers, name: string, value: string | readonly string[] | null | undefined): void;
73
+ declare function setHeaderArray(headers: Headers, name: string, values: readonly string[]): void;
74
74
  declare function replicateStandardLazyResponse(response: StandardLazyResponse, count: number): StandardLazyResponse[];
75
- declare function isEventIteratorHeaders(headers: StandardHeaders): boolean;
76
75
 
77
- export { ErrorEvent, EventDecoder, EventDecoderError, EventDecoderStream, EventEncoderError, HibernationEventIterator, assertEventComment, assertEventId, assertEventName, assertEventRetry, decodeEventMessage, encodeEventComments, encodeEventData, encodeEventMessage, flattenHeader, generateContentDisposition, getEventMeta, getFilenameFromContentDisposition, isEventIteratorHeaders, mapEventIterator, mergeStandardHeaders, replicateStandardLazyResponse, withEventMeta };
76
+ export { ErrorEvent, EventDecoder, EventDecoderError, EventDecoderStream, EventEncoderError, HibernationEventIterator, assertEventComment, assertEventId, assertEventName, assertEventRetry, decodeEventMessage, encodeEventComments, encodeEventData, encodeEventMessage, generateContentDisposition, getEventMeta, getFilenameFromContentDisposition, mapEventIterator, maybeSetHeader, replicateStandardLazyResponse, setHeaderArray, withEventMeta };
78
77
  export type { ErrorEventOptions, EventDecoderOptions, EventMessage, EventMeta, HibernationEventIteratorCallback };
package/dist/index.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- import { AsyncIteratorClass, StandardHeaders, StandardLazyResponse } from '@temporary-name/shared';
1
+ import { AsyncIteratorClass, StandardLazyResponse } from '@temporary-name/shared';
2
2
 
3
3
  interface EventMessage {
4
4
  event: string | undefined;
@@ -69,10 +69,9 @@ declare class HibernationEventIterator<T, TReturn = unknown, TNext = unknown> ex
69
69
 
70
70
  declare function generateContentDisposition(filename: string): string;
71
71
  declare function getFilenameFromContentDisposition(contentDisposition: string): string | undefined;
72
- declare function mergeStandardHeaders(a: StandardHeaders, b: StandardHeaders): StandardHeaders;
73
- declare function flattenHeader(header: string | readonly string[] | undefined): string | undefined;
72
+ declare function maybeSetHeader(headers: Headers, name: string, value: string | readonly string[] | null | undefined): void;
73
+ declare function setHeaderArray(headers: Headers, name: string, values: readonly string[]): void;
74
74
  declare function replicateStandardLazyResponse(response: StandardLazyResponse, count: number): StandardLazyResponse[];
75
- declare function isEventIteratorHeaders(headers: StandardHeaders): boolean;
76
75
 
77
- export { ErrorEvent, EventDecoder, EventDecoderError, EventDecoderStream, EventEncoderError, HibernationEventIterator, assertEventComment, assertEventId, assertEventName, assertEventRetry, decodeEventMessage, encodeEventComments, encodeEventData, encodeEventMessage, flattenHeader, generateContentDisposition, getEventMeta, getFilenameFromContentDisposition, isEventIteratorHeaders, mapEventIterator, mergeStandardHeaders, replicateStandardLazyResponse, withEventMeta };
76
+ export { ErrorEvent, EventDecoder, EventDecoderError, EventDecoderStream, EventEncoderError, HibernationEventIterator, assertEventComment, assertEventId, assertEventName, assertEventRetry, decodeEventMessage, encodeEventComments, encodeEventData, encodeEventMessage, generateContentDisposition, getEventMeta, getFilenameFromContentDisposition, mapEventIterator, maybeSetHeader, replicateStandardLazyResponse, setHeaderArray, withEventMeta };
78
77
  export type { ErrorEventOptions, EventDecoderOptions, EventMessage, EventMeta, HibernationEventIteratorCallback };
package/dist/index.mjs CHANGED
@@ -1,4 +1,4 @@
1
- import { isTypescriptObject, AsyncIteratorClass, tryDecodeURIComponent, toArray, once, isAsyncIteratorObject, replicateAsyncIterator } from '@temporary-name/shared';
1
+ import { isTypescriptObject, AsyncIteratorClass, tryDecodeURIComponent, once, isAsyncIteratorObject, replicateAsyncIterator } from '@temporary-name/shared';
2
2
 
3
3
  class EventEncoderError extends TypeError {
4
4
  }
@@ -259,31 +259,18 @@ function getFilenameFromContentDisposition(contentDisposition) {
259
259
  return encodedFilenameMatch[1].replace(/\\"/g, '"');
260
260
  }
261
261
  }
262
- function mergeStandardHeaders(a, b) {
263
- const merged = { ...a };
264
- for (const key in b) {
265
- if (Array.isArray(b[key])) {
266
- merged[key] = [...toArray(merged[key]), ...b[key]];
267
- } else if (b[key] !== void 0) {
268
- if (Array.isArray(merged[key])) {
269
- merged[key] = [...merged[key], b[key]];
270
- } else if (merged[key] !== void 0) {
271
- merged[key] = [merged[key], b[key]];
272
- } else {
273
- merged[key] = b[key];
274
- }
275
- }
262
+ function maybeSetHeader(headers, name, value) {
263
+ if (typeof value === "string") {
264
+ headers.set(name, value);
265
+ } else if (value != null) {
266
+ setHeaderArray(headers, name, value);
276
267
  }
277
- return merged;
278
268
  }
279
- function flattenHeader(header) {
280
- if (typeof header === "string" || header === void 0) {
281
- return header;
282
- }
283
- if (header.length === 0) {
284
- return void 0;
269
+ function setHeaderArray(headers, name, values) {
270
+ headers.delete(name);
271
+ for (const value of values) {
272
+ headers.append(name, value);
285
273
  }
286
- return header.join(", ");
287
274
  }
288
275
  function replicateStandardLazyResponse(response, count) {
289
276
  const replicated = [];
@@ -304,10 +291,5 @@ function replicateStandardLazyResponse(response, count) {
304
291
  }
305
292
  return replicated;
306
293
  }
307
- function isEventIteratorHeaders(headers) {
308
- return Boolean(
309
- flattenHeader(headers["content-type"])?.startsWith("text/event-stream") && flattenHeader(headers["content-disposition"]) === void 0
310
- );
311
- }
312
294
 
313
- export { ErrorEvent, EventDecoder, EventDecoderError, EventDecoderStream, EventEncoderError, HibernationEventIterator, assertEventComment, assertEventId, assertEventName, assertEventRetry, decodeEventMessage, encodeEventComments, encodeEventData, encodeEventMessage, flattenHeader, generateContentDisposition, getEventMeta, getFilenameFromContentDisposition, isEventIteratorHeaders, mapEventIterator, mergeStandardHeaders, replicateStandardLazyResponse, withEventMeta };
295
+ export { ErrorEvent, EventDecoder, EventDecoderError, EventDecoderStream, EventEncoderError, HibernationEventIterator, assertEventComment, assertEventId, assertEventName, assertEventRetry, decodeEventMessage, encodeEventComments, encodeEventData, encodeEventMessage, generateContentDisposition, getEventMeta, getFilenameFromContentDisposition, mapEventIterator, maybeSetHeader, replicateStandardLazyResponse, setHeaderArray, withEventMeta };
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@temporary-name/standard-server",
3
3
  "type": "module",
4
- "version": "1.9.3-alpha.b7ce8fb6e9463a26fd2564cb172dc612ae4de52d",
4
+ "version": "1.9.3-alpha.c13915862ce0feb161cb37a7c0da5ab7d57bd1bf",
5
5
  "license": "MIT",
6
6
  "homepage": "https://www.stainless.com/",
7
7
  "repository": {
@@ -17,18 +17,13 @@
17
17
  "types": "./dist/index.d.mts",
18
18
  "import": "./dist/index.mjs",
19
19
  "default": "./dist/index.mjs"
20
- },
21
- "./batch": {
22
- "types": "./dist/batch/index.d.mts",
23
- "import": "./dist/batch/index.mjs",
24
- "default": "./dist/batch/index.mjs"
25
20
  }
26
21
  },
27
22
  "files": [
28
23
  "dist"
29
24
  ],
30
25
  "dependencies": {
31
- "@temporary-name/shared": "1.9.3-alpha.b7ce8fb6e9463a26fd2564cb172dc612ae4de52d"
26
+ "@temporary-name/shared": "1.9.3-alpha.c13915862ce0feb161cb37a7c0da5ab7d57bd1bf"
32
27
  },
33
28
  "scripts": {
34
29
  "build": "unbuild",
@@ -1,29 +0,0 @@
1
- import { StandardHeaders, StandardRequest, StandardResponse, Promisable } from '@temporary-name/shared';
2
-
3
- interface ToBatchRequestOptions {
4
- url: URL;
5
- method: 'GET' | 'POST';
6
- headers: StandardHeaders;
7
- requests: readonly StandardRequest[];
8
- }
9
- declare function toBatchRequest(options: ToBatchRequestOptions): StandardRequest;
10
- declare function parseBatchRequest(request: StandardRequest): StandardRequest[];
11
-
12
- type BatchResponseMode = 'streaming' | 'buffered';
13
- interface BatchResponseBodyItem extends StandardResponse {
14
- index: number;
15
- }
16
- interface ToBatchResponseOptions extends StandardResponse {
17
- body: AsyncIteratorObject<BatchResponseBodyItem>;
18
- /**
19
- * @default 'streaming'
20
- */
21
- mode?: BatchResponseMode;
22
- }
23
- declare function toBatchResponse(options: ToBatchResponseOptions): Promisable<StandardResponse>;
24
- declare function parseBatchResponse(response: StandardResponse): AsyncGenerator<BatchResponseBodyItem>;
25
-
26
- declare function toBatchAbortSignal(signals: readonly (AbortSignal | undefined)[]): AbortSignal | undefined;
27
-
28
- export { parseBatchRequest, parseBatchResponse, toBatchAbortSignal, toBatchRequest, toBatchResponse };
29
- export type { BatchResponseBodyItem, BatchResponseMode, ToBatchRequestOptions, ToBatchResponseOptions };
@@ -1,29 +0,0 @@
1
- import { StandardHeaders, StandardRequest, StandardResponse, Promisable } from '@temporary-name/shared';
2
-
3
- interface ToBatchRequestOptions {
4
- url: URL;
5
- method: 'GET' | 'POST';
6
- headers: StandardHeaders;
7
- requests: readonly StandardRequest[];
8
- }
9
- declare function toBatchRequest(options: ToBatchRequestOptions): StandardRequest;
10
- declare function parseBatchRequest(request: StandardRequest): StandardRequest[];
11
-
12
- type BatchResponseMode = 'streaming' | 'buffered';
13
- interface BatchResponseBodyItem extends StandardResponse {
14
- index: number;
15
- }
16
- interface ToBatchResponseOptions extends StandardResponse {
17
- body: AsyncIteratorObject<BatchResponseBodyItem>;
18
- /**
19
- * @default 'streaming'
20
- */
21
- mode?: BatchResponseMode;
22
- }
23
- declare function toBatchResponse(options: ToBatchResponseOptions): Promisable<StandardResponse>;
24
- declare function parseBatchResponse(response: StandardResponse): AsyncGenerator<BatchResponseBodyItem>;
25
-
26
- declare function toBatchAbortSignal(signals: readonly (AbortSignal | undefined)[]): AbortSignal | undefined;
27
-
28
- export { parseBatchRequest, parseBatchResponse, toBatchAbortSignal, toBatchRequest, toBatchResponse };
29
- export type { BatchResponseBodyItem, BatchResponseMode, ToBatchRequestOptions, ToBatchResponseOptions };
@@ -1,156 +0,0 @@
1
- import { stringifyJSON, parseEmptyableJSON, AsyncIteratorClass, isAsyncIteratorObject, isObject } from '@temporary-name/shared';
2
-
3
- function toBatchAbortSignal(signals) {
4
- const realSignals = signals.filter((signal) => signal !== void 0);
5
- if (realSignals.length === 0 || realSignals.length !== signals.length) {
6
- return void 0;
7
- }
8
- const controller = new AbortController();
9
- const abortIfAllInputsAborted = () => {
10
- if (realSignals.every((signal) => signal.aborted)) {
11
- controller.abort();
12
- }
13
- };
14
- abortIfAllInputsAborted();
15
- for (const signal of realSignals) {
16
- signal.addEventListener(
17
- "abort",
18
- () => {
19
- abortIfAllInputsAborted();
20
- },
21
- {
22
- once: true,
23
- signal: controller.signal
24
- }
25
- );
26
- }
27
- return controller.signal;
28
- }
29
-
30
- function toBatchRequest(options) {
31
- const url = new URL(options.url);
32
- let body;
33
- const batchRequestItems = options.requests.map(
34
- (request) => ({
35
- body: request.body,
36
- headers: Object.keys(request.headers).length ? request.headers : void 0,
37
- method: request.method === options.method ? void 0 : request.method,
38
- url: request.url
39
- })
40
- );
41
- if (options.method === "GET") {
42
- url.searchParams.append("batch", stringifyJSON(batchRequestItems));
43
- } else if (options.method === "POST") {
44
- body = batchRequestItems;
45
- }
46
- return {
47
- method: options.method,
48
- url,
49
- headers: options.headers,
50
- body,
51
- signal: toBatchAbortSignal(options.requests.map((request) => request.signal))
52
- };
53
- }
54
- function parseBatchRequest(request) {
55
- const items = request.method === "GET" ? parseEmptyableJSON(request.url.searchParams.getAll("batch").at(-1)) : request.body;
56
- if (!Array.isArray(items)) {
57
- throw new TypeError("Invalid batch request");
58
- }
59
- return items.map((item) => {
60
- return {
61
- method: item.method ?? request.method,
62
- url: new URL(item.url),
63
- headers: item.headers ?? {},
64
- body: item.body,
65
- signal: request.signal
66
- };
67
- });
68
- }
69
-
70
- function toBatchResponse(options) {
71
- const mode = options.mode ?? "streaming";
72
- const minifyResponseItem = (item) => {
73
- return {
74
- index: item.index,
75
- status: item.status === options.status ? void 0 : item.status,
76
- headers: Object.keys(item.headers).length ? item.headers : void 0,
77
- body: item.body
78
- };
79
- };
80
- if (mode === "buffered") {
81
- return (async () => {
82
- try {
83
- const body = [];
84
- for await (const item of options.body) {
85
- body.push(minifyResponseItem(item));
86
- }
87
- return {
88
- headers: options.headers,
89
- status: options.status,
90
- body
91
- };
92
- } finally {
93
- await options.body.return?.();
94
- }
95
- })();
96
- }
97
- return {
98
- headers: options.headers,
99
- status: options.status,
100
- body: new AsyncIteratorClass(
101
- async () => {
102
- const { done, value } = await options.body.next();
103
- if (done) {
104
- return { done, value };
105
- }
106
- return {
107
- done,
108
- value: {
109
- index: value.index,
110
- status: value.status === options.status ? void 0 : value.status,
111
- headers: Object.keys(value.headers).length ? value.headers : void 0,
112
- body: value.body
113
- }
114
- };
115
- },
116
- async (reason) => {
117
- if (reason !== "next") {
118
- await options.body.return?.();
119
- }
120
- }
121
- )
122
- };
123
- }
124
- function parseBatchResponse(response) {
125
- const body = response.body;
126
- if (isAsyncIteratorObject(body) || Array.isArray(body)) {
127
- const iterator = (async function* () {
128
- for await (const item of body) {
129
- if (!isObject(item) || !("index" in item) || typeof item.index !== "number") {
130
- throw new TypeError("Invalid batch response", {
131
- cause: item
132
- });
133
- }
134
- yield {
135
- index: item.index,
136
- status: item.status ?? response.status,
137
- headers: item.headers ?? {},
138
- body: item.body
139
- };
140
- }
141
- })();
142
- return new AsyncIteratorClass(
143
- () => iterator.next(),
144
- async (reason) => {
145
- if (reason !== "next" && isAsyncIteratorObject(body)) {
146
- await body.return?.();
147
- }
148
- }
149
- );
150
- }
151
- throw new TypeError("Invalid batch response", {
152
- cause: response
153
- });
154
- }
155
-
156
- export { parseBatchRequest, parseBatchResponse, toBatchAbortSignal, toBatchRequest, toBatchResponse };