@effect/platform 0.69.30 → 0.70.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 (51) hide show
  1. package/README.md +35 -26
  2. package/dist/cjs/HttpApiEndpoint.js +44 -13
  3. package/dist/cjs/HttpApiEndpoint.js.map +1 -1
  4. package/dist/cjs/HttpApiSchema.js +20 -2
  5. package/dist/cjs/HttpApiSchema.js.map +1 -1
  6. package/dist/cjs/HttpIncomingMessage.js +3 -2
  7. package/dist/cjs/HttpIncomingMessage.js.map +1 -1
  8. package/dist/cjs/HttpServerRequest.js.map +1 -1
  9. package/dist/cjs/OpenApiJsonSchema.js.map +1 -1
  10. package/dist/cjs/UrlParams.js +36 -8
  11. package/dist/cjs/UrlParams.js.map +1 -1
  12. package/dist/cjs/internal/httpServerRequest.js.map +1 -1
  13. package/dist/cjs/internal/multipart.js +21 -8
  14. package/dist/cjs/internal/multipart.js.map +1 -1
  15. package/dist/dts/HttpApiEndpoint.d.ts +82 -7
  16. package/dist/dts/HttpApiEndpoint.d.ts.map +1 -1
  17. package/dist/dts/HttpApiSchema.d.ts +35 -3
  18. package/dist/dts/HttpApiSchema.d.ts.map +1 -1
  19. package/dist/dts/HttpIncomingMessage.d.ts +2 -2
  20. package/dist/dts/HttpIncomingMessage.d.ts.map +1 -1
  21. package/dist/dts/HttpServerRequest.d.ts +1 -1
  22. package/dist/dts/HttpServerRequest.d.ts.map +1 -1
  23. package/dist/dts/Multipart.d.ts +1 -1
  24. package/dist/dts/Multipart.d.ts.map +1 -1
  25. package/dist/dts/OpenApiJsonSchema.d.ts +2 -0
  26. package/dist/dts/OpenApiJsonSchema.d.ts.map +1 -1
  27. package/dist/dts/UrlParams.d.ts +28 -4
  28. package/dist/dts/UrlParams.d.ts.map +1 -1
  29. package/dist/esm/HttpApiEndpoint.js +44 -13
  30. package/dist/esm/HttpApiEndpoint.js.map +1 -1
  31. package/dist/esm/HttpApiSchema.js +17 -0
  32. package/dist/esm/HttpApiSchema.js.map +1 -1
  33. package/dist/esm/HttpIncomingMessage.js +3 -2
  34. package/dist/esm/HttpIncomingMessage.js.map +1 -1
  35. package/dist/esm/HttpServerRequest.js.map +1 -1
  36. package/dist/esm/OpenApiJsonSchema.js.map +1 -1
  37. package/dist/esm/UrlParams.js +33 -6
  38. package/dist/esm/UrlParams.js.map +1 -1
  39. package/dist/esm/internal/httpServerRequest.js.map +1 -1
  40. package/dist/esm/internal/multipart.js +21 -8
  41. package/dist/esm/internal/multipart.js.map +1 -1
  42. package/package.json +2 -2
  43. package/src/HttpApiEndpoint.ts +154 -39
  44. package/src/HttpApiSchema.ts +48 -3
  45. package/src/HttpIncomingMessage.ts +8 -4
  46. package/src/HttpServerRequest.ts +5 -1
  47. package/src/Multipart.ts +1 -1
  48. package/src/OpenApiJsonSchema.ts +2 -0
  49. package/src/UrlParams.ts +39 -7
  50. package/src/internal/httpServerRequest.ts +5 -1
  51. package/src/internal/multipart.ts +27 -21
@@ -260,20 +260,33 @@ export const toPersisted = (stream, writeFile = defaultWriteFile) => Effect.gen(
260
260
  const fs = yield* FileSystem.FileSystem;
261
261
  const path_ = yield* Path.Path;
262
262
  const dir = yield* fs.makeTempDirectoryScoped();
263
- return yield* Stream.runFoldEffect(stream, Object.create(null), (persisted, part) => {
263
+ const persisted = Object.create(null);
264
+ yield* Stream.runForEach(stream, part => {
264
265
  if (part._tag === "Field") {
265
- persisted[part.key] = part.value;
266
- return Effect.succeed(persisted);
266
+ if (!(part.key in persisted)) {
267
+ persisted[part.key] = part.value;
268
+ } else if (typeof persisted[part.key] === "string") {
269
+ persisted[part.key] = [persisted[part.key], part.value];
270
+ } else {
271
+ ;
272
+ persisted[part.key].push(part.value);
273
+ }
274
+ return Effect.void;
275
+ } else if (part.name === "") {
276
+ return Effect.void;
267
277
  }
268
278
  const file = part;
269
279
  const path = path_.join(dir, path_.basename(file.name).slice(-128));
270
- if (!Array.isArray(persisted[part.key])) {
271
- persisted[part.key] = [];
280
+ const filePart = new PersistedFileImpl(file.key, file.name, file.contentType, path);
281
+ if (Array.isArray(persisted[part.key])) {
282
+ ;
283
+ persisted[part.key].push(filePart);
284
+ } else {
285
+ persisted[part.key] = [filePart];
272
286
  }
273
- ;
274
- persisted[part.key].push(new PersistedFileImpl(file.key, file.name, file.contentType, path));
275
- return Effect.as(writeFile(path, file), persisted);
287
+ return writeFile(path, file);
276
288
  });
289
+ return persisted;
277
290
  }).pipe(Effect.catchTags({
278
291
  SystemError: cause => Effect.fail(new MultipartError({
279
292
  reason: "InternalError",
@@ -1 +1 @@
1
- {"version":3,"file":"multipart.js","names":["Channel","Chunk","Effect","Exit","FiberRef","dual","globalValue","Inspectable","Mailbox","Option","Predicate","Schema","Stream","MP","TypeIdError","FileSystem","IncomingMessage","Path","TypeId","Symbol","for","isPart","u","hasProperty","isField","_tag","isFile","isPersistedFile","isTagged","ErrorTypeId","MultipartError","message","reason","maxParts","unsafeMake","none","withMaxParts","effect","count","locally","maxFieldSize","Size","withMaxFieldSize","size","maxFileSize","withMaxFileSize","map","fieldMimeTypes","make","withFieldMimeTypes","mimeTypes","fromIterable","FileSchema","declare","identifier","jsonSchema","type","format","FilesSchema","Array","SingleFileSchema","transform","pipe","itemsCount","strict","decode","file","encode","schemaPersisted","schema","options","parse","decodeUnknown","persisted","schemaJson","fromJson","parseJson","field","Struct","_","makeConfig","headers","withFiberRuntime","fiber","getFiberRef","succeed","getOrUndefined","Number","maxPartSize","maxTotalSize","maxBodySize","length","undefined","info","some","contentType","includes","defaultIsFile","makeChannel","bufferSize","acquireUseRelease","all","config","mailbox","partsBuffer","exit","input","awaitRead","void","emit","element","offer","error","cause","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","channel","filename","fromChannel","defaultWriteFile","path","fs","mapError","run","sink","toPersisted","stream","writeFile","gen","path_","dir","makeTempDirectoryScoped","runFoldEffect","Object","create","part","join","basename","slice","isArray","PersistedFileImpl","as","catchTags","SystemError","BadArgument"],"sources":["../../../src/internal/multipart.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"multipart.js","names":["Channel","Chunk","Effect","Exit","FiberRef","dual","globalValue","Inspectable","Mailbox","Option","Predicate","Schema","Stream","MP","TypeIdError","FileSystem","IncomingMessage","Path","TypeId","Symbol","for","isPart","u","hasProperty","isField","_tag","isFile","isPersistedFile","isTagged","ErrorTypeId","MultipartError","message","reason","maxParts","unsafeMake","none","withMaxParts","effect","count","locally","maxFieldSize","Size","withMaxFieldSize","size","maxFileSize","withMaxFileSize","map","fieldMimeTypes","make","withFieldMimeTypes","mimeTypes","fromIterable","FileSchema","declare","identifier","jsonSchema","type","format","FilesSchema","Array","SingleFileSchema","transform","pipe","itemsCount","strict","decode","file","encode","schemaPersisted","schema","options","parse","decodeUnknown","persisted","schemaJson","fromJson","parseJson","field","Struct","_","makeConfig","headers","withFiberRuntime","fiber","getFiberRef","succeed","getOrUndefined","Number","maxPartSize","maxTotalSize","maxBodySize","length","undefined","info","some","contentType","includes","defaultIsFile","makeChannel","bufferSize","acquireUseRelease","all","config","mailbox","partsBuffer","exit","input","awaitRead","void","emit","element","offer","error","cause","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","channel","filename","fromChannel","defaultWriteFile","path","fs","mapError","run","sink","toPersisted","stream","writeFile","gen","path_","dir","makeTempDirectoryScoped","Object","create","runForEach","part","join","basename","slice","filePart","PersistedFileImpl","isArray","catchTags","SystemError","BadArgument"],"sources":["../../../src/internal/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.69.30",
3
+ "version": "0.70.0",
4
4
  "description": "Unified interfaces for common platform-specific services",
5
5
  "license": "MIT",
6
6
  "repository": {
@@ -14,7 +14,7 @@
14
14
  "multipasta": "^0.2.5"
15
15
  },
16
16
  "peerDependencies": {
17
- "effect": "^3.10.19"
17
+ "effect": "^3.11.0"
18
18
  },
19
19
  "publishConfig": {
20
20
  "provenance": true
@@ -546,7 +546,7 @@ export declare namespace HttpApiEndpoint {
546
546
  * @category models
547
547
  */
548
548
  export type ValidateUrlParams<S extends Schema.Schema.Any> = S extends Schema.Schema<infer _A, infer _I, infer _R>
549
- ? [_I] extends [Readonly<Record<string, string | undefined>>] ? {}
549
+ ? [_I] extends [Readonly<Record<string, string | ReadonlyArray<string> | undefined>>] ? {}
550
550
  : `UrlParams schema must be encodeable to strings`
551
551
  : {}
552
552
 
@@ -628,6 +628,47 @@ export declare namespace HttpApiEndpoint {
628
628
  _RE | HttpApiMiddleware.HttpApiMiddleware.ErrorContext<R>
629
629
  > :
630
630
  never
631
+
632
+ /**
633
+ * @since 1.0.0
634
+ * @category models
635
+ */
636
+ export type PathEntries<Schemas extends ReadonlyArray<HttpApiSchema.AnyString>> =
637
+ Extract<keyof Schemas, string> extends infer K ?
638
+ K extends keyof Schemas ? Schemas[K] extends HttpApiSchema.Param<infer _Name, infer _S> ? [_Name, _S] :
639
+ Schemas[K] extends HttpApiSchema.AnyString ? [K, Schemas[K]]
640
+ : never
641
+ : never
642
+ : never
643
+
644
+ /**
645
+ * @since 1.0.0
646
+ * @category models
647
+ */
648
+ export type ExtractPath<Schemas extends ReadonlyArray<HttpApiSchema.AnyString>> = {
649
+ readonly [Entry in PathEntries<Schemas> as Entry[0]]: Entry[1]["Type"]
650
+ }
651
+
652
+ /**
653
+ * @since 1.0.0
654
+ * @category models
655
+ */
656
+ export type Constructor<Name extends string, Method extends HttpMethod> = <
657
+ const Schemas extends ReadonlyArray<HttpApiSchema.AnyString>
658
+ >(
659
+ segments: TemplateStringsArray,
660
+ ...schemas: Schemas
661
+ ) => HttpApiEndpoint<
662
+ Name,
663
+ Method,
664
+ Schemas["length"] extends 0 ? never : Types.Simplify<ExtractPath<Schemas>>,
665
+ never,
666
+ never,
667
+ never,
668
+ void,
669
+ never,
670
+ Schemas[number]["Context"]
671
+ >
631
672
  }
632
673
 
633
674
  const Proto = {
@@ -753,66 +794,140 @@ const makeProto = <
753
794
  * @since 1.0.0
754
795
  * @category constructors
755
796
  */
756
- export const make = <Method extends HttpMethod>(method: Method) =>
757
- <const Name extends string>(
758
- name: Name,
759
- path: HttpRouter.PathInput
760
- ): HttpApiEndpoint<Name, Method> =>
761
- makeProto({
762
- name,
763
- path,
764
- method,
765
- pathSchema: Option.none(),
766
- urlParamsSchema: Option.none(),
767
- payloadSchema: Option.none(),
768
- headersSchema: Option.none(),
769
- successSchema: HttpApiSchema.NoContent as any,
770
- errorSchema: Schema.Never as any,
771
- annotations: Context.empty(),
772
- middlewares: new Set()
773
- })
797
+ export const make = <Method extends HttpMethod>(method: Method): {
798
+ <const Name extends string>(name: Name): HttpApiEndpoint.Constructor<Name, Method>
799
+ <const Name extends string>(name: Name, path: HttpRouter.PathInput): HttpApiEndpoint<Name, Method>
800
+ } =>
801
+ ((name: string, ...args: [HttpRouter.PathInput]) => {
802
+ if (args.length === 1) {
803
+ return makeProto({
804
+ name,
805
+ path: args[0],
806
+ method,
807
+ pathSchema: Option.none(),
808
+ urlParamsSchema: Option.none(),
809
+ payloadSchema: Option.none(),
810
+ headersSchema: Option.none(),
811
+ successSchema: HttpApiSchema.NoContent as any,
812
+ errorSchema: Schema.Never as any,
813
+ annotations: Context.empty(),
814
+ middlewares: new Set()
815
+ })
816
+ }
817
+ return (segments: TemplateStringsArray, ...schemas: ReadonlyArray<HttpApiSchema.AnyString>) => {
818
+ let path = segments[0] as HttpRouter.PathInput
819
+ let pathSchema = Option.none<Schema.Schema.Any>()
820
+ if (schemas.length > 0) {
821
+ const obj: Record<string, Schema.Schema.Any> = {}
822
+ for (let i = 0; i < schemas.length; i++) {
823
+ const schema = schemas[i]
824
+ const key = HttpApiSchema.getParam(schema.ast) ?? String(i)
825
+ obj[key] = schema
826
+ path += `:${key}${segments[i + 1]}`
827
+ }
828
+ pathSchema = Option.some(Schema.Struct(obj))
829
+ }
830
+ return makeProto({
831
+ name,
832
+ path,
833
+ method,
834
+ pathSchema,
835
+ urlParamsSchema: Option.none(),
836
+ payloadSchema: Option.none(),
837
+ headersSchema: Option.none(),
838
+ successSchema: HttpApiSchema.NoContent as any,
839
+ errorSchema: Schema.Never as any,
840
+ annotations: Context.empty(),
841
+ middlewares: new Set()
842
+ })
843
+ }
844
+ }) as any
774
845
 
775
846
  /**
776
847
  * @since 1.0.0
777
848
  * @category constructors
778
849
  */
779
- export const get: <const Name extends string>(
780
- name: Name,
781
- path: HttpRouter.PathInput
782
- ) => HttpApiEndpoint<Name, "GET"> = make("GET")
850
+ export const get: {
851
+ /**
852
+ * @since 1.0.0
853
+ * @category constructors
854
+ */
855
+ <const Name extends string>(name: Name): HttpApiEndpoint.Constructor<Name, "GET">
856
+ /**
857
+ * @since 1.0.0
858
+ * @category constructors
859
+ */
860
+ <const Name extends string>(name: Name, path: HttpRouter.PathInput): HttpApiEndpoint<Name, "GET">
861
+ } = make("GET")
783
862
 
784
863
  /**
785
864
  * @since 1.0.0
786
865
  * @category constructors
787
866
  */
788
- export const post: <const Name extends string>(
789
- name: Name,
790
- path: HttpRouter.PathInput
791
- ) => HttpApiEndpoint<Name, "POST"> = make("POST")
867
+ export const post: {
868
+ /**
869
+ * @since 1.0.0
870
+ * @category constructors
871
+ */
872
+ <const Name extends string>(name: Name): HttpApiEndpoint.Constructor<Name, "POST">
873
+ /**
874
+ * @since 1.0.0
875
+ * @category constructors
876
+ */
877
+ <const Name extends string>(name: Name, path: HttpRouter.PathInput): HttpApiEndpoint<Name, "POST">
878
+ } = make("POST")
792
879
 
793
880
  /**
794
881
  * @since 1.0.0
795
882
  * @category constructors
796
883
  */
797
- export const put: <const Name extends string>(
798
- name: Name,
799
- path: HttpRouter.PathInput
800
- ) => HttpApiEndpoint<Name, "PUT"> = make("PUT")
884
+ export const put: {
885
+ /**
886
+ * @since 1.0.0
887
+ * @category constructors
888
+ */
889
+ <const Name extends string>(name: Name): HttpApiEndpoint.Constructor<Name, "PUT">
890
+ /**
891
+ * @since 1.0.0
892
+ * @category constructors
893
+ */
894
+ <const Name extends string>(name: Name, path: HttpRouter.PathInput): HttpApiEndpoint<Name, "PUT">
895
+ } = make("PUT")
801
896
 
802
897
  /**
803
898
  * @since 1.0.0
804
899
  * @category constructors
805
900
  */
806
- export const patch: <const Name extends string>(
807
- name: Name,
808
- path: HttpRouter.PathInput
809
- ) => HttpApiEndpoint<Name, "PATCH"> = make("PATCH")
901
+ export const patch: {
902
+ /**
903
+ * @since 1.0.0
904
+ * @category constructors
905
+ */
906
+ <const Name extends string>(name: Name): HttpApiEndpoint.Constructor<Name, "PATCH">
907
+ /**
908
+ * @since 1.0.0
909
+ * @category constructors
910
+ */
911
+ <const Name extends string>(name: Name, path: HttpRouter.PathInput): HttpApiEndpoint<Name, "PATCH">
912
+ } = make(
913
+ "PATCH"
914
+ )
810
915
 
811
916
  /**
812
917
  * @since 1.0.0
813
918
  * @category constructors
814
919
  */
815
- export const del: <const Name extends string>(
816
- name: Name,
817
- path: HttpRouter.PathInput
818
- ) => HttpApiEndpoint<Name, "DELETE"> = make("DELETE")
920
+ export const del: {
921
+ /**
922
+ * @since 1.0.0
923
+ * @category constructors
924
+ */
925
+ <const Name extends string>(name: Name): HttpApiEndpoint.Constructor<Name, "DELETE">
926
+ /**
927
+ * @since 1.0.0
928
+ * @category constructors
929
+ */
930
+ <const Name extends string>(name: Name, path: HttpRouter.PathInput): HttpApiEndpoint<Name, "DELETE">
931
+ } = make(
932
+ "DELETE"
933
+ )
@@ -37,6 +37,14 @@ export const AnnotationEmptyDecodeable: unique symbol = Symbol.for(
37
37
  */
38
38
  export const AnnotationEncoding: unique symbol = Symbol.for("@effect/platform/HttpApiSchema/AnnotationEncoding")
39
39
 
40
+ /**
41
+ * @since 1.0.0
42
+ * @category annotations
43
+ */
44
+ export const AnnotationParam: unique symbol = Symbol.for(
45
+ "@effect/platform/HttpApiSchema/AnnotationParam"
46
+ )
47
+
40
48
  const mergedAnnotations = (ast: AST.AST): Record<symbol, unknown> =>
41
49
  ast._tag === "Transformation" ?
42
50
  {
@@ -78,6 +86,12 @@ const encodingJson: Encoding = {
78
86
  */
79
87
  export const getEncoding = (ast: AST.AST): Encoding => getAnnotation<Encoding>(ast, AnnotationEncoding) ?? encodingJson
80
88
 
89
+ /**
90
+ * @since 1.0.0
91
+ * @category annotations
92
+ */
93
+ export const getParam = (ast: AST.AST): string | undefined => ast.annotations[AnnotationParam] as string | undefined
94
+
81
95
  /**
82
96
  * @since 1.0.0
83
97
  * @category annotations
@@ -155,13 +169,44 @@ export const UnionUnify = <A extends Schema.Schema.All, B extends Schema.Schema.
155
169
  )))
156
170
  }
157
171
 
172
+ type Void$ = typeof Schema.Void
173
+
158
174
  /**
159
175
  * @since 1.0.0
160
- * @category params
176
+ * @category path params
161
177
  */
162
- export interface PathParams extends Schema.Record$<typeof Schema.String, typeof Schema.String> {}
178
+ export interface Param<Name extends string, S extends Schema.Schema.Any>
179
+ extends Schema.Schema<S["Type"], S["Encoded"], S["Context"]>
180
+ {
181
+ readonly [AnnotationParam]: Name
182
+ }
163
183
 
164
- type Void$ = typeof Schema.Void
184
+ /**
185
+ * @since 1.0.0
186
+ * @category path params
187
+ */
188
+ export const param: {
189
+ /**
190
+ * @since 1.0.0
191
+ * @category path params
192
+ */
193
+ <Name extends string>(name: Name): <S extends AnyString>(schema: S) => Param<Name, S>
194
+ /**
195
+ * @since 1.0.0
196
+ * @category path params
197
+ */
198
+ <Name extends string, S extends AnyString>(name: Name, schema: S): Param<Name, S>
199
+ } = dual(
200
+ 2,
201
+ <Name extends string, S extends AnyString>(name: Name, schema: S): Param<Name, S> =>
202
+ schema.annotations({ [AnnotationParam]: name }) as any
203
+ )
204
+
205
+ /**
206
+ * @since 1.0.0
207
+ * @category path params
208
+ */
209
+ export type AnyString = Schema.Schema<any, string, never> | Schema.Schema<any, string, any>
165
210
 
166
211
  /**
167
212
  * @since 1.0.0
@@ -13,7 +13,7 @@ import type { ParseOptions } from "effect/SchemaAST"
13
13
  import type * as Stream from "effect/Stream"
14
14
  import * as FileSystem from "./FileSystem.js"
15
15
  import type * as Headers from "./Headers.js"
16
- import type * as UrlParams from "./UrlParams.js"
16
+ import * as UrlParams from "./UrlParams.js"
17
17
 
18
18
  /**
19
19
  * @since 1.0.0
@@ -56,13 +56,17 @@ export const schemaBodyJson = <A, I, R>(schema: Schema.Schema<A, I, R>, options?
56
56
  * @since 1.0.0
57
57
  * @category schema
58
58
  */
59
- export const schemaBodyUrlParams = <A, I extends Readonly<Record<string, string | undefined>>, R>(
59
+ export const schemaBodyUrlParams = <
60
+ A,
61
+ I extends Readonly<Record<string, string | ReadonlyArray<string> | undefined>>,
62
+ R
63
+ >(
60
64
  schema: Schema.Schema<A, I, R>,
61
65
  options?: ParseOptions | undefined
62
66
  ) => {
63
- const parse = Schema.decodeUnknown(schema, options)
67
+ const decode = UrlParams.schemaStruct(schema, options)
64
68
  return <E>(self: HttpIncomingMessage<E>): Effect.Effect<A, E | ParseResult.ParseError, R> =>
65
- Effect.flatMap(self.urlParamsBody, (_) => parse(Object.fromEntries(_)))
69
+ Effect.flatMap(self.urlParamsBody, decode)
66
70
  }
67
71
 
68
72
  /**
@@ -183,7 +183,11 @@ export const schemaBodyForm: <A, I extends Partial<Multipart.Persisted>, R>(
183
183
  * @since 1.0.0
184
184
  * @category schema
185
185
  */
186
- export const schemaBodyUrlParams: <A, I extends Readonly<Record<string, string | undefined>>, R>(
186
+ export const schemaBodyUrlParams: <
187
+ A,
188
+ I extends Readonly<Record<string, string | ReadonlyArray<string> | undefined>>,
189
+ R
190
+ >(
187
191
  schema: Schema.Schema<A, I, R>,
188
192
  options?: ParseOptions | undefined
189
193
  ) => Effect.Effect<A, ParseResult.ParseError | Error.RequestError, R | HttpServerRequest> = internal.schemaBodyUrlParams
package/src/Multipart.ts CHANGED
@@ -114,7 +114,7 @@ export const isPersistedFile: (u: unknown) => u is PersistedFile = internal.isPe
114
114
  * @category models
115
115
  */
116
116
  export interface Persisted {
117
- readonly [key: string]: ReadonlyArray<PersistedFile> | string
117
+ readonly [key: string]: ReadonlyArray<PersistedFile> | ReadonlyArray<string> | string
118
118
  }
119
119
 
120
120
  /**
@@ -85,6 +85,7 @@ export interface String extends Annotations {
85
85
  minLength?: number
86
86
  maxLength?: number
87
87
  pattern?: string
88
+ format?: string
88
89
  contentEncoding?: string
89
90
  contentMediaType?: string
90
91
  contentSchema?: JsonSchema
@@ -99,6 +100,7 @@ export interface Numeric extends Annotations {
99
100
  exclusiveMinimum?: number
100
101
  maximum?: number
101
102
  exclusiveMaximum?: number
103
+ format?: string
102
104
  }
103
105
 
104
106
  /**
package/src/UrlParams.ts CHANGED
@@ -236,13 +236,7 @@ export const remove: {
236
236
 
237
237
  /**
238
238
  * @since 1.0.0
239
- * @category combinators
240
- */
241
- export const toString = (self: UrlParams): string => new URLSearchParams(self as any).toString()
242
-
243
- /**
244
- * @since 1.0.0
245
- * @category constructors
239
+ * @category conversions
246
240
  */
247
241
  export const makeUrl = (url: string, params: UrlParams, hash: Option.Option<string>): Either.Either<URL, Error> => {
248
242
  try {
@@ -262,6 +256,12 @@ export const makeUrl = (url: string, params: UrlParams, hash: Option.Option<stri
262
256
  }
263
257
  }
264
258
 
259
+ /**
260
+ * @since 1.0.0
261
+ * @category conversions
262
+ */
263
+ export const toString = (self: UrlParams): string => new URLSearchParams(self as any).toString()
264
+
265
265
  const baseUrl = (): string | undefined => {
266
266
  if (
267
267
  "location" in globalThis &&
@@ -327,3 +327,35 @@ export const schemaJson = <A, I, R>(schema: Schema.Schema<A, I, R>, options?: Pa
327
327
  (self: UrlParams, field: string) => Effect.Effect<A, ParseResult.ParseError, R>
328
328
  >(2, (self, field) => parse(Option.getOrElse(getLast(self, field), () => "")))
329
329
  }
330
+
331
+ /**
332
+ * Extract schema from all key-value pairs in the given `UrlParams`.
333
+ *
334
+ * @example
335
+ * import { Effect, Schema } from "effect"
336
+ * import { UrlParams } from "@effect/platform"
337
+ *
338
+ * Effect.gen(function* () {
339
+ * const urlParams = UrlParams.fromInput({ "a": [10, "string"], "b": false })
340
+ * const result = yield* UrlParams.schemaStruct(Schema.Struct({
341
+ * a: Schema.Tuple(Schema.NumberFromString, Schema.String),
342
+ * b: Schema.BooleanFromString
343
+ * }))(urlParams)
344
+ *
345
+ * assert.deepStrictEqual(result, {
346
+ * a: [10, "string"],
347
+ * b: false
348
+ * })
349
+ * })
350
+ *
351
+ * @since 1.0.0
352
+ * @category schema
353
+ */
354
+ export const schemaStruct = <A, I extends Record<string, string | ReadonlyArray<string> | undefined>, R>(
355
+ schema: Schema.Schema<A, I, R>,
356
+ options?: ParseOptions | undefined
357
+ ) =>
358
+ (self: UrlParams): Effect.Effect<A, ParseResult.ParseError, R> => {
359
+ const parse = Schema.decodeUnknown(schema, options)
360
+ return parse(toRecord(self))
361
+ }
@@ -122,7 +122,11 @@ export const schemaBodyForm = <A, I extends Partial<Multipart.Persisted>, R>(
122
122
  }
123
123
 
124
124
  /** @internal */
125
- export const schemaBodyUrlParams = <A, I extends Readonly<Record<string, string | undefined>>, R>(
125
+ export const schemaBodyUrlParams = <
126
+ A,
127
+ I extends Readonly<Record<string, string | ReadonlyArray<string> | undefined>>,
128
+ R
129
+ >(
126
130
  schema: Schema.Schema<A, I, R>,
127
131
  options?: ParseOptions | undefined
128
132
  ) => {
@@ -397,30 +397,36 @@ export const toPersisted = (
397
397
  const fs = yield* FileSystem.FileSystem
398
398
  const path_ = yield* Path.Path
399
399
  const dir = yield* fs.makeTempDirectoryScoped()
400
- return yield* Stream.runFoldEffect(
401
- stream,
402
- Object.create(null) as Record<string, Array<Multipart.PersistedFile> | string>,
403
- (persisted, part) => {
404
- if (part._tag === "Field") {
400
+ const persisted: Record<string, Array<Multipart.PersistedFile> | Array<string> | string> = Object.create(null)
401
+ yield* Stream.runForEach(stream, (part) => {
402
+ if (part._tag === "Field") {
403
+ if (!(part.key in persisted)) {
405
404
  persisted[part.key] = part.value
406
- return Effect.succeed(persisted)
405
+ } else if (typeof persisted[part.key] === "string") {
406
+ persisted[part.key] = [persisted[part.key] as string, part.value]
407
+ } else {
408
+ ;(persisted[part.key] as Array<string>).push(part.value)
407
409
  }
408
- const file = part
409
- const path = path_.join(dir, path_.basename(file.name).slice(-128))
410
- if (!Array.isArray(persisted[part.key])) {
411
- persisted[part.key] = []
412
- }
413
- ;(persisted[part.key] as Array<Multipart.PersistedFile>).push(
414
- new PersistedFileImpl(
415
- file.key,
416
- file.name,
417
- file.contentType,
418
- path
419
- )
420
- )
421
- return Effect.as(writeFile(path, file), persisted)
410
+ return Effect.void
411
+ } else if (part.name === "") {
412
+ return Effect.void
422
413
  }
423
- )
414
+ const file = part
415
+ const path = path_.join(dir, path_.basename(file.name).slice(-128))
416
+ const filePart = new PersistedFileImpl(
417
+ file.key,
418
+ file.name,
419
+ file.contentType,
420
+ path
421
+ )
422
+ if (Array.isArray(persisted[part.key])) {
423
+ ;(persisted[part.key] as Array<Multipart.PersistedFile>).push(filePart)
424
+ } else {
425
+ persisted[part.key] = [filePart]
426
+ }
427
+ return writeFile(path, file)
428
+ })
429
+ return persisted
424
430
  }).pipe(
425
431
  Effect.catchTags({
426
432
  SystemError: (cause) => Effect.fail(new MultipartError({ reason: "InternalError", cause })),