@effect/platform 0.85.1 → 0.86.0
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/cjs/HttpApiBuilder.js +15 -5
- package/dist/cjs/HttpApiBuilder.js.map +1 -1
- package/dist/cjs/HttpApiSchema.js +8 -10
- package/dist/cjs/HttpApiSchema.js.map +1 -1
- package/dist/cjs/HttpIncomingMessage.js +7 -5
- package/dist/cjs/HttpIncomingMessage.js.map +1 -1
- package/dist/cjs/HttpServerRequest.js +10 -4
- package/dist/cjs/HttpServerRequest.js.map +1 -1
- package/dist/cjs/Multipart.js +400 -47
- package/dist/cjs/Multipart.js.map +1 -1
- package/dist/dts/HttpApiBuilder.d.ts.map +1 -1
- package/dist/dts/HttpApiSchema.d.ts +19 -4
- package/dist/dts/HttpApiSchema.d.ts.map +1 -1
- package/dist/dts/HttpIncomingMessage.d.ts +5 -2
- package/dist/dts/HttpIncomingMessage.d.ts.map +1 -1
- package/dist/dts/HttpServerRequest.d.ts +6 -1
- package/dist/dts/HttpServerRequest.d.ts.map +1 -1
- package/dist/dts/Multipart.d.ts +167 -88
- package/dist/dts/Multipart.d.ts.map +1 -1
- package/dist/esm/HttpApiBuilder.js +15 -5
- package/dist/esm/HttpApiBuilder.js.map +1 -1
- package/dist/esm/HttpApiSchema.js +8 -10
- package/dist/esm/HttpApiSchema.js.map +1 -1
- package/dist/esm/HttpIncomingMessage.js +5 -4
- package/dist/esm/HttpIncomingMessage.js.map +1 -1
- package/dist/esm/HttpServerRequest.js +6 -1
- package/dist/esm/HttpServerRequest.js.map +1 -1
- package/dist/esm/Multipart.js +385 -46
- package/dist/esm/Multipart.js.map +1 -1
- package/package.json +2 -2
- package/src/HttpApiBuilder.ts +16 -5
- package/src/HttpApiSchema.ts +25 -11
- package/src/HttpIncomingMessage.ts +5 -7
- package/src/HttpServerRequest.ts +6 -1
- package/src/Multipart.ts +632 -128
- package/dist/cjs/internal/multipart.js +0 -364
- package/dist/cjs/internal/multipart.js.map +0 -1
- package/dist/dts/internal/multipart.d.ts +0 -2
- package/dist/dts/internal/multipart.d.ts.map +0 -1
- package/dist/esm/internal/multipart.js +0 -347
- package/dist/esm/internal/multipart.js.map +0 -1
- package/src/internal/multipart.ts +0 -491
package/dist/esm/Multipart.js
CHANGED
|
@@ -1,121 +1,460 @@
|
|
|
1
|
-
import * as
|
|
1
|
+
import * as Channel from "effect/Channel";
|
|
2
|
+
import * as Chunk from "effect/Chunk";
|
|
3
|
+
import * as Context from "effect/Context";
|
|
4
|
+
import * as Effect from "effect/Effect";
|
|
5
|
+
import * as Exit from "effect/Exit";
|
|
6
|
+
import { constant, dual } from "effect/Function";
|
|
7
|
+
import * as Inspectable from "effect/Inspectable";
|
|
8
|
+
import * as Mailbox from "effect/Mailbox";
|
|
9
|
+
import * as Option from "effect/Option";
|
|
10
|
+
import * as Predicate from "effect/Predicate";
|
|
11
|
+
import * as Schema from "effect/Schema";
|
|
12
|
+
import * as Stream from "effect/Stream";
|
|
13
|
+
import * as MP from "multipasta";
|
|
14
|
+
import * as FileSystem from "./FileSystem.js";
|
|
15
|
+
import * as IncomingMessage from "./HttpIncomingMessage.js";
|
|
16
|
+
import * as Path from "./Path.js";
|
|
2
17
|
/**
|
|
3
18
|
* @since 1.0.0
|
|
4
19
|
* @category type ids
|
|
5
20
|
*/
|
|
6
|
-
export const TypeId =
|
|
21
|
+
export const TypeId = /*#__PURE__*/Symbol.for("@effect/platform/Multipart");
|
|
7
22
|
/**
|
|
8
23
|
* @since 1.0.0
|
|
9
|
-
* @category
|
|
24
|
+
* @category Guards
|
|
10
25
|
*/
|
|
11
|
-
export const isPart =
|
|
26
|
+
export const isPart = u => Predicate.hasProperty(u, TypeId);
|
|
12
27
|
/**
|
|
13
28
|
* @since 1.0.0
|
|
14
|
-
* @category
|
|
29
|
+
* @category Guards
|
|
15
30
|
*/
|
|
16
|
-
export const isField =
|
|
31
|
+
export const isField = u => isPart(u) && u._tag === "Field";
|
|
17
32
|
/**
|
|
18
33
|
* @since 1.0.0
|
|
19
|
-
* @category
|
|
34
|
+
* @category Guards
|
|
20
35
|
*/
|
|
21
|
-
export const isFile =
|
|
36
|
+
export const isFile = u => isPart(u) && u._tag === "File";
|
|
22
37
|
/**
|
|
23
38
|
* @since 1.0.0
|
|
24
|
-
* @category
|
|
39
|
+
* @category Guards
|
|
25
40
|
*/
|
|
26
|
-
export const isPersistedFile =
|
|
41
|
+
export const isPersistedFile = u => Predicate.hasProperty(u, TypeId) && Predicate.isTagged(u, "PersistedFile");
|
|
27
42
|
/**
|
|
28
43
|
* @since 1.0.0
|
|
29
|
-
* @category
|
|
44
|
+
* @category Errors
|
|
30
45
|
*/
|
|
31
|
-
export const ErrorTypeId =
|
|
46
|
+
export const ErrorTypeId = /*#__PURE__*/Symbol.for("@effect/platform/Multipart/MultipartError");
|
|
32
47
|
/**
|
|
33
48
|
* @since 1.0.0
|
|
34
|
-
* @category
|
|
49
|
+
* @category Errors
|
|
35
50
|
*/
|
|
36
|
-
export
|
|
51
|
+
export class MultipartError extends /*#__PURE__*/Schema.TaggedError()("MultipartError", {
|
|
52
|
+
reason: /*#__PURE__*/Schema.Literal("FileTooLarge", "FieldTooLarge", "BodyTooLarge", "TooManyParts", "InternalError", "Parse"),
|
|
53
|
+
cause: Schema.Defect
|
|
54
|
+
}) {
|
|
55
|
+
/**
|
|
56
|
+
* @since 1.0.0
|
|
57
|
+
*/
|
|
58
|
+
[ErrorTypeId] = ErrorTypeId;
|
|
59
|
+
/**
|
|
60
|
+
* @since 1.0.0
|
|
61
|
+
*/
|
|
62
|
+
get message() {
|
|
63
|
+
return this.reason;
|
|
64
|
+
}
|
|
65
|
+
}
|
|
37
66
|
/**
|
|
38
67
|
* @since 1.0.0
|
|
39
|
-
* @category
|
|
68
|
+
* @category Schemas
|
|
40
69
|
*/
|
|
41
|
-
export const
|
|
70
|
+
export const FileSchema = /*#__PURE__*/Schema.declare(isPersistedFile, {
|
|
71
|
+
identifier: "PersistedFile",
|
|
72
|
+
jsonSchema: {
|
|
73
|
+
type: "string",
|
|
74
|
+
format: "binary"
|
|
75
|
+
}
|
|
76
|
+
});
|
|
42
77
|
/**
|
|
43
78
|
* @since 1.0.0
|
|
44
|
-
* @category
|
|
79
|
+
* @category Schemas
|
|
45
80
|
*/
|
|
46
|
-
export const
|
|
81
|
+
export const FilesSchema = /*#__PURE__*/Schema.Array(FileSchema);
|
|
47
82
|
/**
|
|
48
83
|
* @since 1.0.0
|
|
49
|
-
* @category
|
|
84
|
+
* @category Schemas
|
|
50
85
|
*/
|
|
51
|
-
export const
|
|
86
|
+
export const SingleFileSchema = /*#__PURE__*/Schema.transform(/*#__PURE__*/FilesSchema.pipe(/*#__PURE__*/Schema.itemsCount(1)), FileSchema, {
|
|
87
|
+
strict: true,
|
|
88
|
+
decode: ([file]) => file,
|
|
89
|
+
encode: file => [file]
|
|
90
|
+
});
|
|
52
91
|
/**
|
|
53
92
|
* @since 1.0.0
|
|
54
|
-
* @category
|
|
93
|
+
* @category Schemas
|
|
55
94
|
*/
|
|
56
|
-
export const
|
|
95
|
+
export const schemaPersisted = (schema, options) => Schema.decodeUnknown(schema, options);
|
|
57
96
|
/**
|
|
58
97
|
* @since 1.0.0
|
|
59
|
-
* @category
|
|
98
|
+
* @category Schemas
|
|
60
99
|
*/
|
|
61
|
-
export const
|
|
100
|
+
export const schemaJson = (schema, options) => {
|
|
101
|
+
const fromJson = Schema.parseJson(schema);
|
|
102
|
+
return dual(2, (persisted, field) => Effect.map(Schema.decodeUnknown(Schema.Struct({
|
|
103
|
+
[field]: fromJson
|
|
104
|
+
}), options)(persisted), _ => _[field]));
|
|
105
|
+
};
|
|
62
106
|
/**
|
|
63
107
|
* @since 1.0.0
|
|
64
|
-
* @category
|
|
108
|
+
* @category Config
|
|
65
109
|
*/
|
|
66
|
-
export const
|
|
110
|
+
export const makeConfig = headers => Effect.withFiberRuntime(fiber => {
|
|
111
|
+
const mimeTypes = Context.get(fiber.currentContext, FieldMimeTypes);
|
|
112
|
+
return Effect.succeed({
|
|
113
|
+
headers,
|
|
114
|
+
maxParts: Option.getOrUndefined(Context.get(fiber.currentContext, MaxParts)),
|
|
115
|
+
maxFieldSize: Number(Context.get(fiber.currentContext, MaxFieldSize)),
|
|
116
|
+
maxPartSize: Context.get(fiber.currentContext, MaxFileSize).pipe(Option.map(Number), Option.getOrUndefined),
|
|
117
|
+
maxTotalSize: Context.get(fiber.currentContext, IncomingMessage.MaxBodySize).pipe(Option.map(Number), Option.getOrUndefined),
|
|
118
|
+
isFile: mimeTypes.length === 0 ? undefined : info => !Chunk.some(mimeTypes, _ => info.contentType.includes(_)) && MP.defaultIsFile(info)
|
|
119
|
+
});
|
|
120
|
+
});
|
|
121
|
+
/**
|
|
122
|
+
* @since 1.0.0
|
|
123
|
+
* @category Parsers
|
|
124
|
+
*/
|
|
125
|
+
export const makeChannel = (headers, bufferSize = 16) => Channel.acquireUseRelease(Effect.all([makeConfig(headers), Mailbox.make(bufferSize)]), ([config, mailbox]) => {
|
|
126
|
+
let partsBuffer = [];
|
|
127
|
+
let exit = Option.none();
|
|
128
|
+
const input = {
|
|
129
|
+
awaitRead: () => Effect.void,
|
|
130
|
+
emit(element) {
|
|
131
|
+
return mailbox.offer(element);
|
|
132
|
+
},
|
|
133
|
+
error(cause) {
|
|
134
|
+
exit = Option.some(Exit.failCause(cause));
|
|
135
|
+
return mailbox.end;
|
|
136
|
+
},
|
|
137
|
+
done(_value) {
|
|
138
|
+
return mailbox.end;
|
|
139
|
+
}
|
|
140
|
+
};
|
|
141
|
+
const parser = MP.make({
|
|
142
|
+
...config,
|
|
143
|
+
onField(info, value) {
|
|
144
|
+
partsBuffer.push(new FieldImpl(info.name, info.contentType, MP.decodeField(info, value)));
|
|
145
|
+
},
|
|
146
|
+
onFile(info) {
|
|
147
|
+
let chunks = [];
|
|
148
|
+
let finished = false;
|
|
149
|
+
const take = Channel.suspend(() => {
|
|
150
|
+
if (chunks.length === 0) {
|
|
151
|
+
return finished ? Channel.void : Channel.zipRight(pump, take);
|
|
152
|
+
}
|
|
153
|
+
const chunk = Chunk.unsafeFromArray(chunks);
|
|
154
|
+
chunks = [];
|
|
155
|
+
return finished ? Channel.write(chunk) : Channel.zipRight(Channel.write(chunk), Channel.zipRight(pump, take));
|
|
156
|
+
});
|
|
157
|
+
partsBuffer.push(new FileImpl(info, take));
|
|
158
|
+
return function (chunk) {
|
|
159
|
+
if (chunk === null) {
|
|
160
|
+
finished = true;
|
|
161
|
+
} else {
|
|
162
|
+
chunks.push(chunk);
|
|
163
|
+
}
|
|
164
|
+
};
|
|
165
|
+
},
|
|
166
|
+
onError(error_) {
|
|
167
|
+
exit = Option.some(Exit.fail(convertError(error_)));
|
|
168
|
+
},
|
|
169
|
+
onDone() {
|
|
170
|
+
exit = Option.some(Exit.void);
|
|
171
|
+
}
|
|
172
|
+
});
|
|
173
|
+
const pump = Channel.flatMap(mailbox.takeAll, ([chunks, done]) => Channel.sync(() => {
|
|
174
|
+
Chunk.forEach(chunks, Chunk.forEach(parser.write));
|
|
175
|
+
if (done) {
|
|
176
|
+
parser.end();
|
|
177
|
+
}
|
|
178
|
+
}));
|
|
179
|
+
const partsChannel = Channel.flatMap(pump, () => {
|
|
180
|
+
if (partsBuffer.length === 0) {
|
|
181
|
+
return exit._tag === "None" ? partsChannel : writeExit(exit.value);
|
|
182
|
+
}
|
|
183
|
+
const chunk = Chunk.unsafeFromArray(partsBuffer);
|
|
184
|
+
partsBuffer = [];
|
|
185
|
+
return Channel.zipRight(Channel.write(chunk), exit._tag === "None" ? partsChannel : writeExit(exit.value));
|
|
186
|
+
});
|
|
187
|
+
return Channel.embedInput(partsChannel, input);
|
|
188
|
+
}, ([, mailbox]) => mailbox.shutdown);
|
|
189
|
+
const writeExit = self => self._tag === "Success" ? Channel.void : Channel.failCause(self.cause);
|
|
190
|
+
function convertError(cause) {
|
|
191
|
+
switch (cause._tag) {
|
|
192
|
+
case "ReachedLimit":
|
|
193
|
+
{
|
|
194
|
+
switch (cause.limit) {
|
|
195
|
+
case "MaxParts":
|
|
196
|
+
{
|
|
197
|
+
return new MultipartError({
|
|
198
|
+
reason: "TooManyParts",
|
|
199
|
+
cause
|
|
200
|
+
});
|
|
201
|
+
}
|
|
202
|
+
case "MaxFieldSize":
|
|
203
|
+
{
|
|
204
|
+
return new MultipartError({
|
|
205
|
+
reason: "FieldTooLarge",
|
|
206
|
+
cause
|
|
207
|
+
});
|
|
208
|
+
}
|
|
209
|
+
case "MaxPartSize":
|
|
210
|
+
{
|
|
211
|
+
return new MultipartError({
|
|
212
|
+
reason: "FileTooLarge",
|
|
213
|
+
cause
|
|
214
|
+
});
|
|
215
|
+
}
|
|
216
|
+
case "MaxTotalSize":
|
|
217
|
+
{
|
|
218
|
+
return new MultipartError({
|
|
219
|
+
reason: "BodyTooLarge",
|
|
220
|
+
cause
|
|
221
|
+
});
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
default:
|
|
226
|
+
{
|
|
227
|
+
return new MultipartError({
|
|
228
|
+
reason: "Parse",
|
|
229
|
+
cause
|
|
230
|
+
});
|
|
231
|
+
}
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
class PartBase extends Inspectable.Class {
|
|
235
|
+
[TypeId];
|
|
236
|
+
constructor() {
|
|
237
|
+
super();
|
|
238
|
+
this[TypeId] = TypeId;
|
|
239
|
+
}
|
|
240
|
+
}
|
|
241
|
+
class FieldImpl extends PartBase {
|
|
242
|
+
key;
|
|
243
|
+
contentType;
|
|
244
|
+
value;
|
|
245
|
+
_tag = "Field";
|
|
246
|
+
constructor(key, contentType, value) {
|
|
247
|
+
super();
|
|
248
|
+
this.key = key;
|
|
249
|
+
this.contentType = contentType;
|
|
250
|
+
this.value = value;
|
|
251
|
+
}
|
|
252
|
+
toJSON() {
|
|
253
|
+
return {
|
|
254
|
+
_id: "@effect/platform/Multipart/Part",
|
|
255
|
+
_tag: "Field",
|
|
256
|
+
key: this.key,
|
|
257
|
+
contentType: this.contentType,
|
|
258
|
+
value: this.value
|
|
259
|
+
};
|
|
260
|
+
}
|
|
261
|
+
}
|
|
262
|
+
class FileImpl extends PartBase {
|
|
263
|
+
_tag = "File";
|
|
264
|
+
key;
|
|
265
|
+
name;
|
|
266
|
+
contentType;
|
|
267
|
+
content;
|
|
268
|
+
contentEffect;
|
|
269
|
+
constructor(info, channel) {
|
|
270
|
+
super();
|
|
271
|
+
this.key = info.name;
|
|
272
|
+
this.name = info.filename ?? info.name;
|
|
273
|
+
this.contentType = info.contentType;
|
|
274
|
+
this.content = Stream.fromChannel(channel);
|
|
275
|
+
this.contentEffect = channel.pipe(Channel.pipeTo(collectUint8Array), Channel.run, Effect.mapError(cause => new MultipartError({
|
|
276
|
+
reason: "InternalError",
|
|
277
|
+
cause
|
|
278
|
+
})));
|
|
279
|
+
}
|
|
280
|
+
toJSON() {
|
|
281
|
+
return {
|
|
282
|
+
_id: "@effect/platform/Multipart/Part",
|
|
283
|
+
_tag: "File",
|
|
284
|
+
key: this.key,
|
|
285
|
+
name: this.name,
|
|
286
|
+
contentType: this.contentType
|
|
287
|
+
};
|
|
288
|
+
}
|
|
289
|
+
}
|
|
290
|
+
const defaultWriteFile = (path, file) => Effect.flatMap(FileSystem.FileSystem, fs => Effect.mapError(Stream.run(file.content, fs.sink(path)), cause => new MultipartError({
|
|
291
|
+
reason: "InternalError",
|
|
292
|
+
cause
|
|
293
|
+
})));
|
|
67
294
|
/**
|
|
68
295
|
* @since 1.0.0
|
|
69
|
-
* @category fiber refs
|
|
70
296
|
*/
|
|
71
|
-
export const
|
|
297
|
+
export const collectUint8Array = /*#__PURE__*/Channel.suspend(() => {
|
|
298
|
+
let accumulator = new Uint8Array(0);
|
|
299
|
+
const loop = Channel.readWithCause({
|
|
300
|
+
onInput(chunk) {
|
|
301
|
+
for (const element of chunk) {
|
|
302
|
+
const newAccumulator = new Uint8Array(accumulator.length + element.length);
|
|
303
|
+
newAccumulator.set(accumulator, 0);
|
|
304
|
+
newAccumulator.set(element, accumulator.length);
|
|
305
|
+
accumulator = newAccumulator;
|
|
306
|
+
}
|
|
307
|
+
return loop;
|
|
308
|
+
},
|
|
309
|
+
onFailure: cause => Channel.failCause(cause),
|
|
310
|
+
onDone: () => Channel.succeed(accumulator)
|
|
311
|
+
});
|
|
312
|
+
return loop;
|
|
313
|
+
});
|
|
314
|
+
/**
|
|
315
|
+
* @since 1.0.0
|
|
316
|
+
* @category Conversions
|
|
317
|
+
*/
|
|
318
|
+
export const toPersisted = (stream, writeFile = defaultWriteFile) => Effect.gen(function* () {
|
|
319
|
+
const fs = yield* FileSystem.FileSystem;
|
|
320
|
+
const path_ = yield* Path.Path;
|
|
321
|
+
const dir = yield* fs.makeTempDirectoryScoped();
|
|
322
|
+
const persisted = Object.create(null);
|
|
323
|
+
yield* Stream.runForEach(stream, part => {
|
|
324
|
+
if (part._tag === "Field") {
|
|
325
|
+
if (!(part.key in persisted)) {
|
|
326
|
+
persisted[part.key] = part.value;
|
|
327
|
+
} else if (typeof persisted[part.key] === "string") {
|
|
328
|
+
persisted[part.key] = [persisted[part.key], part.value];
|
|
329
|
+
} else {
|
|
330
|
+
;
|
|
331
|
+
persisted[part.key].push(part.value);
|
|
332
|
+
}
|
|
333
|
+
return Effect.void;
|
|
334
|
+
} else if (part.name === "") {
|
|
335
|
+
return Effect.void;
|
|
336
|
+
}
|
|
337
|
+
const file = part;
|
|
338
|
+
const path = path_.join(dir, path_.basename(file.name).slice(-128));
|
|
339
|
+
const filePart = new PersistedFileImpl(file.key, file.name, file.contentType, path);
|
|
340
|
+
if (Array.isArray(persisted[part.key])) {
|
|
341
|
+
;
|
|
342
|
+
persisted[part.key].push(filePart);
|
|
343
|
+
} else {
|
|
344
|
+
persisted[part.key] = [filePart];
|
|
345
|
+
}
|
|
346
|
+
return writeFile(path, file);
|
|
347
|
+
});
|
|
348
|
+
return persisted;
|
|
349
|
+
}).pipe(Effect.catchTags({
|
|
350
|
+
SystemError: cause => Effect.fail(new MultipartError({
|
|
351
|
+
reason: "InternalError",
|
|
352
|
+
cause
|
|
353
|
+
})),
|
|
354
|
+
BadArgument: cause => Effect.fail(new MultipartError({
|
|
355
|
+
reason: "InternalError",
|
|
356
|
+
cause
|
|
357
|
+
}))
|
|
358
|
+
}));
|
|
359
|
+
class PersistedFileImpl extends PartBase {
|
|
360
|
+
key;
|
|
361
|
+
name;
|
|
362
|
+
contentType;
|
|
363
|
+
path;
|
|
364
|
+
_tag = "PersistedFile";
|
|
365
|
+
constructor(key, name, contentType, path) {
|
|
366
|
+
super();
|
|
367
|
+
this.key = key;
|
|
368
|
+
this.name = name;
|
|
369
|
+
this.contentType = contentType;
|
|
370
|
+
this.path = path;
|
|
371
|
+
}
|
|
372
|
+
toJSON() {
|
|
373
|
+
return {
|
|
374
|
+
_id: "@effect/platform/Multipart/Part",
|
|
375
|
+
_tag: "PersistedFile",
|
|
376
|
+
key: this.key,
|
|
377
|
+
name: this.name,
|
|
378
|
+
contentType: this.contentType,
|
|
379
|
+
path: this.path
|
|
380
|
+
};
|
|
381
|
+
}
|
|
382
|
+
}
|
|
72
383
|
/**
|
|
73
384
|
* @since 1.0.0
|
|
74
385
|
* @category fiber refs
|
|
75
386
|
*/
|
|
76
|
-
export const
|
|
387
|
+
export const withLimits = /*#__PURE__*/dual(2, (effect, options) => Effect.provide(effect, withLimitsContext(options)));
|
|
388
|
+
const withLimitsContext = options => {
|
|
389
|
+
const contextMap = new Map();
|
|
390
|
+
if (options.maxParts !== undefined) {
|
|
391
|
+
contextMap.set(MaxParts.key, options.maxParts);
|
|
392
|
+
}
|
|
393
|
+
if (options.maxFieldSize !== undefined) {
|
|
394
|
+
contextMap.set(MaxFieldSize.key, FileSystem.Size(options.maxFieldSize));
|
|
395
|
+
}
|
|
396
|
+
if (options.maxFileSize !== undefined) {
|
|
397
|
+
contextMap.set(MaxFileSize.key, Option.map(options.maxFileSize, FileSystem.Size));
|
|
398
|
+
}
|
|
399
|
+
if (options.maxTotalSize !== undefined) {
|
|
400
|
+
contextMap.set(IncomingMessage.MaxBodySize.key, Option.map(options.maxTotalSize, FileSystem.Size));
|
|
401
|
+
}
|
|
402
|
+
if (options.fieldMimeTypes !== undefined) {
|
|
403
|
+
contextMap.set(FieldMimeTypes.key, Chunk.fromIterable(options.fieldMimeTypes));
|
|
404
|
+
}
|
|
405
|
+
return Context.unsafeMake(contextMap);
|
|
406
|
+
};
|
|
77
407
|
/**
|
|
78
408
|
* @since 1.0.0
|
|
79
|
-
* @category
|
|
409
|
+
* @category fiber refs
|
|
80
410
|
*/
|
|
81
|
-
export const
|
|
411
|
+
export const withLimitsStream = /*#__PURE__*/dual(2, (stream, options) => Stream.provideSomeContext(stream, withLimitsContext(options)));
|
|
82
412
|
/**
|
|
83
413
|
* @since 1.0.0
|
|
84
|
-
* @category
|
|
414
|
+
* @category fiber refs
|
|
85
415
|
*/
|
|
86
|
-
export
|
|
416
|
+
export class MaxParts extends /*#__PURE__*/Context.Reference()("@effect/platform/Multipart/MaxParts", {
|
|
417
|
+
defaultValue: Option.none
|
|
418
|
+
}) {}
|
|
87
419
|
/**
|
|
88
420
|
* @since 1.0.0
|
|
89
|
-
* @category
|
|
421
|
+
* @category fiber refs
|
|
90
422
|
*/
|
|
91
|
-
export const
|
|
423
|
+
export const withMaxParts = /*#__PURE__*/dual(2, (effect, count) => Effect.provideService(effect, MaxParts, count));
|
|
92
424
|
/**
|
|
93
425
|
* @since 1.0.0
|
|
94
|
-
* @category
|
|
426
|
+
* @category fiber refs
|
|
95
427
|
*/
|
|
96
|
-
export
|
|
428
|
+
export class MaxFieldSize extends /*#__PURE__*/Context.Reference()("@effect/platform/Multipart/MaxFieldSize", {
|
|
429
|
+
defaultValue: /*#__PURE__*/constant(/*#__PURE__*/FileSystem.Size(10 * 1024 * 1024))
|
|
430
|
+
}) {}
|
|
97
431
|
/**
|
|
98
432
|
* @since 1.0.0
|
|
99
|
-
* @category
|
|
433
|
+
* @category fiber refs
|
|
100
434
|
*/
|
|
101
|
-
export const
|
|
435
|
+
export const withMaxFieldSize = /*#__PURE__*/dual(2, (effect, size) => Effect.provideService(effect, MaxFieldSize, FileSystem.Size(size)));
|
|
102
436
|
/**
|
|
103
437
|
* @since 1.0.0
|
|
104
|
-
* @category
|
|
438
|
+
* @category fiber refs
|
|
105
439
|
*/
|
|
106
|
-
export
|
|
440
|
+
export class MaxFileSize extends /*#__PURE__*/Context.Reference()("@effect/platform/Multipart/MaxFileSize", {
|
|
441
|
+
defaultValue: Option.none
|
|
442
|
+
}) {}
|
|
107
443
|
/**
|
|
108
444
|
* @since 1.0.0
|
|
109
|
-
* @category
|
|
445
|
+
* @category fiber refs
|
|
110
446
|
*/
|
|
111
|
-
export const
|
|
447
|
+
export const withMaxFileSize = /*#__PURE__*/dual(2, (effect, size) => Effect.provideService(effect, MaxFileSize, Option.map(size, FileSystem.Size)));
|
|
112
448
|
/**
|
|
113
449
|
* @since 1.0.0
|
|
114
|
-
* @category
|
|
450
|
+
* @category fiber refs
|
|
115
451
|
*/
|
|
116
|
-
export
|
|
452
|
+
export class FieldMimeTypes extends /*#__PURE__*/Context.Reference()("@effect/platform/Multipart/FieldMimeTypes", {
|
|
453
|
+
defaultValue: /*#__PURE__*/constant(/*#__PURE__*/Chunk.make("application/json"))
|
|
454
|
+
}) {}
|
|
117
455
|
/**
|
|
118
456
|
* @since 1.0.0
|
|
457
|
+
* @category fiber refs
|
|
119
458
|
*/
|
|
120
|
-
export const
|
|
459
|
+
export const withFieldMimeTypes = /*#__PURE__*/dual(2, (effect, mimeTypes) => Effect.provideService(effect, FieldMimeTypes, Chunk.fromIterable(mimeTypes)));
|
|
121
460
|
//# sourceMappingURL=Multipart.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Multipart.js","names":["internal","TypeId","isPart","isField","isFile","isPersistedFile","ErrorTypeId","MultipartError","maxParts","withMaxParts","maxFieldSize","withMaxFieldSize","maxFileSize","withMaxFileSize","fieldMimeTypes","withFieldMimeTypes","FileSchema","FilesSchema","SingleFileSchema","schemaJson","schemaPersisted","makeChannel","makeConfig","toPersisted","collectUint8Array"],"sources":["../../src/Multipart.ts"],"sourcesContent":[null],"mappings":"AAiBA,OAAO,KAAKA,QAAQ,MAAM,yBAAyB;AAGnD;;;;AAIA,OAAO,MAAMC,MAAM,GAAkBD,QAAQ,CAACC,MAAM;AAcpD;;;;AAIA,OAAO,MAAMC,MAAM,GAA8BF,QAAQ,CAACE,MAAM;AA2BhE;;;;AAIA,OAAO,MAAMC,OAAO,GAA+BH,QAAQ,CAACG,OAAO;AAenE;;;;AAIA,OAAO,MAAMC,MAAM,GAA8BJ,QAAQ,CAACI,MAAM;AAchE;;;;AAIA,OAAO,MAAMC,eAAe,GAAuCL,QAAQ,CAACK,eAAe;AAU3F;;;;AAIA,OAAO,MAAMC,WAAW,GAAkBN,QAAQ,CAACM,WAAW;AAoB9D;;;;AAIA,OAAO,MAAMC,cAAc,GAKLP,QAAQ,CAACO,cAAc;AAE7C;;;;AAIA,OAAO,MAAMC,QAAQ,GAA6CR,QAAQ,CAACQ,QAAQ;AAEnF;;;;AAIA,OAAO,MAAMC,YAAY,GAWrBT,QAAQ,CAACS,YAAY;AAEzB;;;;AAIA,OAAO,MAAMC,YAAY,GAAuCV,QAAQ,CAACU,YAAY;AAErF;;;;AAIA,OAAO,MAAMC,gBAAgB,GAWzBX,QAAQ,CAACW,gBAAgB;AAE7B;;;;AAIA,OAAO,MAAMC,WAAW,GAAsDZ,QAAQ,CAACY,WAAW;AAElG;;;;AAIA,OAAO,MAAMC,eAAe,GAWxBb,QAAQ,CAACa,eAAe;AAE5B;;;;AAIA,OAAO,MAAMC,cAAc,GAA2Cd,QAAQ,CAACc,cAAc;AAE7F;;;;AAIA,OAAO,MAAMC,kBAAkB,GAW3Bf,QAAQ,CAACe,kBAAkB;AAE/B;;;;AAIA,OAAO,MAAMC,UAAU,GAAiChB,QAAQ,CAACgB,UAAU;AAE3E;;;;AAIA,OAAO,MAAMC,WAAW,GAAgDjB,QAAQ,CAACiB,WAAW;AAE5F;;;;AAIA,OAAO,MAAMC,gBAAgB,GAGzBlB,QAAQ,CAACkB,gBAAgB;AAE7B;;;;AAIA,OAAO,MAAMC,UAAU,GAMnBnB,QAAQ,CAACmB,UAAU;AAEvB;;;;AAIA,OAAO,MAAMC,eAAe,GAGiDpB,QAAQ,CAACoB,eAAe;AAErG;;;;AAIA,OAAO,MAAMC,WAAW,GAItBrB,QAAQ,CAACqB,WAAW;AAEtB;;;;AAIA,OAAO,MAAMC,UAAU,GAA8EtB,QAAQ,CAACsB,UAAU;AAExH;;;;AAIA,OAAO,MAAMC,WAAW,GAGyEvB,QAAQ,CAACuB,WAAW;AAErH;;;AAGA,OAAO,MAAMC,iBAAiB,GAM1BxB,QAAQ,CAACwB,iBAAiB","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"Multipart.js","names":["Channel","Chunk","Context","Effect","Exit","constant","dual","Inspectable","Mailbox","Option","Predicate","Schema","Stream","MP","FileSystem","IncomingMessage","Path","TypeId","Symbol","for","isPart","u","hasProperty","isField","_tag","isFile","isPersistedFile","isTagged","ErrorTypeId","MultipartError","TaggedError","reason","Literal","cause","Defect","message","FileSchema","declare","identifier","jsonSchema","type","format","FilesSchema","Array","SingleFileSchema","transform","pipe","itemsCount","strict","decode","file","encode","schemaPersisted","schema","options","decodeUnknown","schemaJson","fromJson","parseJson","persisted","field","map","Struct","_","makeConfig","headers","withFiberRuntime","fiber","mimeTypes","get","currentContext","FieldMimeTypes","succeed","maxParts","getOrUndefined","MaxParts","maxFieldSize","Number","MaxFieldSize","maxPartSize","MaxFileSize","maxTotalSize","MaxBodySize","length","undefined","info","some","contentType","includes","defaultIsFile","makeChannel","bufferSize","acquireUseRelease","all","make","config","mailbox","partsBuffer","exit","none","input","awaitRead","void","emit","element","offer","error","failCause","end","done","_value","parser","onField","value","push","FieldImpl","name","decodeField","onFile","chunks","finished","take","suspend","zipRight","pump","chunk","unsafeFromArray","write","FileImpl","onError","error_","fail","convertError","onDone","flatMap","takeAll","sync","forEach","partsChannel","writeExit","embedInput","shutdown","self","limit","PartBase","Class","constructor","key","toJSON","_id","content","contentEffect","channel","filename","fromChannel","pipeTo","collectUint8Array","run","mapError","defaultWriteFile","path","fs","sink","accumulator","Uint8Array","loop","readWithCause","onInput","newAccumulator","set","onFailure","toPersisted","stream","writeFile","gen","path_","dir","makeTempDirectoryScoped","Object","create","runForEach","part","join","basename","slice","filePart","PersistedFileImpl","isArray","catchTags","SystemError","BadArgument","withLimits","effect","provide","withLimitsContext","contextMap","Map","Size","maxFileSize","fieldMimeTypes","fromIterable","unsafeMake","withLimitsStream","provideSomeContext","Reference","defaultValue","withMaxParts","count","provideService","withMaxFieldSize","size","withMaxFileSize","withFieldMimeTypes"],"sources":["../../src/Multipart.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@effect/platform",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.86.0",
|
|
4
4
|
"description": "Unified interfaces for common platform-specific services",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"repository": {
|
|
@@ -16,7 +16,7 @@
|
|
|
16
16
|
"multipasta": "^0.2.5"
|
|
17
17
|
},
|
|
18
18
|
"peerDependencies": {
|
|
19
|
-
"effect": "^3.16.
|
|
19
|
+
"effect": "^3.16.9"
|
|
20
20
|
},
|
|
21
21
|
"publishConfig": {
|
|
22
22
|
"provenance": true
|
package/src/HttpApiBuilder.ts
CHANGED
|
@@ -37,6 +37,7 @@ import * as HttpRouter from "./HttpRouter.js"
|
|
|
37
37
|
import * as HttpServer from "./HttpServer.js"
|
|
38
38
|
import * as HttpServerRequest from "./HttpServerRequest.js"
|
|
39
39
|
import * as HttpServerResponse from "./HttpServerResponse.js"
|
|
40
|
+
import * as Multipart from "./Multipart.js"
|
|
40
41
|
import * as OpenApi from "./OpenApi.js"
|
|
41
42
|
import type { Path } from "./Path.js"
|
|
42
43
|
import * as UrlParams from "./UrlParams.js"
|
|
@@ -525,7 +526,8 @@ export const handler = <
|
|
|
525
526
|
|
|
526
527
|
const requestPayload = (
|
|
527
528
|
request: HttpServerRequest.HttpServerRequest,
|
|
528
|
-
urlParams: ReadonlyRecord<string, string | Array<string
|
|
529
|
+
urlParams: ReadonlyRecord<string, string | Array<string>>,
|
|
530
|
+
multipartLimits: Option.Option<Multipart.withLimits.Options>
|
|
529
531
|
): Effect.Effect<
|
|
530
532
|
unknown,
|
|
531
533
|
never,
|
|
@@ -542,7 +544,10 @@ const requestPayload = (
|
|
|
542
544
|
if (contentType.includes("application/json")) {
|
|
543
545
|
return Effect.orDie(request.json)
|
|
544
546
|
} else if (contentType.includes("multipart/form-data")) {
|
|
545
|
-
return Effect.orDie(
|
|
547
|
+
return Effect.orDie(Option.match(multipartLimits, {
|
|
548
|
+
onNone: () => request.multipart,
|
|
549
|
+
onSome: (limits) => Multipart.withLimits(request.multipart, limits)
|
|
550
|
+
}))
|
|
546
551
|
} else if (contentType.includes("x-www-form-urlencoded")) {
|
|
547
552
|
return Effect.map(Effect.orDie(request.urlParamsBody), UrlParams.toRecord)
|
|
548
553
|
} else if (contentType.startsWith("text/")) {
|
|
@@ -628,9 +633,12 @@ const handlerToRoute = (
|
|
|
628
633
|
): HttpRouter.Route<any, any> => {
|
|
629
634
|
const endpoint = endpoint_ as HttpApiEndpoint.HttpApiEndpoint.AnyWithProps
|
|
630
635
|
const isMultipartStream = endpoint.payloadSchema.pipe(
|
|
631
|
-
Option.map(({ ast }) => HttpApiSchema.getMultipartStream(ast)),
|
|
636
|
+
Option.map(({ ast }) => HttpApiSchema.getMultipartStream(ast) !== undefined),
|
|
632
637
|
Option.getOrElse(constFalse)
|
|
633
638
|
)
|
|
639
|
+
const multipartLimits = endpoint.payloadSchema.pipe(
|
|
640
|
+
Option.flatMapNullable(({ ast }) => HttpApiSchema.getMultipart(ast) || HttpApiSchema.getMultipartStream(ast))
|
|
641
|
+
)
|
|
634
642
|
const decodePath = Option.map(endpoint.pathSchema, Schema.decodeUnknown)
|
|
635
643
|
const decodePayload = isFullRequest || isMultipartStream
|
|
636
644
|
? Option.none()
|
|
@@ -654,11 +662,14 @@ const handlerToRoute = (
|
|
|
654
662
|
}
|
|
655
663
|
if (decodePayload._tag === "Some") {
|
|
656
664
|
request.payload = yield* Effect.flatMap(
|
|
657
|
-
requestPayload(httpRequest, urlParams),
|
|
665
|
+
requestPayload(httpRequest, urlParams, multipartLimits),
|
|
658
666
|
decodePayload.value
|
|
659
667
|
)
|
|
660
668
|
} else if (isMultipartStream) {
|
|
661
|
-
request.payload =
|
|
669
|
+
request.payload = Option.match(multipartLimits, {
|
|
670
|
+
onNone: () => httpRequest.multipartStream,
|
|
671
|
+
onSome: (limits) => Multipart.withLimitsStream(httpRequest.multipartStream, limits)
|
|
672
|
+
})
|
|
662
673
|
}
|
|
663
674
|
if (decodeHeaders._tag === "Some") {
|
|
664
675
|
request.headers = yield* decodeHeaders.value(httpRequest.headers)
|