@effect/platform 0.85.2 → 0.87.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.
Files changed (49) hide show
  1. package/dist/cjs/HttpApiBuilder.js +15 -5
  2. package/dist/cjs/HttpApiBuilder.js.map +1 -1
  3. package/dist/cjs/HttpApiClient.js +17 -8
  4. package/dist/cjs/HttpApiClient.js.map +1 -1
  5. package/dist/cjs/HttpApiSchema.js +6 -6
  6. package/dist/cjs/HttpApiSchema.js.map +1 -1
  7. package/dist/cjs/HttpIncomingMessage.js +7 -5
  8. package/dist/cjs/HttpIncomingMessage.js.map +1 -1
  9. package/dist/cjs/HttpServerRequest.js +10 -4
  10. package/dist/cjs/HttpServerRequest.js.map +1 -1
  11. package/dist/cjs/Multipart.js +400 -47
  12. package/dist/cjs/Multipart.js.map +1 -1
  13. package/dist/dts/HttpApiBuilder.d.ts.map +1 -1
  14. package/dist/dts/HttpApiClient.d.ts +28 -15
  15. package/dist/dts/HttpApiClient.d.ts.map +1 -1
  16. package/dist/dts/HttpApiSchema.d.ts +19 -4
  17. package/dist/dts/HttpApiSchema.d.ts.map +1 -1
  18. package/dist/dts/HttpIncomingMessage.d.ts +5 -2
  19. package/dist/dts/HttpIncomingMessage.d.ts.map +1 -1
  20. package/dist/dts/HttpServerRequest.d.ts +6 -1
  21. package/dist/dts/HttpServerRequest.d.ts.map +1 -1
  22. package/dist/dts/Multipart.d.ts +167 -88
  23. package/dist/dts/Multipart.d.ts.map +1 -1
  24. package/dist/esm/HttpApiBuilder.js +15 -5
  25. package/dist/esm/HttpApiBuilder.js.map +1 -1
  26. package/dist/esm/HttpApiClient.js +14 -6
  27. package/dist/esm/HttpApiClient.js.map +1 -1
  28. package/dist/esm/HttpApiSchema.js +6 -6
  29. package/dist/esm/HttpApiSchema.js.map +1 -1
  30. package/dist/esm/HttpIncomingMessage.js +5 -4
  31. package/dist/esm/HttpIncomingMessage.js.map +1 -1
  32. package/dist/esm/HttpServerRequest.js +6 -1
  33. package/dist/esm/HttpServerRequest.js.map +1 -1
  34. package/dist/esm/Multipart.js +385 -46
  35. package/dist/esm/Multipart.js.map +1 -1
  36. package/package.json +2 -2
  37. package/src/HttpApiBuilder.ts +16 -5
  38. package/src/HttpApiClient.ts +63 -32
  39. package/src/HttpApiSchema.ts +23 -7
  40. package/src/HttpIncomingMessage.ts +5 -7
  41. package/src/HttpServerRequest.ts +6 -1
  42. package/src/Multipart.ts +632 -128
  43. package/dist/cjs/internal/multipart.js +0 -364
  44. package/dist/cjs/internal/multipart.js.map +0 -1
  45. package/dist/dts/internal/multipart.d.ts +0 -2
  46. package/dist/dts/internal/multipart.d.ts.map +0 -1
  47. package/dist/esm/internal/multipart.js +0 -347
  48. package/dist/esm/internal/multipart.js.map +0 -1
  49. package/src/internal/multipart.ts +0 -491
@@ -1,121 +1,460 @@
1
- import * as internal from "./internal/multipart.js";
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 = internal.TypeId;
21
+ export const TypeId = /*#__PURE__*/Symbol.for("@effect/platform/Multipart");
7
22
  /**
8
23
  * @since 1.0.0
9
- * @category refinements
24
+ * @category Guards
10
25
  */
11
- export const isPart = internal.isPart;
26
+ export const isPart = u => Predicate.hasProperty(u, TypeId);
12
27
  /**
13
28
  * @since 1.0.0
14
- * @category refinements
29
+ * @category Guards
15
30
  */
16
- export const isField = internal.isField;
31
+ export const isField = u => isPart(u) && u._tag === "Field";
17
32
  /**
18
33
  * @since 1.0.0
19
- * @category refinements
34
+ * @category Guards
20
35
  */
21
- export const isFile = internal.isFile;
36
+ export const isFile = u => isPart(u) && u._tag === "File";
22
37
  /**
23
38
  * @since 1.0.0
24
- * @category refinements
39
+ * @category Guards
25
40
  */
26
- export const isPersistedFile = internal.isPersistedFile;
41
+ export const isPersistedFile = u => Predicate.hasProperty(u, TypeId) && Predicate.isTagged(u, "PersistedFile");
27
42
  /**
28
43
  * @since 1.0.0
29
- * @category type ids
44
+ * @category Errors
30
45
  */
31
- export const ErrorTypeId = internal.ErrorTypeId;
46
+ export const ErrorTypeId = /*#__PURE__*/Symbol.for("@effect/platform/Multipart/MultipartError");
32
47
  /**
33
48
  * @since 1.0.0
34
- * @category errors
49
+ * @category Errors
35
50
  */
36
- export const MultipartError = internal.MultipartError;
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 fiber refs
68
+ * @category Schemas
40
69
  */
41
- export const maxParts = internal.maxParts;
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 fiber refs
79
+ * @category Schemas
45
80
  */
46
- export const withMaxParts = internal.withMaxParts;
81
+ export const FilesSchema = /*#__PURE__*/Schema.Array(FileSchema);
47
82
  /**
48
83
  * @since 1.0.0
49
- * @category fiber refs
84
+ * @category Schemas
50
85
  */
51
- export const maxFieldSize = internal.maxFieldSize;
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 fiber refs
93
+ * @category Schemas
55
94
  */
56
- export const withMaxFieldSize = internal.withMaxFieldSize;
95
+ export const schemaPersisted = (schema, options) => Schema.decodeUnknown(schema, options);
57
96
  /**
58
97
  * @since 1.0.0
59
- * @category fiber refs
98
+ * @category Schemas
60
99
  */
61
- export const maxFileSize = internal.maxFileSize;
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 fiber refs
108
+ * @category Config
65
109
  */
66
- export const withMaxFileSize = internal.withMaxFileSize;
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 fieldMimeTypes = internal.fieldMimeTypes;
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 withFieldMimeTypes = internal.withFieldMimeTypes;
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 schema
409
+ * @category fiber refs
80
410
  */
81
- export const FileSchema = internal.FileSchema;
411
+ export const withLimitsStream = /*#__PURE__*/dual(2, (stream, options) => Stream.provideSomeContext(stream, withLimitsContext(options)));
82
412
  /**
83
413
  * @since 1.0.0
84
- * @category schema
414
+ * @category fiber refs
85
415
  */
86
- export const FilesSchema = internal.FilesSchema;
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 schema
421
+ * @category fiber refs
90
422
  */
91
- export const SingleFileSchema = internal.SingleFileSchema;
423
+ export const withMaxParts = /*#__PURE__*/dual(2, (effect, count) => Effect.provideService(effect, MaxParts, count));
92
424
  /**
93
425
  * @since 1.0.0
94
- * @category schema
426
+ * @category fiber refs
95
427
  */
96
- export const schemaJson = internal.schemaJson;
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 schema
433
+ * @category fiber refs
100
434
  */
101
- export const schemaPersisted = internal.schemaPersisted;
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 constructors
438
+ * @category fiber refs
105
439
  */
106
- export const makeChannel = internal.makeChannel;
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 constructors
445
+ * @category fiber refs
110
446
  */
111
- export const makeConfig = internal.makeConfig;
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 constructors
450
+ * @category fiber refs
115
451
  */
116
- export const toPersisted = internal.toPersisted;
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 collectUint8Array = internal.collectUint8Array;
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.85.2",
3
+ "version": "0.87.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.8"
19
+ "effect": "^3.16.9"
20
20
  },
21
21
  "publishConfig": {
22
22
  "provenance": true
@@ -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(request.multipart)
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 = httpRequest.multipartStream
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)