@effect-app/infra 2.90.0 → 2.91.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.
@@ -2,9 +2,8 @@
2
2
  /* eslint-disable @typescript-eslint/no-unsafe-argument */
3
3
  /* eslint-disable @typescript-eslint/no-empty-object-type */
4
4
  /* eslint-disable @typescript-eslint/no-explicit-any */
5
- import { determineMethod, isCommand } from "@effect-app/infra/api/routing/utils"
6
5
  import { Rpc, RpcGroup, RpcServer } from "@effect/rpc"
7
- import { type Array, Effect, Layer, type NonEmptyReadonlyArray, Predicate, S, Schedule, Schema, type Scope } from "effect-app"
6
+ import { type Array, Effect, Layer, type NonEmptyReadonlyArray, Predicate, S, Schema, type Scope } from "effect-app"
8
7
  import type { GetEffectContext, GetEffectError, RPCContextMap } from "effect-app/client/req"
9
8
  import { type HttpHeaders, HttpRouter } from "effect-app/http"
10
9
  import { typedKeysOf, typedValuesOf } from "effect-app/utils"
@@ -16,11 +15,6 @@ import { DevMode, type RouterMiddleware } from "./routing/middleware.js"
16
15
 
17
16
  export * from "./routing/middleware.js"
18
17
 
19
- // retry just once on optimistic concurrency exceptions
20
- const optimisticConcurrencySchedule = Schedule.once.pipe(
21
- Schedule.intersect(Schedule.recurWhile<any>((a) => a?._tag === "OptimisticConcurrencyException"))
22
- )
23
-
24
18
  // it's the result of extending S.Req setting success, config
25
19
  // it's a schema plus some metadata
26
20
  export type AnyRequestModule = S.Schema.Any & {
@@ -55,8 +49,8 @@ export interface AddAction<Actions extends AnyRequestModule, Accum extends Recor
55
49
  namespace RequestTypes {
56
50
  export const DECODED = "d" as const
57
51
  export type DECODED = typeof DECODED
58
- export const TYPE = "raw" as const
59
- export type TYPE = typeof TYPE
52
+ export const RAW = "raw" as const
53
+ export type RAW = typeof RAW
60
54
  }
61
55
  type RequestType = typeof RequestTypes[keyof typeof RequestTypes]
62
56
 
@@ -157,7 +151,7 @@ export type RouteMatcher<
157
151
  /**
158
152
  * Requires the Encoded shape (e.g directly undecoded from DB, so that we don't do multiple Decode/Encode)
159
153
  */
160
- raw: Match<Resource, RequestContextMap, RequestTypes.TYPE, Key>
154
+ raw: Match<Resource, RequestContextMap, RequestTypes.RAW, Key>
161
155
  }
162
156
  }
163
157
 
@@ -238,9 +232,9 @@ export const makeRouter = <
238
232
  type HandlersDecoded<Action extends AnyRequestModule> = Handlers<Action, RequestTypes.DECODED>
239
233
 
240
234
  type HandlersRaw<Action extends AnyRequestModule> =
241
- | { raw: HandlerWithInputGen<Action, RequestTypes.TYPE> }
242
- | { raw: HandlerWithInputEff<Action, RequestTypes.TYPE> }
243
- | { raw: HandlerEff<Action, RequestTypes.TYPE> }
235
+ | { raw: HandlerWithInputGen<Action, RequestTypes.RAW> }
236
+ | { raw: HandlerWithInputEff<Action, RequestTypes.RAW> }
237
+ | { raw: HandlerEff<Action, RequestTypes.RAW> }
244
238
 
245
239
  type AnyHandlers<Action extends AnyRequestModule> = HandlersRaw<Action> | HandlersDecoded<Action>
246
240
 
@@ -287,13 +281,13 @@ export const makeRouter = <
287
281
  ? class {
288
282
  static request = rsc[cur]
289
283
  static stack = stack
290
- static _tag = RequestTypes.TYPE
284
+ static _tag = RequestTypes.RAW
291
285
  static handler = () => handlerImpl
292
286
  }
293
287
  : class {
294
288
  static request = rsc[cur]
295
289
  static stack = stack
296
- static _tag = RequestTypes.TYPE
290
+ static _tag = RequestTypes.RAW
297
291
  static handler = handlerImpl
298
292
  }
299
293
  }
@@ -303,16 +297,6 @@ export const makeRouter = <
303
297
  {} as RouteMatcher<RequestContextMap, Resource>
304
298
  )
305
299
 
306
- const router: AddAction<RequestModules[keyof RequestModules]> = {
307
- accum: {},
308
- add(a: any) {
309
- ;(this.accum as any)[a.request._tag] = a
310
- ;(this as any)[a.request._tag] = a
311
- if (Object.keys(this.accum).length === Object.keys(requestModules).length) return this.accum as any
312
- return this as any
313
- }
314
- }
315
-
316
300
  const router3: <
317
301
  const Impl extends {
318
302
  [K in keyof FilterRequestModules<Resource>]: AnyHandlers<Resource[K]>
@@ -322,7 +306,7 @@ export const makeRouter = <
322
306
  ) => {
323
307
  [K in keyof Impl & keyof FilterRequestModules<Resource>]: Handler<
324
308
  FilterRequestModules<Resource>[K],
325
- Impl[K] extends { raw: any } ? RequestTypes.TYPE : RequestTypes.DECODED,
309
+ Impl[K] extends { raw: any } ? RequestTypes.RAW : RequestTypes.DECODED,
326
310
  Exclude<
327
311
  Exclude<
328
312
  // retrieves context R from the actual implementation of the handler
@@ -358,38 +342,32 @@ export const makeRouter = <
358
342
  MakeE,
359
343
  MakeR,
360
344
  THandlers extends {
361
- // import to keep them separate via | for type checking!!
345
+ // important to keep them separate via | for type checking!!
362
346
  [K in keyof RequestModules]: AnyHandler<Resource[K]>
363
347
  },
364
348
  MakeDependencies extends NonEmptyReadonlyArray<Layer.Layer.Any> | never[]
365
349
  >(
366
350
  dependencies: MakeDependencies,
367
- make: Effect<THandlers, MakeE, MakeR> | Generator<YieldWrap<Effect<any, MakeE, MakeR>>, THandlers, any>
351
+ make: (
352
+ match: any
353
+ ) => Effect<THandlers, MakeE, MakeR> | Generator<YieldWrap<Effect<any, MakeE, MakeR>>, THandlers, any>
368
354
  ) => {
369
355
  type Router = RouterShape<Resource>
370
356
  const layer = Effect
371
357
  .gen(function*() {
372
- make = (make as any)[Symbol.toStringTag] === "GeneratorFunction"
358
+ const finalMake = ((make as any)[Symbol.toStringTag] === "GeneratorFunction"
373
359
  ? Effect.fnUntraced(make as any)(router3) as any
374
- : make
360
+ : make(router3) as any) as Effect<THandlers, MakeE, MakeR>
375
361
 
376
- const controllers = yield* make
362
+ const controllers = yield* finalMake
377
363
 
378
364
  // return make.pipe(Effect.map((c) => controllers(c, dependencies)))
379
365
  const mapped = typedKeysOf(requestModules).reduce((acc, cur) => {
380
366
  const handler = controllers[cur as keyof typeof controllers]
381
367
  const resource = rsc[cur]
382
368
 
383
- const method = determineMethod(String(cur), resource)
384
-
385
- const handle = isCommand(method)
386
- ? (req: S.Schema.Type<AnyRequestModule>, headers: HttpHeaders.Headers) =>
387
- Effect.retry(handler.handler(req, headers) as any, optimisticConcurrencySchedule)
388
- : (req: S.Schema.Type<AnyRequestModule>, headers: HttpHeaders.Headers) =>
389
- Effect.interruptible(handler.handler(req, headers) as any)
390
-
391
369
  acc[cur] = [
392
- handler._tag === RequestTypes.TYPE
370
+ handler._tag === RequestTypes.RAW
393
371
  ? class extends (resource as any) {
394
372
  static success = S.encodedSchema(resource.success)
395
373
  get [Schema.symbolSerializable]() {
@@ -404,12 +382,11 @@ export const makeRouter = <
404
382
  } as any
405
383
  : resource,
406
384
  (payload: any, headers: any) =>
407
- handle(payload, headers).pipe(
385
+ (handler.handler(payload, headers) as Effect<unknown, unknown, unknown>).pipe(
408
386
  Effect.withSpan("Request." + resource._tag, {
409
387
  captureStackTrace: () => handler.stack // capturing the handler stack is the main reason why we are doing the span here
410
388
  })
411
- ),
412
- meta.moduleName
389
+ )
413
390
  ] as const
414
391
  return acc
415
392
  }, {} as any) as {
@@ -502,16 +479,12 @@ export const makeRouter = <
502
479
  Effect<
503
480
  any,
504
481
  any,
505
- Make["strict"] extends false ? any
506
- : Make extends { dependencies: Array<Layer.Layer.Any> } ? MakeDepsOut<Make>
507
- : any
482
+ any
508
483
  >
509
484
  >,
510
485
  { [K in keyof FilterRequestModules<Resource>]: AnyHandler<Resource[K]> },
511
486
  any
512
487
  >
513
-
514
- strict?: boolean
515
488
  /** @deprecated */
516
489
  readonly ಠ_ಠ: never
517
490
  }
@@ -539,14 +512,11 @@ export const makeRouter = <
539
512
  <
540
513
  const Make extends {
541
514
  dependencies?: Array<Layer.Layer.Any>
542
- effect: Effect<
515
+ effect: (match: typeof router3) => Effect<
543
516
  { [K in keyof FilterRequestModules<Resource>]: AnyHandler<Resource[K]> },
544
517
  any,
545
- Make["strict"] extends false ? any
546
- : Make extends { dependencies: Array<Layer.Layer.Any> } ? MakeDepsOut<Make>
547
- : any
518
+ any
548
519
  >
549
- strict?: boolean
550
520
  /** @deprecated */
551
521
  readonly ಠ_ಠ: never
552
522
  }
@@ -574,12 +544,11 @@ export const makeRouter = <
574
544
  <
575
545
  const Make extends {
576
546
  dependencies?: Array<Layer.Layer.Any>
577
- effect: Effect<
547
+ effect: (match: typeof router3) => Effect<
578
548
  { [K in keyof FilterRequestModules<Resource>]: AnyHandler<Resource[K]> },
579
549
  any,
580
- Make["strict"] extends false ? any : MakeDepsOut<Make>
550
+ any
581
551
  >
582
- strict?: boolean
583
552
  /** @deprecated */
584
553
  readonly ಠ_ಠ: never
585
554
  }
@@ -607,12 +576,11 @@ export const makeRouter = <
607
576
  <
608
577
  const Make extends {
609
578
  dependencies?: Array<Layer.Layer.Any>
610
- effect: Effect<
579
+ effect: (match: typeof router3) => Effect<
611
580
  { [K in keyof FilterRequestModules<Resource>]: AnyHandler<Resource[K]> },
612
581
  any,
613
- Make["strict"] extends false ? any : MakeDepsOut<Make>
582
+ any
614
583
  >
615
- strict?: boolean
616
584
  /** @deprecated */
617
585
  readonly ಠ_ಠ: never
618
586
  }
@@ -640,12 +608,11 @@ export const makeRouter = <
640
608
  <
641
609
  const Make extends {
642
610
  dependencies?: Array<Layer.Layer.Any>
643
- effect: Effect<
611
+ effect: (match: typeof router3) => Effect<
644
612
  { [K in keyof FilterRequestModules<Resource>]: AnyHandler<Resource[K]> },
645
613
  any,
646
- MakeDepsOut<Make>
614
+ any
647
615
  >
648
- strict?: boolean
649
616
  /** @deprecated */
650
617
  readonly ಠ_ಠ: never
651
618
  }
@@ -673,12 +640,11 @@ export const makeRouter = <
673
640
  <
674
641
  const Make extends {
675
642
  dependencies?: Array<Layer.Layer.Any>
676
- effect: Effect<
643
+ effect: (match: typeof router3) => Effect<
677
644
  { [K in keyof FilterRequestModules<Resource>]: AnyHandler<Resource[K]> },
678
645
  any,
679
- MakeDepsOut<Make>
646
+ any
680
647
  >
681
- strict?: boolean
682
648
  }
683
649
  >(
684
650
  make: Make
@@ -709,16 +675,12 @@ export const makeRouter = <
709
675
  Effect<
710
676
  any,
711
677
  any,
712
- Make["strict"] extends false ? any
713
- : Make extends { dependencies: Array<Layer.Layer.Any> } ? MakeDepsOut<Make>
714
- : any
678
+ any
715
679
  >
716
680
  >,
717
681
  { [K in keyof FilterRequestModules<Resource>]: AnyHandler<Resource[K]> },
718
682
  any
719
683
  >
720
-
721
- strict?: boolean
722
684
  }
723
685
  >(
724
686
  make: Make
@@ -745,15 +707,14 @@ export const makeRouter = <
745
707
  const Make extends {
746
708
  dependencies: [
747
709
  ...Make["dependencies"],
748
- ...Exclude<Effect.Context<Make["effect"]>, MakeDepsOut<Make>> extends never ? []
749
- : [Layer.Layer<Exclude<Effect.Context<Make["effect"]>, MakeDepsOut<Make>>, never, never>]
710
+ ...Exclude<Effect.Context<ReturnType<Make["effect"]>>, MakeDepsOut<Make>> extends never ? []
711
+ : [Layer.Layer<Exclude<Effect.Context<ReturnType<Make["effect"]>>, MakeDepsOut<Make>>, never, never>]
750
712
  ]
751
- effect: Effect<
713
+ effect: (match: typeof router3) => Effect<
752
714
  { [K in keyof FilterRequestModules<Resource>]: AnyHandler<Resource[K]> },
753
715
  any,
754
716
  any
755
717
  >
756
- strict?: boolean
757
718
  }
758
719
  >(
759
720
  make: Make
@@ -776,10 +737,10 @@ export const makeRouter = <
776
737
  make: Make
777
738
  }
778
739
  } =
779
- ((make: { dependencies: any; effect: any; strict?: any }) =>
740
+ ((make: { dependencies: any; effect: any }) =>
780
741
  Object.assign(makeRoutes(make.dependencies, make.effect), { make })) as any
781
742
 
782
- return Object.assign(effect, routeMatcher, { router, router3 })
743
+ return effect
783
744
  }
784
745
 
785
746
  function matchAll<
@@ -804,12 +765,6 @@ export const makeRouter = <
804
765
 
805
766
  return {
806
767
  matchAll,
807
- matchFor: <
808
- const ModuleName extends string,
809
- const Resource extends Record<string, any>
810
- >(
811
- rsc: Resource & { meta: { moduleName: ModuleName } }
812
- ) => matchFor(rsc).router3,
813
768
  Router: matchFor
814
769
  }
815
770
  }
@@ -818,21 +773,26 @@ export type MakeDeps<Make> = Make extends { readonly dependencies: ReadonlyArray
818
773
  ? Make["dependencies"][number]
819
774
  : never
820
775
 
821
- export type MakeErrors<Make> = Make extends { readonly effect: Effect<any, infer E, any> } ? E
822
- : Make extends { readonly effect: (_: any) => Generator<YieldWrap<Effect<any, infer E, any>>, any, any> } ? E
776
+ export type MakeErrors<Make> = Make extends { readonly effect: (_: any) => Effect<infer _A, infer E, infer _R> } ? E
777
+ : Make extends { readonly effect: (_: any) => Effect<infer _A, never, infer _R> } ? never
778
+ : Make extends
779
+ { readonly effect: (_: any) => Generator<YieldWrap<Effect<infer _A, never, infer _R>>, infer _A, infer _2> } ? never
780
+ : Make extends
781
+ { readonly effect: (_: any) => Generator<YieldWrap<Effect<infer _A, infer E, infer _R>>, infer _A, infer _2> } ? E
823
782
  : never
824
783
 
825
- export type MakeContext<Make> = Make extends { readonly effect: Effect<any, any, infer R> } ? R
826
- : Make extends { readonly effect: (_: any) => Generator<YieldWrap<Effect<any, any, infer R>>, any, any> } ? R
784
+ export type MakeContext<Make> = Make extends { readonly effect: (_: any) => Effect<infer _A, infer _E, infer R> } ? R
785
+ : Make extends { readonly effect: (_: any) => Effect<infer _A, infer _E, never> } ? never
786
+ : Make extends
787
+ { readonly effect: (_: any) => Generator<YieldWrap<Effect<infer _A, infer _E, never>>, infer _A, infer _2> } ? never
788
+ : Make extends
789
+ { readonly effect: (_: any) => Generator<YieldWrap<Effect<infer _A, infer _E, infer R>>, infer _A, infer _2> } ? R
827
790
  : never
828
791
 
829
792
  export type MakeHandlers<Make, Handlers extends Record<string, any>> = Make extends
830
- { readonly effect: Effect<{ [K in keyof Handlers]: AnyHandler<Handlers[K]> }, any, any> }
831
- ? Effect.Success<Make["effect"]>
832
- : Make extends { readonly effect: (_: any) => Generator<YieldWrap<any>, infer S, any> } ? S
793
+ { readonly effect: (_: any) => Effect<{ [K in keyof Handlers]: AnyHandler<Handlers[K]> }, any, any> }
794
+ ? Effect.Success<ReturnType<Make["effect"]>>
795
+ : Make extends { readonly effect: (_: any) => Generator<YieldWrap<any>, infer S, infer _R> } ? S
833
796
  : never
834
797
 
835
- /**
836
- * @since 3.9.0
837
- */
838
798
  export type MakeDepsOut<Make> = Contravariant.Type<MakeDeps<Make>[Layer.LayerTypeId]["_ROut"]>
@@ -237,7 +237,7 @@ export class SomethingService2 extends Effect.Service<SomethingService2>()("Some
237
237
  })
238
238
  }) {}
239
239
 
240
- export const { Router, matchAll, matchFor } = makeRouter(middleware, true)
240
+ export const { Router, matchAll } = makeRouter(middleware, true)
241
241
 
242
242
  export const r2 = makeRouter(middleware2, true)
243
243
 
@@ -247,7 +247,7 @@ const router = Router(Something)({
247
247
  SomethingService.Default,
248
248
  SomethingService2.Default
249
249
  ],
250
- *effect(match) {
250
+ effect: Effect.fnUntraced(function*(match) {
251
251
  const repo = yield* SomethingRepo
252
252
  const smth = yield* SomethingService
253
253
  const smth2 = yield* SomethingService2
@@ -300,7 +300,7 @@ const router = Router(Something)({
300
300
  raw: Some.use(() => Effect.succeed("12"))
301
301
  }
302
302
  })
303
- }
303
+ })
304
304
  })
305
305
 
306
306
  it("sorts based on requirements", () => {
@@ -1 +1 @@
1
- {"version":3,"file":"controller.test.d.ts","sourceRoot":"","sources":["../controller.test.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,WAAW,EAAE,KAAK,UAAU,EAAc,MAAM,+BAA+B,CAAA;AAE7F,OAAO,EAAW,MAAM,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,YAAY,CAAA;AAE7D,OAAO,EAA6C,UAAU,EAAO,MAAM,kCAAkC,CAAA;AAE7G,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,iBAAiB,EAAE,YAAY,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,eAAe,CAAA;;;;;;AAgEhI,cAAM,kBAAmB,SAAQ,uBAU/B;CAAG;;;;;;AAML,qBAAa,eAAgB,SAAQ,oBAYnC;CACD;AA2DD,eAAO,MAAM,WAAW;;;;;;YAIM,CAAA;AAE9B,MAAM,MAAM,aAAa,GAAG;IAC1B,yCAAyC;IACzC,cAAc,CAAC,EAAE,IAAI,CAAA;IACrB,iEAAiE;IACjE,UAAU,CAAC,EAAE,SAAS,MAAM,EAAE,CAAA;CAC/B,CAAA;AACD,eAAO,MAAuB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAI/B,CAAA;;;;;;;;;;AAEF,qBAAa,GAAI,SAAQ,QAA0C;CAAG;;;;;;;;;;AACtE,qBAAa,GAAI,SAAQ,QAA0C;CAAG;;;;;;;;;;;;AAEtE,qBAAa,WAAY,SAAQ,gBAEV;CAAG;;;;;;;;;;;;AAgB1B,qBAAa,YAAa,SAAQ,iBAET;CAAG;;;;;;;;;;;;AAE5B,qBAAa,aAAc,SAAQ,kBAEA;CAAG;;;;;AAItC,qBAAa,gBAAiB,SAAQ,qBAKpC;CAAG;;;;;AASL,qBAAa,aAAc,SAAQ,kBAOjC;CAAG;;;;;AAEL,qBAAa,iBAAkB,SAAQ,sBAKrC;CAAG;AAEL,eAAO,MAAQ,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAAE,QAAQ;;;;;2HAAE,QAAQ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;uCAAiC,CAAA;AAE1E,eAAO,MAAM,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAAgC,CAAA"}
1
+ {"version":3,"file":"controller.test.d.ts","sourceRoot":"","sources":["../controller.test.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,WAAW,EAAE,KAAK,UAAU,EAAc,MAAM,+BAA+B,CAAA;AAE7F,OAAO,EAAW,MAAM,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,YAAY,CAAA;AAE7D,OAAO,EAA6C,UAAU,EAAO,MAAM,kCAAkC,CAAA;AAE7G,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,iBAAiB,EAAE,YAAY,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,eAAe,CAAA;;;;;;AAgEhI,cAAM,kBAAmB,SAAQ,uBAU/B;CAAG;;;;;;AAML,qBAAa,eAAgB,SAAQ,oBAYnC;CACD;AA2DD,eAAO,MAAM,WAAW;;;;;;YAIM,CAAA;AAE9B,MAAM,MAAM,aAAa,GAAG;IAC1B,yCAAyC;IACzC,cAAc,CAAC,EAAE,IAAI,CAAA;IACrB,iEAAiE;IACjE,UAAU,CAAC,EAAE,SAAS,MAAM,EAAE,CAAA;CAC/B,CAAA;AACD,eAAO,MAAuB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAI/B,CAAA;;;;;;;;;;AAEF,qBAAa,GAAI,SAAQ,QAA0C;CAAG;;;;;;;;;;AACtE,qBAAa,GAAI,SAAQ,QAA0C;CAAG;;;;;;;;;;;;AAEtE,qBAAa,WAAY,SAAQ,gBAEV;CAAG;;;;;;;;;;;;AAgB1B,qBAAa,YAAa,SAAQ,iBAET;CAAG;;;;;;;;;;;;AAE5B,qBAAa,aAAc,SAAQ,kBAEA;CAAG;;;;;AAItC,qBAAa,gBAAiB,SAAQ,qBAKpC;CAAG;;;;;AASL,qBAAa,aAAc,SAAQ,kBAOjC;CAAG;;;;;AAEL,qBAAa,iBAAkB,SAAQ,sBAKrC;CAAG;AAEL,eAAO,MAAQ,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAAE,QAAQ;;;;;yHAAiC,CAAA;AAEhE,eAAO,MAAM,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAAgC,CAAA"}