@rikalabs/effect-react 0.0.1

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 (167) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +179 -0
  3. package/dist/actions/http.d.ts +18 -0
  4. package/dist/actions/index.d.ts +4 -0
  5. package/dist/actions/react.d.ts +7 -0
  6. package/dist/actions/service.d.ts +18 -0
  7. package/dist/actions/types.d.ts +33 -0
  8. package/dist/boundary/codecs.d.ts +40 -0
  9. package/dist/boundary/errors.d.ts +22 -0
  10. package/dist/boundary/index.d.ts +2 -0
  11. package/dist/chunk-2GIUCKL2.js +16 -0
  12. package/dist/chunk-2GIUCKL2.js.map +1 -0
  13. package/dist/chunk-2TG7YEVD.js +11 -0
  14. package/dist/chunk-2TG7YEVD.js.map +1 -0
  15. package/dist/chunk-6FI4ROTW.js +152 -0
  16. package/dist/chunk-6FI4ROTW.js.map +1 -0
  17. package/dist/chunk-C5JI7D7W.js +213 -0
  18. package/dist/chunk-C5JI7D7W.js.map +1 -0
  19. package/dist/chunk-EEYASTXR.js +99 -0
  20. package/dist/chunk-EEYASTXR.js.map +1 -0
  21. package/dist/chunk-H7MOLKTU.js +301 -0
  22. package/dist/chunk-H7MOLKTU.js.map +1 -0
  23. package/dist/chunk-IVIYY6S5.js +77 -0
  24. package/dist/chunk-IVIYY6S5.js.map +1 -0
  25. package/dist/chunk-JKN75OYC.js +87 -0
  26. package/dist/chunk-JKN75OYC.js.map +1 -0
  27. package/dist/chunk-M2CJG6T7.js +24 -0
  28. package/dist/chunk-M2CJG6T7.js.map +1 -0
  29. package/dist/chunk-MDGEGQZB.js +206 -0
  30. package/dist/chunk-MDGEGQZB.js.map +1 -0
  31. package/dist/chunk-NI2GNZ7S.js +78 -0
  32. package/dist/chunk-NI2GNZ7S.js.map +1 -0
  33. package/dist/chunk-O7XTA7H3.js +423 -0
  34. package/dist/chunk-O7XTA7H3.js.map +1 -0
  35. package/dist/chunk-S67FHWAR.js +88 -0
  36. package/dist/chunk-S67FHWAR.js.map +1 -0
  37. package/dist/chunk-SKC3HMF3.js +17 -0
  38. package/dist/chunk-SKC3HMF3.js.map +1 -0
  39. package/dist/chunk-TUJZ6XJY.js +127 -0
  40. package/dist/chunk-TUJZ6XJY.js.map +1 -0
  41. package/dist/chunk-WPV3WFMS.js +38 -0
  42. package/dist/chunk-WPV3WFMS.js.map +1 -0
  43. package/dist/chunk-XIBEKS5A.js +301 -0
  44. package/dist/chunk-XIBEKS5A.js.map +1 -0
  45. package/dist/chunk-YG22YP5K.js +68 -0
  46. package/dist/chunk-YG22YP5K.js.map +1 -0
  47. package/dist/chunk-ZMZQBREU.js +262 -0
  48. package/dist/chunk-ZMZQBREU.js.map +1 -0
  49. package/dist/client/index.cjs +191 -0
  50. package/dist/client/index.cjs.map +1 -0
  51. package/dist/client/index.d.ts +8 -0
  52. package/dist/client/index.js +14 -0
  53. package/dist/client/index.js.map +1 -0
  54. package/dist/config/index.cjs +63 -0
  55. package/dist/config/index.cjs.map +1 -0
  56. package/dist/config/index.d.ts +32 -0
  57. package/dist/config/index.js +9 -0
  58. package/dist/config/index.js.map +1 -0
  59. package/dist/data/index.d.ts +3 -0
  60. package/dist/data/react.d.ts +10 -0
  61. package/dist/data/service.d.ts +20 -0
  62. package/dist/data/types.d.ts +31 -0
  63. package/dist/devtools/events.d.ts +37 -0
  64. package/dist/devtools/index.cjs +149 -0
  65. package/dist/devtools/index.cjs.map +1 -0
  66. package/dist/devtools/index.d.ts +2 -0
  67. package/dist/devtools/index.js +18 -0
  68. package/dist/devtools/index.js.map +1 -0
  69. package/dist/devtools/react.d.ts +8 -0
  70. package/dist/form/index.cjs +301 -0
  71. package/dist/form/index.cjs.map +1 -0
  72. package/dist/form/index.d.ts +3 -0
  73. package/dist/form/index.js +14 -0
  74. package/dist/form/index.js.map +1 -0
  75. package/dist/form/react.d.ts +9 -0
  76. package/dist/form/service.d.ts +3 -0
  77. package/dist/form/types.d.ts +41 -0
  78. package/dist/framework/app.d.ts +21 -0
  79. package/dist/framework/cache.d.ts +10 -0
  80. package/dist/framework/contracts.d.ts +32 -0
  81. package/dist/framework/index.cjs +1006 -0
  82. package/dist/framework/index.cjs.map +1 -0
  83. package/dist/framework/index.d.ts +4 -0
  84. package/dist/framework/index.js +35 -0
  85. package/dist/framework/index.js.map +1 -0
  86. package/dist/framework/manifest.d.ts +12 -0
  87. package/dist/framework/vite.d.ts +13 -0
  88. package/dist/framework-vite/index.cjs +163 -0
  89. package/dist/framework-vite/index.cjs.map +1 -0
  90. package/dist/framework-vite/index.d.ts +1 -0
  91. package/dist/framework-vite/index.js +125 -0
  92. package/dist/framework-vite/index.js.map +1 -0
  93. package/dist/grid/grid.d.ts +8 -0
  94. package/dist/grid/index.cjs +238 -0
  95. package/dist/grid/index.cjs.map +1 -0
  96. package/dist/grid/index.d.ts +2 -0
  97. package/dist/grid/index.js +19 -0
  98. package/dist/grid/index.js.map +1 -0
  99. package/dist/grid/types.d.ts +35 -0
  100. package/dist/index.cjs +2512 -0
  101. package/dist/index.cjs.map +1 -0
  102. package/dist/index.d.ts +13 -0
  103. package/dist/index.js +207 -0
  104. package/dist/index.js.map +1 -0
  105. package/dist/kernel/app.d.ts +26 -0
  106. package/dist/kernel/index.d.ts +3 -0
  107. package/dist/kernel/runtime.d.ts +5 -0
  108. package/dist/kernel/telemetry.d.ts +37 -0
  109. package/dist/navigation/index.d.ts +4 -0
  110. package/dist/navigation/matcher.d.ts +13 -0
  111. package/dist/navigation/react.d.ts +12 -0
  112. package/dist/navigation/service.d.ts +23 -0
  113. package/dist/navigation/types.d.ts +65 -0
  114. package/dist/query/index.cjs +361 -0
  115. package/dist/query/index.cjs.map +1 -0
  116. package/dist/query/index.d.ts +3 -0
  117. package/dist/query/index.js +30 -0
  118. package/dist/query/index.js.map +1 -0
  119. package/dist/query/react.d.ts +27 -0
  120. package/dist/query/service.d.ts +10 -0
  121. package/dist/query/types.d.ts +5 -0
  122. package/dist/react/index.d.ts +1 -0
  123. package/dist/react/provider.d.ts +10 -0
  124. package/dist/realtime/channel.d.ts +15 -0
  125. package/dist/realtime/index.cjs +117 -0
  126. package/dist/realtime/index.cjs.map +1 -0
  127. package/dist/realtime/index.d.ts +2 -0
  128. package/dist/realtime/index.js +15 -0
  129. package/dist/realtime/index.js.map +1 -0
  130. package/dist/realtime/presence.d.ts +22 -0
  131. package/dist/render/hydration.d.ts +24 -0
  132. package/dist/render/index.d.ts +2 -0
  133. package/dist/render/ssr.d.ts +13 -0
  134. package/dist/router/helpers.d.ts +26 -0
  135. package/dist/router/index.cjs +236 -0
  136. package/dist/router/index.cjs.map +1 -0
  137. package/dist/router/index.d.ts +4 -0
  138. package/dist/router/index.js +40 -0
  139. package/dist/router/index.js.map +1 -0
  140. package/dist/router/react.d.ts +5 -0
  141. package/dist/router/service.d.ts +5 -0
  142. package/dist/router/types.d.ts +1 -0
  143. package/dist/server/index.cjs +174 -0
  144. package/dist/server/index.cjs.map +1 -0
  145. package/dist/server/index.d.ts +16 -0
  146. package/dist/server/index.js +12 -0
  147. package/dist/server/index.js.map +1 -0
  148. package/dist/state/index.cjs +128 -0
  149. package/dist/state/index.cjs.map +1 -0
  150. package/dist/state/index.d.ts +2 -0
  151. package/dist/state/index.js +36 -0
  152. package/dist/state/index.js.map +1 -0
  153. package/dist/state/react.d.ts +3 -0
  154. package/dist/state/service.d.ts +28 -0
  155. package/dist/testing/index.cjs +970 -0
  156. package/dist/testing/index.cjs.map +1 -0
  157. package/dist/testing/index.d.ts +2 -0
  158. package/dist/testing/index.js +13 -0
  159. package/dist/testing/index.js.map +1 -0
  160. package/dist/virtual/index.cjs +160 -0
  161. package/dist/virtual/index.cjs.map +1 -0
  162. package/dist/virtual/index.d.ts +2 -0
  163. package/dist/virtual/index.js +21 -0
  164. package/dist/virtual/index.js.map +1 -0
  165. package/dist/virtual/types.d.ts +25 -0
  166. package/dist/virtual/virtual.d.ts +9 -0
  167. package/package.json +156 -0
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/index.ts","../src/actions/types.ts","../src/actions/service.ts","../src/boundary/codecs.ts","../src/boundary/errors.ts","../src/kernel/telemetry.ts","../src/actions/http.ts","../src/react/provider.tsx","../src/kernel/app.ts","../src/data/types.ts","../src/data/service.ts","../src/data/react.tsx","../src/navigation/types.ts","../src/navigation/matcher.ts","../src/navigation/service.ts","../src/navigation/react.tsx","../src/kernel/runtime.ts","../src/framework/manifest.ts","../src/config/index.ts","../src/framework/app.ts","../src/framework/cache.ts","../src/framework/contracts.ts","../src/server/index.ts","../src/render/hydration.ts","../src/render/ssr.ts","../src/client/index.ts","../src/testing/index.ts","../src/state/service.ts","../src/state/react.tsx","../src/query/service.ts","../src/query/react.tsx","../src/router/helpers.ts","../src/router/service.ts","../src/router/react.tsx","../src/form/types.ts","../src/form/service.ts","../src/form/react.tsx","../src/grid/grid.ts","../src/virtual/virtual.ts","../src/realtime/channel.ts","../src/realtime/presence.ts","../src/devtools/events.ts","../src/devtools/react.tsx"],"sourcesContent":["export * from \"./framework\";\nexport * from \"./config\";\nexport * from \"./server\";\nexport * from \"./client\";\nexport * from \"./testing\";\nexport * from \"./state\";\nexport * from \"./query\";\nexport * from \"./router\";\nexport * from \"./form\";\nexport * from \"./grid\";\nexport * from \"./virtual\";\nexport * from \"./realtime\";\nexport * from \"./devtools\";\n","import type { Effect, Schema } from \"effect\";\nimport type { BoundaryError } from \"../boundary\";\n\nexport interface ActionDefinition<\n Name extends string,\n Input,\n Output,\n E,\n InputEncoded = Input,\n OutputEncoded = Output,\n ErrorEncoded = E,\n> {\n readonly name: Name;\n readonly input: Schema.Schema<Input, InputEncoded, never>;\n readonly output: Schema.Schema<Output, OutputEncoded, never>;\n readonly error: Schema.Schema<E, ErrorEncoded, never>;\n readonly handler: (input: Input) => Effect.Effect<Output, E, never>;\n}\n\nexport const defineAction = <\n Name extends string,\n Input,\n Output,\n E,\n InputEncoded = Input,\n OutputEncoded = Output,\n ErrorEncoded = E,\n>(\n definition: ActionDefinition<Name, Input, Output, E, InputEncoded, OutputEncoded, ErrorEncoded>,\n): ActionDefinition<Name, Input, Output, E, InputEncoded, OutputEncoded, ErrorEncoded> =>\n definition;\n\nexport interface AnyActionDefinition {\n readonly name: string;\n readonly input: Schema.Schema.All;\n readonly output: Schema.Schema.All;\n readonly error: Schema.Schema.All;\n readonly handler: (input: never) => Effect.Effect<unknown, unknown, never>;\n}\n\nexport type ActionError<E> = E | BoundaryError | ActionRuntimeError;\n\nexport class ActionRuntimeError extends Error {\n readonly _tag = \"ActionRuntimeError\" as const;\n\n constructor(readonly messageText: string) {\n super(messageText);\n this.name = \"ActionRuntimeError\";\n }\n}\n\nexport type ActionWireResult =\n | {\n readonly _tag: \"success\";\n readonly value: unknown;\n }\n | {\n readonly _tag: \"failure\";\n readonly error: unknown;\n }\n | {\n readonly _tag: \"defect\";\n readonly message: string;\n };\n","import { Cause, Context, Effect, Layer } from \"effect\";\nimport { Boundary, BoundaryDecodeError } from \"../boundary\";\nimport { BoundaryProtocolError } from \"../boundary/errors\";\nimport { Telemetry } from \"../kernel/telemetry\";\nimport {\n type ActionDefinition,\n type ActionError,\n type ActionWireResult,\n type AnyActionDefinition,\n} from \"./types\";\n\nconst toFailureDetail = (error: unknown): string => {\n if (error instanceof Error) {\n return `${error.name}: ${error.message}`;\n }\n return String(error);\n};\n\nexport interface ActionService {\n readonly run: <Name extends string, Input, Output, E>(\n definition: ActionDefinition<Name, Input, Output, E>,\n input: unknown,\n ) => Effect.Effect<Output, ActionError<E>, never>;\n readonly dispatch: (name: string, input: unknown) => Effect.Effect<ActionWireResult, never, never>;\n}\n\nexport class Actions extends Context.Tag(\"EffectReact/Actions\")<Actions, ActionService>() {}\n\nexport interface MakeActionsLayerOptions {\n readonly actions: readonly AnyActionDefinition[];\n}\n\nexport const makeActionsLayer = (\n options: MakeActionsLayerOptions,\n): Layer.Layer<Actions, never, Boundary | Telemetry> =>\n Layer.effect(\n Actions,\n Effect.gen(function* () {\n const boundary = yield* Boundary;\n const telemetry = yield* Telemetry;\n const actionMap = new Map<string, AnyActionDefinition>(\n options.actions.map((action) => [action.name, action] as const),\n );\n\n const run: ActionService[\"run\"] = (definition, input) =>\n Effect.gen(function* () {\n yield* telemetry.emit({\n _tag: \"action\",\n phase: \"start\",\n name: definition.name,\n timestamp: Date.now(),\n });\n\n const decodedInput = yield* boundary.decodeUnknown({\n source: `action:${definition.name}:input`,\n schema: definition.input,\n value: input,\n });\n\n const value = yield* definition.handler(decodedInput);\n\n const decodedOutput = yield* boundary.decodeUnknown({\n source: `action:${definition.name}:output`,\n schema: definition.output,\n value,\n });\n\n yield* telemetry.emit({\n _tag: \"action\",\n phase: \"success\",\n name: definition.name,\n timestamp: Date.now(),\n });\n\n return decodedOutput;\n }).pipe(\n Effect.tapError((error) =>\n telemetry.emit({\n _tag: \"action\",\n phase: \"failure\",\n name: definition.name,\n timestamp: Date.now(),\n detail: error,\n }),\n ),\n );\n\n const dispatch: ActionService[\"dispatch\"] = (name, input) =>\n Effect.gen(function* () {\n const definition = actionMap.get(name);\n if (definition === undefined) {\n return {\n _tag: \"defect\",\n message: `Unknown action: ${name}`,\n } satisfies ActionWireResult;\n }\n\n const decodedInput = yield* boundary.decodeUnknown({\n source: `action:${name}:dispatch-input`,\n schema: definition.input as never,\n value: input,\n });\n\n const handler = definition.handler as (input: unknown) => Effect.Effect<unknown, unknown, never>;\n const result = yield* Effect.exit(handler(decodedInput));\n if (result._tag === \"Success\") {\n const encoded = yield* boundary.encode({\n source: `action:${name}:wire-success`,\n schema: definition.output as never,\n value: result.value,\n });\n\n return {\n _tag: \"success\",\n value: encoded,\n } satisfies ActionWireResult;\n }\n\n const failure = Cause.failureOption(result.cause);\n if (failure._tag === \"Some\") {\n const value = failure.value;\n if (value instanceof BoundaryDecodeError || value instanceof BoundaryProtocolError) {\n return {\n _tag: \"defect\",\n message: toFailureDetail(value),\n } satisfies ActionWireResult;\n }\n\n const encodedError = yield* boundary.encode({\n source: `action:${name}:wire-failure`,\n schema: definition.error as never,\n value,\n }).pipe(\n Effect.catchAll(() => Effect.succeed(value)),\n );\n\n return {\n _tag: \"failure\",\n error: encodedError,\n } satisfies ActionWireResult;\n }\n\n return {\n _tag: \"defect\",\n message: Cause.pretty(result.cause),\n } satisfies ActionWireResult;\n }).pipe(\n Effect.catchAll((error) =>\n Effect.succeed({\n _tag: \"defect\",\n message: toFailureDetail(error),\n } satisfies ActionWireResult),\n ),\n );\n\n return {\n run,\n dispatch,\n } satisfies ActionService;\n }),\n );\n\nexport const runAction = <Name extends string, Input, Output, E>(\n definition: ActionDefinition<Name, Input, Output, E>,\n input: unknown,\n): Effect.Effect<Output, ActionError<E>, Actions> =>\n Effect.flatMap(Actions, (service) => service.run(definition, input));\n\nexport const dispatchAction = (\n name: string,\n input: unknown,\n): Effect.Effect<ActionWireResult, never, Actions> =>\n Effect.flatMap(Actions, (service) => service.dispatch(name, input));\n","import { Cause, Context, Effect, Layer, Schema } from \"effect\";\nimport type { ParseResult } from \"effect\";\nimport {\n BoundaryDecodeError,\n BoundaryProtocolError,\n BoundaryTransportError,\n type BoundaryError,\n} from \"./errors\";\n\nexport interface BoundaryService {\n readonly decodeUnknown: <A, I>(options: {\n readonly source: string;\n readonly schema: Schema.Schema<A, I, never>;\n readonly value: unknown;\n }) => Effect.Effect<A, BoundaryDecodeError, never>;\n readonly decodeTextJson: <A, I>(options: {\n readonly source: string;\n readonly schema: Schema.Schema<A, I, never>;\n readonly text: string;\n }) => Effect.Effect<A, BoundaryError, never>;\n readonly encode: <A, I>(options: {\n readonly source: string;\n readonly schema: Schema.Schema<A, I, never>;\n readonly value: A;\n }) => Effect.Effect<I, BoundaryError, never>;\n}\n\nexport class Boundary extends Context.Tag(\"EffectReact/Boundary\")<Boundary, BoundaryService>() {}\n\nconst parseErrorMessage = (error: ParseResult.ParseError): string =>\n Cause.pretty(Cause.fail(error)).trim();\n\nexport const makeBoundaryService = (): BoundaryService => ({\n decodeUnknown: ({ source, schema, value }) =>\n Schema.decodeUnknown(schema)(value).pipe(\n Effect.mapError(\n (error) => new BoundaryDecodeError(source, parseErrorMessage(error), error),\n ),\n ),\n decodeTextJson: ({ source, schema, text }) =>\n Effect.gen(function* () {\n const payload = yield* Effect.try({\n try: () => JSON.parse(text) as unknown,\n catch: (cause) =>\n new BoundaryTransportError(source, \"failed to parse JSON payload\", cause),\n });\n\n return yield* Schema.decodeUnknown(schema)(payload).pipe(\n Effect.mapError(\n (error) => new BoundaryDecodeError(source, parseErrorMessage(error), error),\n ),\n );\n }),\n encode: ({ source, schema, value }) =>\n Schema.encode(schema)(value).pipe(\n Effect.mapError((error) => new BoundaryProtocolError(source, parseErrorMessage(error))),\n ),\n});\n\nexport const BoundaryLive = Layer.succeed(Boundary, makeBoundaryService());\n\nexport const decodeUnknown = <A, I>(options: {\n readonly source: string;\n readonly schema: Schema.Schema<A, I, never>;\n readonly value: unknown;\n}): Effect.Effect<A, BoundaryDecodeError, Boundary> =>\n Effect.flatMap(Boundary, (service) => service.decodeUnknown(options));\n\nexport const decodeTextJson = <A, I>(options: {\n readonly source: string;\n readonly schema: Schema.Schema<A, I, never>;\n readonly text: string;\n}): Effect.Effect<A, BoundaryError, Boundary> =>\n Effect.flatMap(Boundary, (service) => service.decodeTextJson(options));\n\nexport const encode = <A, I>(options: {\n readonly source: string;\n readonly schema: Schema.Schema<A, I, never>;\n readonly value: A;\n}): Effect.Effect<I, BoundaryError, Boundary> =>\n Effect.flatMap(Boundary, (service) => service.encode(options));\n","import type { ParseResult } from \"effect\";\n\nexport class BoundaryDecodeError extends Error {\n readonly _tag = \"BoundaryDecodeError\" as const;\n\n constructor(\n readonly source: string,\n readonly messageText: string,\n readonly causeValue?: ParseResult.ParseError,\n ) {\n super(`Boundary decode failed at ${source}: ${messageText}`);\n this.name = \"BoundaryDecodeError\";\n }\n}\n\nexport class BoundaryTransportError extends Error {\n readonly _tag = \"BoundaryTransportError\" as const;\n\n constructor(\n readonly source: string,\n readonly messageText: string,\n readonly causeValue?: unknown,\n ) {\n super(`Boundary transport failed at ${source}: ${messageText}`);\n this.name = \"BoundaryTransportError\";\n }\n}\n\nexport class BoundaryProtocolError extends Error {\n readonly _tag = \"BoundaryProtocolError\" as const;\n\n constructor(\n readonly source: string,\n readonly messageText: string,\n ) {\n super(`Boundary protocol violation at ${source}: ${messageText}`);\n this.name = \"BoundaryProtocolError\";\n }\n}\n\nexport type BoundaryError = BoundaryDecodeError | BoundaryTransportError | BoundaryProtocolError;\n","import { Context, Effect, Layer, PubSub, Stream } from \"effect\";\n\nexport type TelemetryEvent =\n | {\n readonly _tag: \"query\";\n readonly phase: \"start\" | \"success\" | \"failure\" | \"invalidate\";\n readonly key: string;\n readonly timestamp: number;\n readonly detail?: unknown;\n }\n | {\n readonly _tag: \"navigation\";\n readonly phase: \"start\" | \"success\" | \"failure\" | \"cancel\";\n readonly pathname: string;\n readonly routeId?: string;\n readonly timestamp: number;\n readonly detail?: unknown;\n }\n | {\n readonly _tag: \"action\";\n readonly phase: \"start\" | \"success\" | \"failure\" | \"transport\";\n readonly name: string;\n readonly timestamp: number;\n readonly detail?: unknown;\n }\n | {\n readonly _tag: \"boundary\";\n readonly phase: \"decode-failure\" | \"protocol-failure\" | \"transport-failure\";\n readonly source: string;\n readonly timestamp: number;\n readonly detail?: unknown;\n };\n\nexport interface TelemetryService {\n readonly emit: (event: TelemetryEvent) => Effect.Effect<void>;\n readonly stream: Stream.Stream<TelemetryEvent>;\n}\n\nexport class Telemetry extends Context.Tag(\"EffectReact/Telemetry\")<\n Telemetry,\n TelemetryService\n>() {}\n\nexport const TelemetryLive = Layer.effect(\n Telemetry,\n Effect.map(PubSub.unbounded<TelemetryEvent>(), (pubsub) => ({\n emit: (event) => PubSub.publish(pubsub, event).pipe(Effect.asVoid),\n stream: Stream.fromPubSub(pubsub),\n })),\n);\n\nexport const emitTelemetry = (event: TelemetryEvent): Effect.Effect<void, never, Telemetry> =>\n Effect.flatMap(Telemetry, (service) => service.emit(event));\n","import { Effect, Schema } from \"effect\";\nimport { Boundary } from \"../boundary\";\nimport { Actions } from \"./service\";\nimport { type ActionDefinition, type ActionError, type ActionWireResult } from \"./types\";\n\nconst ActionRequestSchema = Schema.Struct({\n name: Schema.String,\n input: Schema.Unknown,\n});\n\nconst ActionWireResultSchema = Schema.Union(\n Schema.Struct({ _tag: Schema.Literal(\"success\"), value: Schema.Unknown }),\n Schema.Struct({ _tag: Schema.Literal(\"failure\"), error: Schema.Unknown }),\n Schema.Struct({ _tag: Schema.Literal(\"defect\"), message: Schema.String }),\n);\n\nexport class ActionTransportError extends Error {\n readonly _tag = \"ActionTransportError\" as const;\n\n constructor(\n readonly messageText: string,\n readonly causeValue?: unknown,\n ) {\n super(messageText);\n this.name = \"ActionTransportError\";\n }\n}\n\nconst jsonResponse = (status: number, body: unknown): Response =>\n new Response(JSON.stringify(body), {\n status,\n headers: {\n \"content-type\": \"application/json\",\n },\n });\n\nexport const createActionHttpHandlerEffect = (): ((\n request: Request,\n) => Effect.Effect<Response, never, Boundary | Actions>) =>\n (request) =>\n Effect.gen(function* () {\n if (request.method.toUpperCase() !== \"POST\") {\n return jsonResponse(405, { error: \"Method Not Allowed\" });\n }\n\n const rawBody = yield* Effect.tryPromise({\n try: () => request.text(),\n catch: (cause) => new ActionTransportError(\"Failed to read request body\", cause),\n });\n\n const boundary = yield* Boundary;\n const payload = yield* boundary.decodeTextJson({\n source: \"action:http:request\",\n schema: ActionRequestSchema,\n text: rawBody,\n });\n\n const actions = yield* Actions;\n const result = yield* actions.dispatch(payload.name, payload.input);\n\n return jsonResponse(200, result);\n }).pipe(\n Effect.catchAll((error) =>\n Effect.succeed(\n jsonResponse(500, {\n error: error instanceof Error ? error.message : String(error),\n }),\n ),\n ),\n );\n\nexport const createActionHttpHandler = () => {\n const handleEffect = createActionHttpHandlerEffect();\n return (runtimeRun: <A>(effect: Effect.Effect<A, unknown, Boundary | Actions>) => Promise<A>) =>\n (request: Request): Promise<Response> => runtimeRun(handleEffect(request));\n};\n\nexport const callActionWire = <Name extends string, Input, Output, E>(\n definition: ActionDefinition<Name, Input, Output, E>,\n options: {\n readonly endpoint: string;\n readonly input: Input;\n readonly fetcher?: (input: RequestInfo | URL, init?: RequestInit) => Promise<Response>;\n readonly signal?: AbortSignal;\n },\n): Effect.Effect<Output, ActionError<E> | ActionTransportError, Boundary> =>\n Effect.gen(function* () {\n const boundary = yield* Boundary;\n const fetcher = options.fetcher ?? fetch;\n\n const encodedInput = yield* boundary.encode({\n source: `action:${definition.name}:client-input`,\n schema: definition.input,\n value: options.input,\n });\n\n const body = JSON.stringify({\n name: definition.name,\n input: encodedInput,\n });\n\n const response = yield* Effect.tryPromise({\n try: () =>\n fetcher(options.endpoint, {\n method: \"POST\",\n headers: {\n \"content-type\": \"application/json\",\n },\n body,\n ...(options.signal !== undefined ? { signal: options.signal } : {}),\n }),\n catch: (cause) => new ActionTransportError(`Failed to call ${definition.name}`, cause),\n });\n\n if (!response.ok) {\n return yield* Effect.fail(\n new ActionTransportError(\n `Action endpoint returned status ${String(response.status)} for ${definition.name}`,\n response.status,\n ),\n );\n }\n\n const rawText = yield* Effect.tryPromise({\n try: () => response.text(),\n catch: (cause) =>\n new ActionTransportError(`Failed to read response for ${definition.name}`, cause),\n });\n\n const wire = yield* boundary.decodeTextJson({\n source: `action:${definition.name}:wire`,\n schema: ActionWireResultSchema,\n text: rawText,\n });\n\n const typedWire = wire as ActionWireResult;\n\n if (typedWire._tag === \"success\") {\n return yield* boundary.decodeUnknown({\n source: `action:${definition.name}:client-output`,\n schema: definition.output,\n value: typedWire.value,\n });\n }\n\n if (typedWire._tag === \"failure\") {\n const decodedError = yield* boundary.decodeUnknown({\n source: `action:${definition.name}:client-error`,\n schema: definition.error,\n value: typedWire.error,\n });\n return yield* Effect.fail(decodedError as E);\n }\n\n return yield* Effect.fail(new ActionTransportError(typedWire.message));\n });\n","import type { ManagedRuntime } from \"effect\";\nimport { createContext, useContext, useEffect, type ReactNode } from \"react\";\nimport type { AppServices } from \"../kernel/app\";\n\nexport type EffectReactManagedRuntime<R = AppServices> = ManagedRuntime.ManagedRuntime<R, never>;\n\nconst RuntimeContext = createContext<EffectReactManagedRuntime | null>(null);\n\nexport interface EffectProviderProps {\n readonly runtime: EffectReactManagedRuntime;\n readonly children?: ReactNode;\n}\n\nexport const EffectProvider = ({ runtime, children }: EffectProviderProps) => {\n useEffect(\n () => () => {\n void runtime.dispose();\n },\n [runtime],\n );\n\n return <RuntimeContext.Provider value={runtime}>{children}</RuntimeContext.Provider>;\n};\n\nexport const useEffectRuntime = (): EffectReactManagedRuntime => {\n const runtime = useContext(RuntimeContext);\n if (runtime === null) {\n throw new Error(\"Effect runtime is not available. Wrap your app with <EffectProvider>.\");\n }\n return runtime;\n};\n","import { Layer } from \"effect\";\nimport { type AnyActionDefinition, makeActionsLayer } from \"../actions\";\nimport type { Actions } from \"../actions\";\nimport { BoundaryLive } from \"../boundary\";\nimport type { Boundary } from \"../boundary\";\nimport { makeDataLayer, type QueryRuntimeOptions } from \"../data\";\nimport type { Data } from \"../data\";\nimport {\n makeNavigationLayer,\n type AnyLoaderDefinition,\n type AnyRouteDefinition,\n} from \"../navigation\";\nimport type { Navigation } from \"../navigation\";\nimport { createManagedRuntime, type AppManagedRuntime } from \"./runtime\";\nimport { TelemetryLive, type TelemetryEvent } from \"./telemetry\";\nimport type { Telemetry } from \"./telemetry\";\nimport type { Stream } from \"effect\";\n\nexport interface CreateAppLayerOptions {\n readonly routes: readonly AnyRouteDefinition[];\n readonly actions?: readonly AnyActionDefinition[];\n readonly loaders?: readonly AnyLoaderDefinition[];\n readonly initialHref?: string;\n readonly data?: QueryRuntimeOptions;\n}\n\nexport type AppServices = Boundary | Data | Actions | Navigation | Telemetry;\n\nexport type AppLayer = Layer.Layer<\n AppServices,\n never,\n never\n>;\n\nexport const createAppLayer = (options: CreateAppLayerOptions): AppLayer => {\n const boundaryLayer = BoundaryLive;\n const telemetryLayer = TelemetryLive;\n\n const dataLayer = makeDataLayer(options.data).pipe(\n Layer.provide([boundaryLayer, telemetryLayer]),\n );\n\n const actionsLayer = makeActionsLayer({\n actions: options.actions ?? [],\n }).pipe(Layer.provide([boundaryLayer, telemetryLayer]));\n\n const navigationLayer = makeNavigationLayer({\n routes: options.routes,\n ...(options.loaders !== undefined ? { loaders: options.loaders } : {}),\n ...(options.initialHref !== undefined ? { initialHref: options.initialHref } : {}),\n }).pipe(Layer.provide([boundaryLayer, telemetryLayer]));\n\n return Layer.mergeAll(boundaryLayer, telemetryLayer, dataLayer, actionsLayer, navigationLayer);\n};\n\nexport const createAppRuntime = (options: CreateAppLayerOptions): AppManagedRuntime<AppServices> =>\n createManagedRuntime(createAppLayer(options));\n\nexport interface FrameworkEventStream {\n readonly stream: Stream.Stream<TelemetryEvent>;\n}\n","import type { Duration, Effect, Schema } from \"effect\";\nimport type { BoundaryDecodeError } from \"../boundary\";\nimport type { BoundaryProtocolError } from \"../boundary/errors\";\n\nexport interface QueryDefinition<\n Name extends string,\n Input,\n Output,\n E,\n InputEncoded = Input,\n OutputEncoded = Output,\n> {\n readonly name: Name;\n readonly input: Schema.Schema<Input, InputEncoded, never>;\n readonly output: Schema.Schema<Output, OutputEncoded, never>;\n readonly run: (input: Input) => Effect.Effect<Output, E, never>;\n readonly key?: (input: Input) => unknown;\n}\n\nexport const defineQuery = <\n Name extends string,\n Input,\n Output,\n E,\n InputEncoded = Input,\n OutputEncoded = Output,\n>(\n definition: QueryDefinition<Name, Input, Output, E, InputEncoded, OutputEncoded>,\n): QueryDefinition<Name, Input, Output, E, InputEncoded, OutputEncoded> => definition;\n\nexport type QueryPhase = \"initial\" | \"loading\" | \"success\" | \"failure\";\n\nexport interface QuerySnapshot<Output, E> {\n readonly key: string;\n readonly phase: QueryPhase;\n readonly data: Output | undefined;\n readonly error: E | BoundaryDecodeError | BoundaryProtocolError | QueryRuntimeError | undefined;\n readonly updatedAt: number | null | undefined;\n}\n\nexport interface QueryRunOptions {\n readonly forceRefresh?: boolean;\n}\n\nexport interface QueryRuntimeOptions {\n readonly capacity?: number;\n readonly timeToLive?: Duration.DurationInput;\n}\n\nexport class QueryRuntimeError extends Error {\n readonly _tag = \"QueryRuntimeError\" as const;\n\n constructor(readonly messageText: string) {\n super(messageText);\n this.name = \"QueryRuntimeError\";\n }\n}\n","import {\n Cache,\n Context,\n Effect,\n Layer,\n SubscriptionRef,\n type Stream,\n} from \"effect\";\nimport { Boundary, type BoundaryDecodeError } from \"../boundary\";\nimport type { BoundaryProtocolError } from \"../boundary/errors\";\nimport { Telemetry } from \"../kernel/telemetry\";\nimport {\n type QueryDefinition,\n type QueryRunOptions,\n type QueryRuntimeOptions,\n type QuerySnapshot,\n QueryRuntimeError,\n} from \"./types\";\n\nconst defaultRuntimeOptions: Required<QueryRuntimeOptions> = {\n capacity: 2048,\n timeToLive: \"5 minutes\",\n};\n\nconst stableStringify = (value: unknown): string => {\n if (value === null || value === undefined) {\n return String(value);\n }\n\n if (typeof value !== \"object\") {\n return JSON.stringify(value);\n }\n\n if (Array.isArray(value)) {\n return `[${value.map(stableStringify).join(\",\")}]`;\n }\n\n const entries = Object.entries(value as Record<string, unknown>).sort(([a], [b]) =>\n a.localeCompare(b),\n );\n return `{${entries.map(([key, nested]) => `${JSON.stringify(key)}:${stableStringify(nested)}`).join(\",\")}}`;\n};\n\nconst initialSnapshot = <Output, E>(key: string): QuerySnapshot<Output, E> => ({\n key,\n phase: \"initial\",\n data: undefined,\n error: undefined,\n updatedAt: null,\n});\n\nexport interface DataService {\n readonly fetch: <Name extends string, Input, Output, E>(\n definition: QueryDefinition<Name, Input, Output, E>,\n input: unknown,\n options?: QueryRunOptions,\n ) => Effect.Effect<Output, E | BoundaryDecodeError | BoundaryProtocolError | QueryRuntimeError, never>;\n readonly prefetch: <Name extends string, Input, Output, E>(\n definition: QueryDefinition<Name, Input, Output, E>,\n input: unknown,\n ) => Effect.Effect<void, E | BoundaryDecodeError | BoundaryProtocolError | QueryRuntimeError, never>;\n readonly invalidate: <Name extends string, Input, Output, E>(\n definition: QueryDefinition<Name, Input, Output, E>,\n input: unknown,\n ) => Effect.Effect<void, QueryRuntimeError, never>;\n readonly getSnapshot: <Name extends string, Input, Output, E>(\n definition: QueryDefinition<Name, Input, Output, E>,\n input: unknown,\n ) => Effect.Effect<QuerySnapshot<Output, E>, never, never>;\n readonly getAllSnapshots: Effect.Effect<ReadonlyMap<string, QuerySnapshot<unknown, unknown>>, never, never>;\n readonly hydrateSnapshots: (\n snapshots: ReadonlyMap<string, QuerySnapshot<unknown, unknown>>,\n ) => Effect.Effect<void, never, never>;\n readonly snapshots: Stream.Stream<ReadonlyMap<string, QuerySnapshot<unknown, unknown>>>;\n}\n\nexport class Data extends Context.Tag(\"EffectReact/Data\")<Data, DataService>() {}\n\nexport const makeDataLayer = (\n options: QueryRuntimeOptions = {},\n): Layer.Layer<Data, never, Boundary | Telemetry> => {\n const merged = {\n ...defaultRuntimeOptions,\n ...options,\n };\n\n return Layer.effect(\n Data,\n Effect.gen(function* () {\n const boundary = yield* Boundary;\n const telemetry = yield* Telemetry;\n const lookups = new Map<string, Effect.Effect<unknown, unknown, never>>();\n const snapshots = yield* SubscriptionRef.make(\n new Map<string, QuerySnapshot<unknown, unknown>>() as ReadonlyMap<\n string,\n QuerySnapshot<unknown, unknown>\n >,\n );\n\n const cache = yield* Cache.make<string, unknown, unknown>({\n capacity: merged.capacity,\n timeToLive: merged.timeToLive,\n lookup: (key) =>\n Effect.suspend(() => {\n const lookup = lookups.get(key);\n if (lookup === undefined) {\n return Effect.fail(new QueryRuntimeError(`No query executor registered for ${key}`));\n }\n return lookup;\n }),\n });\n\n const setSnapshot = <Output, E>(\n key: string,\n update: (previous: QuerySnapshot<Output, E>) => QuerySnapshot<Output, E>,\n ): Effect.Effect<void> =>\n SubscriptionRef.update(snapshots, (current) => {\n const next = new Map(current);\n const previous =\n (next.get(key) as QuerySnapshot<Output, E> | undefined) ?? initialSnapshot<Output, E>(key);\n next.set(key, update(previous));\n return next;\n }).pipe(Effect.asVoid);\n\n const buildKey = <Name extends string, Input, Output, E>(\n definition: QueryDefinition<Name, Input, Output, E>,\n input: Input,\n ): string => {\n const base = definition.key ? definition.key(input) : input;\n return `${definition.name}:${stableStringify(base)}`;\n };\n\n const fetch = <Name extends string, Input, Output, E>(\n definition: QueryDefinition<Name, Input, Output, E>,\n input: unknown,\n runOptions?: QueryRunOptions,\n ): Effect.Effect<\n Output,\n E | BoundaryDecodeError | BoundaryProtocolError | QueryRuntimeError,\n never\n > =>\n Effect.gen(function* () {\n const decodedInput = yield* boundary.decodeUnknown({\n source: `query:${definition.name}:input`,\n schema: definition.input,\n value: input,\n });\n\n const key = buildKey(definition, decodedInput);\n yield* telemetry.emit({\n _tag: \"query\",\n phase: \"start\",\n key,\n timestamp: Date.now(),\n });\n\n yield* setSnapshot(key, (previous) => ({\n ...previous,\n phase: \"loading\",\n error: undefined,\n }));\n\n lookups.set(\n key,\n definition\n .run(decodedInput)\n .pipe(\n Effect.flatMap((output) =>\n boundary.decodeUnknown({\n source: `query:${definition.name}:output`,\n schema: definition.output,\n value: output,\n }),\n ),\n ) as Effect.Effect<unknown, unknown, never>,\n );\n\n if (runOptions?.forceRefresh === true) {\n yield* cache.refresh(key).pipe(Effect.ignore);\n }\n\n const value = yield* cache.get(key).pipe(\n Effect.mapError(\n (error) =>\n error as E | BoundaryDecodeError | BoundaryProtocolError | QueryRuntimeError,\n ),\n );\n\n yield* setSnapshot(key, () => ({\n key,\n phase: \"success\",\n data: value,\n error: undefined,\n updatedAt: Date.now(),\n }));\n\n yield* telemetry.emit({\n _tag: \"query\",\n phase: \"success\",\n key,\n timestamp: Date.now(),\n });\n\n return value as Output;\n }).pipe(\n Effect.tapError((error) =>\n Effect.gen(function* () {\n const decodedInput = yield* boundary.decodeUnknown({\n source: `query:${definition.name}:input`,\n schema: definition.input,\n value: input,\n });\n const key = buildKey(definition, decodedInput);\n yield* setSnapshot(key, (previous) => ({\n ...previous,\n phase: \"failure\",\n error,\n updatedAt: previous.updatedAt,\n }));\n yield* telemetry.emit({\n _tag: \"query\",\n phase: \"failure\",\n key,\n timestamp: Date.now(),\n detail: error,\n });\n }),\n ),\n );\n\n const prefetch: DataService[\"prefetch\"] = (definition, input) =>\n fetch(definition, input).pipe(Effect.asVoid);\n\n const invalidate: DataService[\"invalidate\"] = (definition, input) =>\n Effect.gen(function* () {\n const key = `${definition.name}:${stableStringify(input)}`;\n yield* cache.invalidate(key);\n yield* SubscriptionRef.update(snapshots, (current) => {\n const next = new Map(current);\n next.delete(key);\n return next;\n }).pipe(Effect.asVoid);\n yield* telemetry.emit({\n _tag: \"query\",\n phase: \"invalidate\",\n key,\n timestamp: Date.now(),\n });\n });\n\n const getSnapshot = <Name extends string, Input, Output, E>(\n definition: QueryDefinition<Name, Input, Output, E>,\n input: unknown,\n ): Effect.Effect<QuerySnapshot<Output, E>, never, never> =>\n Effect.gen(function* () {\n const key = `${definition.name}:${stableStringify(input)}`;\n const current = yield* SubscriptionRef.get(snapshots);\n const snapshot = current.get(key);\n if (snapshot === undefined) {\n return initialSnapshot<Output, E>(key);\n }\n return snapshot as QuerySnapshot<Output, E>;\n });\n\n return {\n fetch,\n prefetch,\n invalidate,\n getSnapshot,\n getAllSnapshots: SubscriptionRef.get(snapshots),\n hydrateSnapshots: (nextSnapshots) => SubscriptionRef.set(snapshots, new Map(nextSnapshots)),\n snapshots: snapshots.changes,\n } satisfies DataService;\n }),\n );\n};\n\nexport const fetchQuery = <Name extends string, Input, Output, E>(\n definition: QueryDefinition<Name, Input, Output, E>,\n input: unknown,\n options?: QueryRunOptions,\n): Effect.Effect<Output, E | BoundaryDecodeError | BoundaryProtocolError | QueryRuntimeError, Data> =>\n Effect.flatMap(Data, (service) => service.fetch(definition, input, options));\n","import { Effect, Fiber, Stream } from \"effect\";\nimport { useCallback, useEffect, useMemo, useSyncExternalStore } from \"react\";\nimport { useEffectRuntime } from \"../react/provider\";\nimport { Data } from \"./service\";\nimport type { QueryDefinition, QueryRunOptions, QuerySnapshot } from \"./types\";\n\nconst useDataService = () => {\n const runtime = useEffectRuntime();\n return useMemo(() => runtime.runSync(Data), [runtime]);\n};\n\nexport interface UseQueryOptions {\n readonly enabled?: boolean;\n readonly run?: QueryRunOptions;\n}\n\nexport const useQuery = <Name extends string, Input, Output, E>(\n definition: QueryDefinition<Name, Input, Output, E>,\n input: unknown,\n options: UseQueryOptions = {},\n): QuerySnapshot<Output, E> & {\n readonly refetch: () => Promise<Output>;\n readonly invalidate: () => Promise<void>;\n} => {\n const runtime = useEffectRuntime();\n const data = useDataService();\n\n const subscribe = useCallback(\n (listener: () => void) => {\n const fiber = runtime.runFork(\n Stream.runForEach(data.snapshots, () => Effect.sync(listener)),\n );\n\n return () => {\n runtime.runFork(Fiber.interrupt(fiber));\n };\n },\n [data, runtime],\n );\n\n const getSnapshot = useCallback(\n () => runtime.runSync(data.getSnapshot(definition, input)) as QuerySnapshot<Output, E>,\n [data, definition, input, runtime],\n );\n\n const snapshot = useSyncExternalStore(subscribe, getSnapshot, getSnapshot);\n\n useEffect(() => {\n if (options.enabled === false) {\n return;\n }\n runtime.runFork(data.prefetch(definition, input));\n }, [data, definition, input, options.enabled, runtime]);\n\n const refetch = useCallback(\n () => runtime.runPromise(data.fetch(definition, input, { ...options.run, forceRefresh: true })),\n [data, definition, input, options.run, runtime],\n );\n\n const invalidate = useCallback(\n () => runtime.runPromise(data.invalidate(definition, input)),\n [data, definition, input, runtime],\n );\n\n return {\n ...snapshot,\n refetch,\n invalidate,\n };\n};\n\nexport const useSuspenseQuery = <Name extends string, Input, Output, E>(\n definition: QueryDefinition<Name, Input, Output, E>,\n input: unknown,\n): Output => {\n const result = useQuery(definition, input);\n if (result.phase === \"failure\") {\n throw result.error;\n }\n if (result.phase === \"success\") {\n return result.data as Output;\n }\n throw result.refetch();\n};\n","import type { Effect, Schedule, Schema } from \"effect\";\nimport type { BoundaryDecodeError } from \"../boundary\";\n\nexport interface RouteDefinition<Path extends string, Search, SearchEncoded = Search> {\n readonly id: string;\n readonly path: Path;\n readonly search?: Schema.Schema<Search, SearchEncoded, never>;\n}\n\nexport const defineRoute = <Path extends string, Search = Record<never, never>, SearchEncoded = Search>(\n route: RouteDefinition<Path, Search, SearchEncoded>,\n): RouteDefinition<Path, Search, SearchEncoded> => route;\n\nexport interface AnyRouteDefinition {\n readonly id: string;\n readonly path: string;\n readonly search?: Schema.Schema.All;\n}\n\nexport interface RouteMatch<TRoute extends AnyRouteDefinition> {\n readonly route: TRoute;\n readonly pathname: string;\n readonly params: Readonly<Record<string, string>>;\n readonly search: unknown;\n}\n\nexport interface LoaderContext<TRoute extends AnyRouteDefinition> {\n readonly route: TRoute;\n readonly pathname: string;\n readonly searchText: string;\n readonly params: Readonly<Record<string, string>>;\n readonly search: unknown;\n readonly dependencyResults: Readonly<Record<string, unknown>>;\n}\n\nexport interface LoaderDefinition<\n Name extends string,\n RouteId extends string,\n Output,\n E,\n TRoute extends AnyRouteDefinition = AnyRouteDefinition,\n> {\n readonly name: Name;\n readonly routeId: RouteId;\n readonly dependsOn?: readonly string[];\n readonly retry?: Schedule.Schedule<unknown, E, never>;\n readonly run: (context: LoaderContext<TRoute>) => Effect.Effect<Output, E, never>;\n}\n\nexport const defineLoader = <\n Name extends string,\n RouteId extends string,\n Output,\n E,\n TRoute extends AnyRouteDefinition = AnyRouteDefinition,\n>(\n loader: LoaderDefinition<Name, RouteId, Output, E, TRoute>,\n): LoaderDefinition<Name, RouteId, Output, E, TRoute> => loader;\n\nexport type AnyLoaderDefinition = LoaderDefinition<string, string, unknown, never, AnyRouteDefinition>;\n\nexport type LoaderSnapshotEntry =\n | {\n readonly _tag: \"pending\";\n }\n | {\n readonly _tag: \"success\";\n readonly value: unknown;\n }\n | {\n readonly _tag: \"failure\";\n readonly error: unknown;\n };\n\nexport interface NavigationSnapshot {\n readonly pathname: string;\n readonly searchText: string;\n readonly href: string;\n readonly status: \"idle\" | \"loading\" | \"success\" | \"failure\";\n readonly match: RouteMatch<AnyRouteDefinition> | null;\n readonly loaders: Readonly<Record<string, LoaderSnapshotEntry>>;\n readonly error: unknown;\n}\n\nexport class NavigationRuntimeError extends Error {\n readonly _tag = \"NavigationRuntimeError\" as const;\n\n constructor(readonly messageText: string) {\n super(messageText);\n this.name = \"NavigationRuntimeError\";\n }\n}\n\nexport class NavigationCancelledError extends Error {\n readonly _tag = \"NavigationCancelledError\" as const;\n\n constructor(readonly pathname: string) {\n super(`Navigation cancelled for ${pathname}`);\n this.name = \"NavigationCancelledError\";\n }\n}\n\nexport type NavigationError =\n | NavigationRuntimeError\n | NavigationCancelledError\n | BoundaryDecodeError;\n","import type { AnyRouteDefinition, RouteMatch } from \"./types\";\n\nconst normalizePathname = (pathname: string): string => {\n if (pathname.length === 0) {\n return \"/\";\n }\n const withSlash = pathname.startsWith(\"/\") ? pathname : `/${pathname}`;\n if (withSlash.length > 1 && withSlash.endsWith(\"/\")) {\n return withSlash.slice(0, -1);\n }\n return withSlash;\n};\n\nconst scoreRoute = (path: string): number => {\n if (path === \"/\") {\n return 10;\n }\n return path\n .split(\"/\")\n .filter((segment) => segment.length > 0)\n .reduce((score, segment) => {\n if (segment === \"*\") {\n return score;\n }\n if (segment.startsWith(\":\")) {\n return score + 2;\n }\n return score + 5;\n }, 0);\n};\n\nconst splitSegments = (path: string): readonly string[] =>\n normalizePathname(path)\n .split(\"/\")\n .filter((segment) => segment.length > 0);\n\nconst matchRoutePath = (\n routePath: string,\n pathname: string,\n): Readonly<Record<string, string>> | null => {\n const routeSegments = splitSegments(routePath);\n const pathSegments = splitSegments(pathname);\n\n const params: Record<string, string> = {};\n let i = 0;\n let j = 0;\n\n while (i < routeSegments.length && j < pathSegments.length) {\n const routeSegment = routeSegments[i]!;\n const pathSegment = pathSegments[j]!;\n\n if (routeSegment === \"*\") {\n return params;\n }\n\n if (routeSegment.startsWith(\":\")) {\n params[routeSegment.slice(1)] = decodeURIComponent(pathSegment);\n i += 1;\n j += 1;\n continue;\n }\n\n if (routeSegment !== pathSegment) {\n return null;\n }\n\n i += 1;\n j += 1;\n }\n\n if (i < routeSegments.length && routeSegments[i] === \"*\") {\n return params;\n }\n\n if (i !== routeSegments.length || j !== pathSegments.length) {\n return null;\n }\n\n return params;\n};\n\nexport interface MatchInput {\n readonly routes: readonly AnyRouteDefinition[];\n readonly pathname: string;\n readonly search: unknown;\n}\n\nexport const matchRoute = ({ routes, pathname, search }: MatchInput): RouteMatch<AnyRouteDefinition> | null => {\n const normalized = normalizePathname(pathname);\n const sorted = [...routes].sort((a, b) => scoreRoute(b.path) - scoreRoute(a.path));\n\n for (const route of sorted) {\n const params = matchRoutePath(route.path, normalized);\n if (params !== null) {\n return {\n route,\n pathname: normalized,\n params,\n search,\n };\n }\n }\n\n return null;\n};\n\nexport const buildHref = (pathname: string, searchText: string): string =>\n searchText.length > 0 ? `${normalizePathname(pathname)}${searchText}` : normalizePathname(pathname);\n\nexport const normalizeSearchText = (searchText: string): string => {\n if (searchText.length === 0 || searchText === \"?\") {\n return \"\";\n }\n return searchText.startsWith(\"?\") ? searchText : `?${searchText}`;\n};\n\nexport const parseHref = (href: string): { readonly pathname: string; readonly searchText: string } => {\n const [pathPart, ...searchParts] = href.split(\"?\");\n return {\n pathname: normalizePathname(pathPart ?? \"/\"),\n searchText: normalizeSearchText(searchParts.length === 0 ? \"\" : searchParts.join(\"?\")),\n };\n};\n","import {\n Cause,\n Context,\n Effect,\n Fiber,\n Layer,\n Option,\n Ref,\n type Schema,\n type Stream,\n SubscriptionRef,\n} from \"effect\";\nimport { Boundary } from \"../boundary\";\nimport { Telemetry } from \"../kernel/telemetry\";\nimport { buildHref, matchRoute, normalizeSearchText, parseHref } from \"./matcher\";\nimport {\n type AnyLoaderDefinition,\n type AnyRouteDefinition,\n type LoaderSnapshotEntry,\n NavigationCancelledError,\n type NavigationSnapshot,\n NavigationRuntimeError,\n} from \"./types\";\nimport type { NavigationError } from \"./types\";\n\nconst describeUnknown = (value: unknown): string => {\n if (value instanceof Error) {\n return `${value.name}: ${value.message}`;\n }\n if (typeof value === \"string\") {\n return value;\n }\n try {\n return JSON.stringify(value);\n } catch {\n return String(value);\n }\n};\n\nconst initialSnapshot: NavigationSnapshot = {\n pathname: \"/\",\n searchText: \"\",\n href: \"/\",\n status: \"idle\",\n match: null,\n loaders: {},\n error: undefined,\n};\n\nconst toLoadersByName = (loaders: readonly AnyLoaderDefinition[]): ReadonlyMap<string, AnyLoaderDefinition> =>\n new Map(loaders.map((loader) => [loader.name, loader] as const));\n\nconst planLoaderBatches = (\n loaders: readonly AnyLoaderDefinition[],\n): Effect.Effect<readonly (readonly AnyLoaderDefinition[])[], NavigationRuntimeError, never> => {\n const byName = toLoadersByName(loaders);\n const depthByName = new Map<string, number>();\n const visiting = new Set<string>();\n\n const resolveDepth = (name: string): Effect.Effect<number, NavigationRuntimeError, never> => {\n const cached = depthByName.get(name);\n if (cached !== undefined) {\n return Effect.succeed(cached);\n }\n\n if (visiting.has(name)) {\n return Effect.fail(new NavigationRuntimeError(`Cyclic loader dependency detected at ${name}`));\n }\n\n const loader = byName.get(name);\n if (loader === undefined) {\n return Effect.fail(new NavigationRuntimeError(`Loader dependency '${name}' is not registered`));\n }\n\n visiting.add(name);\n\n const dependencies = loader.dependsOn ?? [];\n return Effect.forEach(dependencies, resolveDepth).pipe(\n Effect.map((depths) => {\n const depth = depths.length === 0 ? 0 : Math.max(...depths) + 1;\n depthByName.set(name, depth);\n visiting.delete(name);\n return depth;\n }),\n Effect.catchAll((error) => {\n visiting.delete(name);\n return Effect.fail(error);\n }),\n );\n };\n\n return Effect.gen(function* () {\n const entries = yield* Effect.forEach(loaders, (loader) =>\n Effect.map(resolveDepth(loader.name), (depth) => [depth, loader] as const),\n );\n\n const grouped = new Map<number, AnyLoaderDefinition[]>();\n for (const [depth, loader] of entries) {\n const existing = grouped.get(depth);\n if (existing === undefined) {\n grouped.set(depth, [loader]);\n } else {\n existing.push(loader);\n }\n }\n\n const depths = Array.from(grouped.keys()).sort((a, b) => a - b);\n return depths.map((depth) => grouped.get(depth) ?? []);\n });\n};\n\nexport interface NavigationService {\n readonly navigate: (href: string) => Effect.Effect<NavigationSnapshot, NavigationError, never>;\n readonly revalidate: () => Effect.Effect<NavigationSnapshot, NavigationError, never>;\n readonly getSnapshot: Effect.Effect<NavigationSnapshot, never, never>;\n readonly hydrateSnapshot: (snapshot: NavigationSnapshot) => Effect.Effect<void, never, never>;\n readonly snapshots: Stream.Stream<NavigationSnapshot>;\n}\n\nexport class Navigation extends Context.Tag(\"EffectReact/Navigation\")<\n Navigation,\n NavigationService\n>() {}\n\nexport interface MakeNavigationLayerOptions {\n readonly routes: readonly AnyRouteDefinition[];\n readonly loaders?: readonly AnyLoaderDefinition[];\n readonly initialHref?: string;\n}\n\nexport const makeNavigationLayer = (\n options: MakeNavigationLayerOptions,\n): Layer.Layer<Navigation, never, Boundary | Telemetry> => {\n const loaders = options.loaders ?? [];\n const initial = parseHref(options.initialHref ?? \"/\");\n\n return Layer.effect(\n Navigation,\n Effect.gen(function* () {\n const boundary = yield* Boundary;\n const telemetry = yield* Telemetry;\n const snapshotsRef = yield* SubscriptionRef.make<NavigationSnapshot>({\n ...initialSnapshot,\n pathname: initial.pathname,\n searchText: initial.searchText,\n href: buildHref(initial.pathname, initial.searchText),\n });\n const activeFiberRef = yield* Ref.make<Option.Option<Fiber.RuntimeFiber<NavigationSnapshot, NavigationError>>>(Option.none());\n\n const runLoaders = (\n snapshot: NavigationSnapshot,\n ): Effect.Effect<Readonly<Record<string, LoaderSnapshotEntry>>, NavigationRuntimeError, never> =>\n Effect.gen(function* () {\n if (snapshot.match === null) {\n return {};\n }\n\n const routeLoaders = loaders.filter((loader) => loader.routeId === snapshot.match!.route.id);\n if (routeLoaders.length === 0) {\n return {};\n }\n\n const batches = yield* planLoaderBatches(routeLoaders);\n const results: Record<string, unknown> = {};\n const states: Record<string, LoaderSnapshotEntry> = {};\n\n for (const loader of routeLoaders) {\n states[loader.name] = { _tag: \"pending\" };\n }\n\n yield* SubscriptionRef.update(snapshotsRef, (current) => ({\n ...current,\n loaders: {\n ...current.loaders,\n ...states,\n },\n }));\n\n for (const batch of batches) {\n const exits = yield* Effect.all(\n batch.map((loader) => {\n const base = loader.run({\n route: snapshot.match!.route,\n pathname: snapshot.pathname,\n searchText: snapshot.searchText,\n params: snapshot.match!.params,\n search: snapshot.match!.search,\n dependencyResults: results,\n });\n\n const withRetry = loader.retry ? Effect.retry(base, loader.retry) : base;\n return Effect.exit(withRetry).pipe(Effect.map((exit) => [loader, exit] as const));\n }),\n {\n concurrency: \"unbounded\",\n },\n );\n\n for (const [loader, exit] of exits) {\n if (exit._tag === \"Success\") {\n results[loader.name] = exit.value;\n states[loader.name] = {\n _tag: \"success\",\n value: exit.value,\n };\n continue;\n }\n\n const failure = Cause.failureOption(exit.cause);\n states[loader.name] = {\n _tag: \"failure\",\n error: failure._tag === \"Some\" ? failure.value : Cause.pretty(exit.cause),\n };\n\n yield* SubscriptionRef.update(snapshotsRef, (current) => ({\n ...current,\n status: \"failure\",\n loaders: {\n ...current.loaders,\n ...states,\n },\n error: states[loader.name],\n }) satisfies NavigationSnapshot);\n\n return yield* Effect.fail(\n new NavigationRuntimeError(`Loader '${loader.name}' failed for route '${snapshot.match!.route.id}'`),\n );\n }\n\n yield* SubscriptionRef.update(snapshotsRef, (current) => ({\n ...current,\n loaders: {\n ...current.loaders,\n ...states,\n },\n }) satisfies NavigationSnapshot);\n }\n\n return states;\n });\n\n const performNavigation = (\n href: string,\n ): Effect.Effect<NavigationSnapshot, NavigationError, never> =>\n Effect.gen(function* () {\n const { pathname, searchText } = parseHref(href);\n const searchParams = new URLSearchParams(searchText);\n\n const candidate = options.routes.find((route) => matchRoute({\n routes: [route],\n pathname,\n search: {},\n }) !== null);\n\n const decodedSearch =\n candidate?.search === undefined\n ? Effect.succeed({} as unknown)\n : boundary.decodeUnknown({\n source: `route:${candidate.id}:search`,\n schema: candidate.search as Schema.Schema<unknown, unknown, never>,\n value: Object.fromEntries(searchParams.entries()),\n });\n\n const search = yield* decodedSearch;\n const matched = matchRoute({\n routes: options.routes,\n pathname,\n search,\n });\n\n if (matched === null) {\n return yield* Effect.fail(\n new NavigationRuntimeError(`No route matched pathname '${pathname}'`),\n );\n }\n\n yield* telemetry.emit({\n _tag: \"navigation\",\n phase: \"start\",\n pathname,\n routeId: matched.route.id,\n timestamp: Date.now(),\n });\n\n const loadingSnapshot: NavigationSnapshot = {\n pathname,\n searchText: normalizeSearchText(searchText),\n href: buildHref(pathname, normalizeSearchText(searchText)),\n status: \"loading\",\n match: matched,\n loaders: {},\n error: undefined,\n };\n\n yield* SubscriptionRef.set(snapshotsRef, loadingSnapshot);\n\n const loaderStates = yield* runLoaders(loadingSnapshot);\n\n const completed: NavigationSnapshot = {\n ...loadingSnapshot,\n status: \"success\",\n loaders: loaderStates,\n error: undefined,\n };\n\n yield* SubscriptionRef.set(snapshotsRef, completed);\n yield* telemetry.emit({\n _tag: \"navigation\",\n phase: \"success\",\n pathname,\n routeId: matched.route.id,\n timestamp: Date.now(),\n });\n\n return completed;\n });\n\n const navigate: NavigationService[\"navigate\"] = (href) =>\n Effect.gen(function* () {\n const previous = yield* Ref.getAndSet(activeFiberRef, Option.none());\n if (Option.isSome(previous)) {\n yield* Fiber.interrupt(previous.value);\n yield* telemetry.emit({\n _tag: \"navigation\",\n phase: \"cancel\",\n pathname: href,\n timestamp: Date.now(),\n });\n }\n\n const fiber = yield* Effect.fork(performNavigation(href));\n yield* Ref.set(activeFiberRef, Option.some(fiber));\n\n const exit = yield* Effect.exit(Fiber.join(fiber));\n\n const current = yield* Ref.get(activeFiberRef);\n if (Option.isSome(current) && current.value === fiber) {\n yield* Ref.set(activeFiberRef, Option.none());\n }\n\n if (exit._tag === \"Success\") {\n return exit.value;\n }\n\n if (Cause.isInterruptedOnly(exit.cause)) {\n return yield* Effect.fail(new NavigationCancelledError(href));\n }\n\n const failure = Cause.failureOption(exit.cause);\n if (failure._tag === \"Some\") {\n return yield* Effect.fail(\n failure.value instanceof NavigationRuntimeError\n ? failure.value\n : new NavigationRuntimeError(describeUnknown(failure.value)),\n );\n }\n\n return yield* Effect.fail(new NavigationRuntimeError(Cause.pretty(exit.cause)));\n }).pipe(\n Effect.tapError((error) =>\n telemetry.emit({\n _tag: \"navigation\",\n phase: \"failure\",\n pathname: href,\n timestamp: Date.now(),\n detail: error,\n }),\n ),\n );\n\n const revalidate: NavigationService[\"revalidate\"] =\n () =>\n Effect.gen(function* () {\n const snapshot = yield* SubscriptionRef.get(snapshotsRef);\n return yield* navigate(snapshot.href);\n });\n\n return {\n navigate,\n revalidate,\n getSnapshot: SubscriptionRef.get(snapshotsRef),\n hydrateSnapshot: (snapshot) => SubscriptionRef.set(snapshotsRef, snapshot),\n snapshots: snapshotsRef.changes,\n } satisfies NavigationService;\n }),\n );\n};\n\nexport const navigateTo = (\n href: string,\n): Effect.Effect<NavigationSnapshot, NavigationError, Navigation> =>\n Effect.flatMap(Navigation, (service) => service.navigate(href));\n","import { Effect, Fiber, Stream } from \"effect\";\nimport {\n type AnchorHTMLAttributes,\n type MouseEvent,\n type ReactNode,\n useCallback,\n useMemo,\n useSyncExternalStore,\n} from \"react\";\nimport { useEffectRuntime } from \"../react/provider\";\nimport { Navigation } from \"./service\";\nimport type { NavigationSnapshot } from \"./types\";\n\nconst useNavigationService = () => {\n const runtime = useEffectRuntime();\n return useMemo(() => runtime.runSync(Navigation), [runtime]);\n};\n\nexport const useNavigationSnapshot = (): NavigationSnapshot => {\n const runtime = useEffectRuntime();\n const navigation = useNavigationService();\n\n const subscribe = useCallback(\n (listener: () => void) => {\n const fiber = runtime.runFork(\n Stream.runForEach(navigation.snapshots, () => Effect.sync(listener)),\n );\n\n return () => {\n runtime.runFork(Fiber.interrupt(fiber));\n };\n },\n [navigation, runtime],\n );\n\n const getSnapshot = useCallback(\n () => runtime.runSync(navigation.getSnapshot),\n [navigation, runtime],\n );\n\n return useSyncExternalStore(subscribe, getSnapshot, getSnapshot);\n};\n\nexport const useNavigate = (): ((href: string) => Promise<NavigationSnapshot>) => {\n const runtime = useEffectRuntime();\n const navigation = useNavigationService();\n\n return useCallback(\n (href: string) => runtime.runPromise(navigation.navigate(href)),\n [navigation, runtime],\n );\n};\n\nexport interface LinkProps extends Omit<AnchorHTMLAttributes<HTMLAnchorElement>, \"href\"> {\n readonly to: string;\n readonly children?: ReactNode;\n}\n\nexport const Link = ({ to, onClick, children, ...rest }: LinkProps) => {\n const navigate = useNavigate();\n\n const handleClick = useCallback(\n (event: MouseEvent<HTMLAnchorElement>) => {\n onClick?.(event);\n if (event.defaultPrevented) {\n return;\n }\n if (event.button !== 0 || event.metaKey || event.altKey || event.ctrlKey || event.shiftKey) {\n return;\n }\n event.preventDefault();\n void navigate(to);\n },\n [navigate, onClick, to],\n );\n\n return (\n <a {...rest} href={to} onClick={handleClick}>\n {children}\n </a>\n );\n};\n\nexport const Outlet = ({ children }: { readonly children?: ReactNode }) => <>{children}</>;\n","import { ManagedRuntime, type Runtime } from \"effect\";\nimport type { Layer } from \"effect\";\n\nexport type AppManagedRuntime<R> = ManagedRuntime.ManagedRuntime<R, never>;\n\nexport const createManagedRuntime = <R>(layer: Layer.Layer<R, never, never>): AppManagedRuntime<R> =>\n ManagedRuntime.make(layer);\n\nexport type RuntimeHandle<R> = Runtime.Runtime<R>;\n","import type { AnyActionDefinition } from \"../actions\";\nimport type { AnyLoaderDefinition, AnyRouteDefinition } from \"../navigation\";\nimport type {\n AnyPageDefinition,\n LayoutDefinition,\n MiddlewareDefinition,\n} from \"./contracts\";\n\nexport interface AppManifest {\n readonly pages: readonly AnyPageDefinition[];\n readonly actions?: readonly AnyActionDefinition[];\n readonly layouts?: readonly LayoutDefinition[];\n readonly middleware?: MiddlewareDefinition;\n}\n\nexport const defineManifest = (manifest: AppManifest): AppManifest => manifest;\n\nexport const routesFromManifest = (\n manifest: AppManifest,\n): readonly AnyRouteDefinition[] => manifest.pages.map((page) => page.route);\n\nexport const loadersFromManifest = (\n manifest: AppManifest,\n): readonly AnyLoaderDefinition[] => {\n const pageLoaders = manifest.pages\n .map((page) => page.loader)\n .filter((loader) => loader !== undefined);\n\n const layoutLoaders = (manifest.layouts ?? [])\n .map((layout) => layout.loader)\n .filter((loader) => loader !== undefined);\n\n return [...pageLoaders, ...layoutLoaders];\n};\n","export interface EffectReactConfig {\n readonly appDir?: string;\n readonly adapters?: readonly (\"node\" | \"bun\")[];\n readonly ssr?: {\n readonly streaming?: boolean;\n };\n readonly cache?: {\n readonly defaultPolicy?: \"no-store\" | \"force-cache\";\n readonly routeSegmentDefaults?: \"explicit\";\n };\n readonly strict?: {\n readonly boundarySchemas?: boolean;\n readonly typedErrors?: boolean;\n };\n}\n\nexport interface EffectReactResolvedConfig {\n readonly appDir: string;\n readonly adapters: readonly (\"node\" | \"bun\")[];\n readonly ssr: {\n readonly streaming: boolean;\n };\n readonly cache: {\n readonly defaultPolicy: \"no-store\" | \"force-cache\";\n readonly routeSegmentDefaults: \"explicit\";\n };\n readonly strict: {\n readonly boundarySchemas: boolean;\n readonly typedErrors: boolean;\n };\n}\n\nconst defaultConfig: EffectReactResolvedConfig = {\n appDir: \"app\",\n adapters: [\"node\", \"bun\"],\n ssr: {\n streaming: true,\n },\n cache: {\n defaultPolicy: \"no-store\",\n routeSegmentDefaults: \"explicit\",\n },\n strict: {\n boundarySchemas: true,\n typedErrors: true,\n },\n};\n\nexport const defineConfig = (config: EffectReactConfig): EffectReactConfig => config;\n\nexport const resolveConfig = (\n config: EffectReactConfig = {},\n): EffectReactResolvedConfig => ({\n appDir: config.appDir ?? defaultConfig.appDir,\n adapters: config.adapters ?? defaultConfig.adapters,\n ssr: {\n streaming: config.ssr?.streaming ?? defaultConfig.ssr.streaming,\n },\n cache: {\n defaultPolicy: config.cache?.defaultPolicy ?? defaultConfig.cache.defaultPolicy,\n routeSegmentDefaults:\n config.cache?.routeSegmentDefaults ?? defaultConfig.cache.routeSegmentDefaults,\n },\n strict: {\n boundarySchemas:\n config.strict?.boundarySchemas ?? defaultConfig.strict.boundarySchemas,\n typedErrors: config.strict?.typedErrors ?? defaultConfig.strict.typedErrors,\n },\n});\n","import { createActionHttpHandler, type AnyActionDefinition } from \"../actions\";\nimport { createAppRuntime, type AppServices } from \"../kernel/app\";\nimport type { AppManagedRuntime } from \"../kernel/runtime\";\nimport { matchRoute, parseHref } from \"../navigation/matcher\";\nimport {\n loadersFromManifest,\n routesFromManifest,\n type AppManifest,\n} from \"./manifest\";\nimport { resolveConfig, type EffectReactConfig, type EffectReactResolvedConfig } from \"../config\";\nimport type { AnyPageDefinition } from \"./contracts\";\n\nexport interface CreateAppOptions {\n readonly manifest: AppManifest;\n readonly config?: EffectReactConfig;\n readonly initialHref?: string;\n}\n\nexport interface EffectReactApp {\n readonly manifest: AppManifest;\n readonly config: EffectReactResolvedConfig;\n readonly runtime: AppManagedRuntime<AppServices>;\n readonly actions: readonly AnyActionDefinition[];\n readonly matchPage: (href: string) => AnyPageDefinition | undefined;\n readonly handleActionRequest: (request: Request) => Promise<Response>;\n readonly dispose: () => Promise<void>;\n}\n\nconst createPageMatcher = (pages: readonly AnyPageDefinition[]) => {\n const routes = pages.map((page) => page.route);\n\n return (href: string): AnyPageDefinition | undefined => {\n const parsed = parseHref(href);\n const matched = matchRoute({\n routes,\n pathname: parsed.pathname,\n search: {},\n });\n\n if (matched === null) {\n return undefined;\n }\n\n return pages.find((page) => page.route.id === matched.route.id);\n };\n};\n\nexport const createApp = (options: CreateAppOptions): EffectReactApp => {\n const manifest = options.manifest;\n const routes = routesFromManifest(manifest);\n const loaders = loadersFromManifest(manifest);\n const actions = manifest.actions ?? [];\n\n const runtime = createAppRuntime({\n routes,\n actions,\n loaders,\n ...(options.initialHref !== undefined ? { initialHref: options.initialHref } : {}),\n });\n\n const actionHandlerFactory = createActionHttpHandler();\n const handleActionRequest = actionHandlerFactory((effect) => runtime.runPromise(effect));\n\n return {\n manifest,\n config: resolveConfig(options.config),\n runtime,\n actions,\n matchPage: createPageMatcher(manifest.pages),\n handleActionRequest,\n dispose: () => runtime.dispose(),\n };\n};\n","import type { Duration } from \"effect\";\n\nexport type CacheMode = \"no-store\" | \"force-cache\";\n\nexport interface CachePolicy {\n readonly mode: CacheMode;\n readonly ttl?: Duration.DurationInput;\n readonly tags?: readonly string[];\n readonly key?: string;\n}\n\nexport const cachePolicy = (policy: CachePolicy): CachePolicy => policy;\n\nexport const noStore = (): CachePolicy => ({\n mode: \"no-store\",\n});\n","import type { Effect, Layer } from \"effect\";\nimport type { ComponentType } from \"react\";\nimport type {\n AnyLoaderDefinition,\n AnyRouteDefinition,\n} from \"../navigation\";\nimport type { CachePolicy } from \"./cache\";\n\nexport interface PageDefinition<TRoute extends AnyRouteDefinition = AnyRouteDefinition> {\n readonly id: string;\n readonly route: TRoute;\n readonly loader?: AnyLoaderDefinition;\n readonly cache?: CachePolicy;\n readonly component: ComponentType;\n}\n\nexport type AnyPageDefinition = PageDefinition<AnyRouteDefinition>;\n\nexport interface LayoutDefinition {\n readonly id: string;\n readonly component: ComponentType<{\n readonly children?: unknown;\n }>;\n readonly loader?: AnyLoaderDefinition;\n}\n\nexport interface MiddlewareDefinition<R = never> {\n readonly provide?: Layer.Layer<R, never, never>;\n readonly use: (options: {\n readonly request: Request;\n readonly next: () => Effect.Effect<Response, unknown, R>;\n }) => Effect.Effect<Response, unknown, R>;\n}\n\nexport const definePage = <TRoute extends AnyRouteDefinition>(\n page: PageDefinition<TRoute>,\n): PageDefinition<TRoute> => page;\n\nexport const defineLayout = (layout: LayoutDefinition): LayoutDefinition => layout;\n\nexport const defineMiddleware = <R>(\n middleware: MiddlewareDefinition<R>,\n): MiddlewareDefinition<R> => middleware;\n\nexport type { CachePolicy } from \"./cache\";\n\nexport {\n defineRoute,\n defineLoader,\n type RouteDefinition,\n type LoaderDefinition,\n type AnyRouteDefinition,\n type AnyLoaderDefinition,\n} from \"../navigation\";\n\nexport {\n defineAction,\n type ActionDefinition,\n type AnyActionDefinition,\n} from \"../actions\";\n","import { Effect } from \"effect\";\nimport { createElement, type ReactElement } from \"react\";\nimport type { AppServices } from \"../kernel/app\";\nimport { navigateTo } from \"../navigation\";\nimport { createSsrHandler } from \"../render\";\nimport type { AnyPageDefinition } from \"../framework/contracts\";\nimport type { EffectReactApp } from \"../framework/app\";\n\nexport interface CreateRequestHandlerOptions {\n readonly app: EffectReactApp;\n readonly render?: (options: {\n readonly request: Request;\n readonly page: AnyPageDefinition;\n }) => Effect.Effect<ReactElement, unknown, AppServices>;\n readonly actionPath?: string;\n readonly hydrationGlobalName?: string;\n readonly onError?: (error: Error) => Response;\n}\n\nconst defaultNotFoundElement = (): ReactElement =>\n createElement(\"main\", undefined, \"Not Found\");\n\nexport const createRequestHandler = (\n options: CreateRequestHandlerOptions,\n): ((request: Request) => Promise<Response>) => {\n const actionPath = options.actionPath ?? \"/_actions\";\n\n const ssrHandler = createSsrHandler({\n runtime: options.app.runtime,\n ...(options.hydrationGlobalName !== undefined\n ? { hydrationGlobalName: options.hydrationGlobalName }\n : {}),\n ...(options.onError !== undefined ? { onError: options.onError } : {}),\n render: (request) =>\n Effect.gen(function* () {\n const url = new URL(request.url);\n const href = `${url.pathname}${url.search}`;\n const page = options.app.matchPage(href);\n\n if (page === undefined) {\n return defaultNotFoundElement();\n }\n\n yield* navigateTo(href);\n\n if (options.render !== undefined) {\n return yield* options.render({ request, page });\n }\n\n return createElement(page.component);\n }).pipe(\n Effect.mapError((error) =>\n error instanceof Error ? error : new Error(String(error)),\n ),\n ),\n });\n\n return (request) => {\n const url = new URL(request.url);\n if (request.method.toUpperCase() === \"POST\" && url.pathname === actionPath) {\n return options.app.handleActionRequest(request);\n }\n\n return ssrHandler(request);\n };\n};\n","import { Effect, Schema } from \"effect\";\nimport { Boundary } from \"../boundary\";\nimport { Data } from \"../data/service\";\nimport type { QuerySnapshot } from \"../data/types\";\nimport { Navigation } from \"../navigation/service\";\nimport { parseHref } from \"../navigation/matcher\";\n\nexport interface HydrationState {\n readonly version: 1;\n readonly data: readonly (readonly [string, QuerySnapshot<unknown, unknown>])[];\n readonly navigationHref: string;\n}\n\nconst QuerySnapshotSchema = Schema.Struct({\n key: Schema.String,\n phase: Schema.Union(\n Schema.Literal(\"initial\"),\n Schema.Literal(\"loading\"),\n Schema.Literal(\"success\"),\n Schema.Literal(\"failure\"),\n ),\n data: Schema.NullishOr(Schema.Unknown),\n error: Schema.NullishOr(Schema.Unknown),\n updatedAt: Schema.NullishOr(Schema.Number),\n});\n\nexport const HydrationStateSchema = Schema.Struct({\n version: Schema.Literal(1),\n data: Schema.Array(Schema.Tuple(Schema.String, QuerySnapshotSchema)),\n navigationHref: Schema.String,\n});\n\nconst escapeForScript = (value: string): string =>\n value\n .replace(/</g, \"\\\\u003c\")\n .replace(/>/g, \"\\\\u003e\")\n .replace(/\\u2028/g, \"\\\\u2028\")\n .replace(/\\u2029/g, \"\\\\u2029\");\n\nexport const dehydrateAppState = (): Effect.Effect<HydrationState, never, Data | Navigation> =>\n Effect.gen(function* () {\n const data = yield* Data;\n const navigation = yield* Navigation;\n\n const snapshots = yield* data.getAllSnapshots;\n const navigationSnapshot = yield* navigation.getSnapshot;\n\n return {\n version: 1,\n data: Array.from(snapshots.entries()),\n navigationHref: navigationSnapshot.href,\n } satisfies HydrationState;\n });\n\nexport const createHydrationScript = (\n state: HydrationState,\n globalName = \"__effectReactHydration\",\n): string => {\n const serialized = JSON.stringify(state);\n return `window[${JSON.stringify(globalName)}]=JSON.parse(${JSON.stringify(escapeForScript(serialized))});`;\n};\n\nexport const hydrateAppState = (\n payload: unknown,\n): Effect.Effect<void, unknown, Boundary | Data | Navigation> =>\n Effect.gen(function* () {\n const boundary = yield* Boundary;\n const data = yield* Data;\n const navigation = yield* Navigation;\n\n const decoded = yield* boundary.decodeUnknown({\n source: \"hydration:payload\",\n schema: HydrationStateSchema,\n value: payload,\n });\n\n const mapped = new Map<string, QuerySnapshot<unknown, unknown>>(decoded.data);\n yield* data.hydrateSnapshots(mapped);\n\n const current = yield* navigation.getSnapshot;\n const parsed = parseHref(decoded.navigationHref);\n\n yield* navigation.hydrateSnapshot({\n ...current,\n pathname: parsed.pathname,\n searchText: parsed.searchText,\n href: decoded.navigationHref,\n status: \"success\",\n match: null,\n loaders: {},\n error: undefined,\n });\n });\n","import { Effect } from \"effect\";\nimport type { ReactElement } from \"react\";\nimport * as ReactDOMServer from \"react-dom/server\";\nimport type { AppServices } from \"../kernel/app\";\nimport type { AppManagedRuntime } from \"../kernel/runtime\";\nimport { createHydrationScript, dehydrateAppState, type HydrationState } from \"./hydration\";\n\nexport interface CreateSsrHandlerOptions<E> {\n readonly runtime: AppManagedRuntime<AppServices>;\n readonly render: (request: Request) => Effect.Effect<ReactElement, E, AppServices>;\n readonly status?: number;\n readonly headers?: HeadersInit;\n readonly hydrationGlobalName?: string;\n readonly onError?: (error: E | Error) => Response;\n}\n\nconst htmlResponse = (options: {\n readonly html: string;\n readonly status: number;\n readonly headers?: HeadersInit;\n}): Response => {\n const headers = new Headers(options.headers);\n if (!headers.has(\"content-type\")) {\n headers.set(\"content-type\", \"text/html; charset=utf-8\");\n }\n return new Response(options.html, {\n status: options.status,\n headers,\n });\n};\n\nconst injectScript = (html: string, script: string): string => {\n const tag = `<script>${script}</script>`;\n const bodyClose = html.lastIndexOf(\"</body>\");\n if (bodyClose === -1) {\n return `${html}${tag}`;\n }\n return `${html.slice(0, bodyClose)}${tag}${html.slice(bodyClose)}`;\n};\n\nconst toError = (cause: unknown): Error =>\n cause instanceof Error ? cause : new Error(String(cause));\n\nexport const createSsrHandler = <E>(options: CreateSsrHandlerOptions<E>) =>\n (request: Request): Promise<Response> => {\n const program = Effect.gen(function* () {\n const element = yield* options.render(request);\n const html = ReactDOMServer.renderToString(element);\n\n const state: HydrationState = yield* dehydrateAppState();\n const script = createHydrationScript(state, options.hydrationGlobalName);\n\n return htmlResponse({\n html: injectScript(html, script),\n status: options.status ?? 200,\n ...(options.headers !== undefined ? { headers: options.headers } : {}),\n });\n });\n\n return options.runtime\n .runPromise(program)\n .catch((cause: unknown) => {\n const squashed = toError(cause);\n if (options.onError !== undefined) {\n return options.onError(squashed as E | Error);\n }\n return new Response(`SSR render failed: ${squashed.message}`, {\n status: 500,\n headers: {\n \"content-type\": \"text/plain; charset=utf-8\",\n },\n });\n });\n };\n","import { Effect } from \"effect\";\nimport type { EffectReactApp } from \"../framework\";\nimport { hydrateAppState } from \"../render\";\n\nexport interface HydrateAppOptions {\n readonly app: EffectReactApp;\n readonly payload?: unknown;\n readonly globalName?: string;\n}\n\nexport const defaultHydrationGlobalName = \"__effectReactHydration\";\n\nconst readGlobalHydrationPayload = (globalName: string): unknown => {\n const globalScope = globalThis as Record<string, unknown>;\n return globalScope[globalName];\n};\n\nexport const hydrateApp = (options: HydrateAppOptions): Promise<void> => {\n const payload =\n options.payload ??\n readGlobalHydrationPayload(options.globalName ?? defaultHydrationGlobalName);\n\n if (payload === undefined) {\n return options.app.runtime.runPromise(Effect.void);\n }\n\n return options.app.runtime.runPromise(hydrateAppState(payload));\n};\n","import { createApp, type CreateAppOptions } from \"../framework\";\n\nexport const createTestApp = (options: CreateAppOptions) => createApp(options);\n","import { Context, Effect, Layer, Stream, SubscriptionRef } from \"effect\";\n\nexport type Selector<State, Selected> = (state: State) => Selected;\nexport type Equality<Selected> = (left: Selected, right: Selected) => boolean;\n\nconst defaultEquality = <Value>(left: Value, right: Value): boolean => Object.is(left, right);\n\nexport interface Store<State> {\n readonly ref: SubscriptionRef.SubscriptionRef<State>;\n}\n\nexport interface DerivedStore<Selected> {\n readonly get: Effect.Effect<Selected>;\n readonly changes: Stream.Stream<Selected>;\n}\n\nexport interface SelectChangesOptions<Selected> {\n readonly equals?: Equality<Selected>;\n readonly distinct?: boolean;\n}\n\nexport type StoreTag<State> = Context.Tag<Store<State>, Store<State>>;\n\nexport const createStore = <State>(initial: State): Effect.Effect<Store<State>, never, never> =>\n Effect.map(SubscriptionRef.make(initial), (ref) => ({ ref }));\n\nexport const createStoreFromEffect = <State, E, R>(\n initial: Effect.Effect<State, E, R>,\n): Effect.Effect<Store<State>, E, R> =>\n Effect.flatMap(initial, createStore);\n\nexport const createStoreTag = <State>(key: string): StoreTag<State> =>\n Context.GenericTag<Store<State>>(key);\n\nexport const makeStoreLayer = <State>(\n tag: StoreTag<State>,\n initial: State,\n): Layer.Layer<Store<State>, never, never> =>\n Layer.effect(tag, createStore(initial));\n\nexport const makeStoreLayerFromEffect = <State, E, R>(\n tag: StoreTag<State>,\n initial: Effect.Effect<State, E, R>,\n): Layer.Layer<Store<State>, E, R> =>\n Layer.effect(tag, createStoreFromEffect(initial));\n\nexport const get = <State>(store: Store<State>): Effect.Effect<State, never, never> =>\n SubscriptionRef.get(store.ref);\n\nexport const set = <State>(\n store: Store<State>,\n value: State,\n): Effect.Effect<void, never, never> =>\n SubscriptionRef.set(store.ref, value);\n\nexport const update = <State>(\n store: Store<State>,\n mutate: (state: State) => State,\n): Effect.Effect<void, never, never> =>\n SubscriptionRef.update(store.ref, mutate);\n\nexport const modify = <State, Result>(\n store: Store<State>,\n mutate: (state: State) => readonly [Result, State],\n): Effect.Effect<Result, never, never> =>\n SubscriptionRef.modify(store.ref, mutate);\n\nexport const select = <State, Selected>(\n store: Store<State>,\n selector: Selector<State, Selected>,\n): Effect.Effect<Selected, never, never> =>\n Effect.map(get(store), selector);\n\nexport const changes = <State>(store: Store<State>): Stream.Stream<State, never, never> =>\n store.ref.changes;\n\nexport const selectChanges = <State, Selected>(\n store: Store<State>,\n selector: Selector<State, Selected>,\n options: SelectChangesOptions<Selected> = {},\n): Stream.Stream<Selected, never, never> => {\n const selected = changes(store).pipe(Stream.map(selector));\n if (options.distinct === false) {\n return selected;\n }\n return selected.pipe(Stream.changesWith(options.equals ?? defaultEquality<Selected>));\n};\n\nexport const derive = <State, Selected>(\n store: Store<State>,\n selector: Selector<State, Selected>,\n options: SelectChangesOptions<Selected> = {},\n): DerivedStore<Selected> => ({\n get: select(store, selector),\n changes: selectChanges(store, selector, options),\n});\n\n","import { Effect, Fiber, Stream } from \"effect\";\nimport { useCallback, useSyncExternalStore } from \"react\";\nimport { useEffectRuntime } from \"../react/provider\";\nimport { type Equality, select, selectChanges, type Selector, type Store } from \"./service\";\n\nconst defaultEquality = <Value,>(left: Value, right: Value): boolean => Object.is(left, right);\n\nexport const useStore = <State,>(store: Store<State>): State =>\n useStoreSelector(store, (state) => state);\n\nexport const useStoreSelector = <State, Selected,>(\n store: Store<State>,\n selector: Selector<State, Selected>,\n equals: Equality<Selected> = defaultEquality,\n): Selected => {\n const runtime = useEffectRuntime();\n\n const subscribe = useCallback(\n (listener: () => void) => {\n const fiber = runtime.runFork(\n Stream.runForEach(\n selectChanges(store, selector, {\n equals,\n }),\n () => Effect.sync(listener),\n ),\n );\n\n return () => {\n runtime.runFork(Fiber.interrupt(fiber));\n };\n },\n [equals, runtime, selector, store],\n );\n\n const getSnapshot = useCallback(\n () => runtime.runSync(select(store, selector)),\n [runtime, selector, store],\n );\n\n return useSyncExternalStore(subscribe, getSnapshot, getSnapshot);\n};\n","import { Effect } from \"effect\";\nimport { Data, fetchQuery as fetchDataQuery } from \"../data\";\nimport type { BoundaryDecodeError } from \"../boundary\";\nimport type { BoundaryProtocolError } from \"../boundary/errors\";\nimport type { QueryDefinition, QueryRuntimeError } from \"./types\";\n\nexport const fetchQuery = fetchDataQuery;\n\nexport const prefetchQuery = <Name extends string, Input, Output, E>(\n definition: QueryDefinition<Name, Input, Output, E>,\n input: unknown,\n): Effect.Effect<void, E | BoundaryDecodeError | BoundaryProtocolError | QueryRuntimeError, Data> =>\n Effect.flatMap(Data, (service) => service.prefetch(definition, input));\n\nexport const invalidateQuery = <Name extends string, Input, Output, E>(\n definition: QueryDefinition<Name, Input, Output, E>,\n input: unknown,\n): Effect.Effect<void, QueryRuntimeError, Data> =>\n Effect.flatMap(Data, (service) => service.invalidate(definition, input));\n\nexport const prefetch = prefetchQuery;\nexport const invalidate = invalidateQuery;\n","import { Effect } from \"effect\";\nimport { useCallback, useEffect, useMemo, useRef, useState } from \"react\";\nimport {\n useQuery as useDataQuery,\n useSuspenseQuery as useDataSuspenseQuery,\n type UseQueryOptions,\n} from \"../data\";\nimport { Data } from \"../data\";\nimport { useEffectRuntime } from \"../react/provider\";\nimport type {\n QueryDefinition,\n QueryError,\n QueryPhase,\n QueryRunOptions,\n} from \"./types\";\n\ninterface InfiniteQueryEntry<Output, PageParam> {\n readonly key: string;\n readonly pageParam: PageParam;\n readonly data: Output;\n}\n\nconst upsertInfiniteEntry = <Output, PageParam>(\n entries: readonly InfiniteQueryEntry<Output, PageParam>[],\n nextEntry: InfiniteQueryEntry<Output, PageParam>,\n): readonly InfiniteQueryEntry<Output, PageParam>[] => {\n const index = entries.findIndex((entry) => entry.key === nextEntry.key);\n if (index < 0) {\n return [...entries, nextEntry];\n }\n const next = [...entries];\n next[index] = nextEntry;\n return next;\n};\n\nconst useDataService = () => {\n const runtime = useEffectRuntime();\n return useMemo(() => runtime.runSync(Data), [runtime]);\n};\n\nexport { type UseQueryOptions };\n\nexport const useQuery = <Name extends string, Input, Output, E>(\n definition: QueryDefinition<Name, Input, Output, E>,\n input: unknown,\n options: UseQueryOptions = {},\n) => useDataQuery(definition, input, options);\n\nexport const useSuspenseQuery = <Name extends string, Input, Output, E>(\n definition: QueryDefinition<Name, Input, Output, E>,\n input: unknown,\n): Output => useDataSuspenseQuery(definition, input);\n\nexport interface UseInfiniteQueryOptions<Input, Output, PageParam> {\n readonly initialPageParam: PageParam;\n readonly getInput: (pageParam: PageParam) => Input;\n readonly getNextPageParam: (\n lastPage: Output,\n allPages: readonly Output[],\n lastPageParam: PageParam,\n allPageParams: readonly PageParam[],\n ) => PageParam | undefined;\n readonly enabled?: boolean;\n readonly run?: QueryRunOptions;\n}\n\nexport interface UseInfiniteQueryResult<Output, E, PageParam> {\n readonly phase: QueryPhase;\n readonly pages: readonly Output[];\n readonly pageParams: readonly PageParam[];\n readonly error: QueryError<E> | undefined;\n readonly hasNextPage: boolean;\n readonly isFetchingNextPage: boolean;\n readonly fetchNextPage: () => Promise<Output | undefined>;\n readonly refetch: () => Promise<readonly Output[]>;\n readonly invalidate: () => Promise<void>;\n}\n\nexport const useInfiniteQuery = <Name extends string, Input, Output, E, PageParam>(\n definition: QueryDefinition<Name, Input, Output, E>,\n options: UseInfiniteQueryOptions<Input, Output, PageParam>,\n): UseInfiniteQueryResult<Output, E, PageParam> => {\n const optionsRef = useRef(options);\n optionsRef.current = options;\n\n const initialPageParam = options.initialPageParam;\n const enabled = options.enabled;\n const run = options.run;\n\n const getInput = useCallback(\n (pageParam: PageParam): Input => optionsRef.current.getInput(pageParam),\n [],\n );\n\n const getNextPageParam = useCallback(\n (\n lastPage: Output,\n allPages: readonly Output[],\n lastPageParam: PageParam,\n allPageParams: readonly PageParam[],\n ): PageParam | undefined =>\n optionsRef.current.getNextPageParam(lastPage, allPages, lastPageParam, allPageParams),\n [],\n );\n\n const runtime = useEffectRuntime();\n const data = useDataService();\n const [initialInput, setInitialInput] = useState<Input>(() =>\n getInput(initialPageParam),\n );\n const [entries, setEntries] = useState<readonly InfiniteQueryEntry<Output, PageParam>[]>([]);\n const [error, setError] = useState<QueryError<E> | undefined>(undefined);\n const [isFetchingNextPage, setIsFetchingNextPage] = useState(false);\n\n const initialQuery = useQuery(\n definition,\n initialInput,\n {\n ...(enabled !== undefined ? { enabled } : {}),\n ...(run !== undefined ? { run } : {}),\n },\n );\n\n useEffect(() => {\n setInitialInput(getInput(initialPageParam));\n setEntries([]);\n setError(undefined);\n setIsFetchingNextPage(false);\n }, [definition, getInput, initialPageParam]);\n\n useEffect(() => {\n if (initialQuery.phase === \"success\") {\n setEntries((current) =>\n upsertInfiniteEntry(current, {\n key: initialQuery.key,\n pageParam: initialPageParam,\n data: initialQuery.data as Output,\n }),\n );\n setError(undefined);\n return;\n }\n if (initialQuery.phase === \"failure\") {\n setError(initialQuery.error as QueryError<E>);\n }\n }, [\n initialQuery.data,\n initialQuery.error,\n initialQuery.key,\n initialQuery.phase,\n initialPageParam,\n ]);\n\n const pages = useMemo(() => entries.map((entry) => entry.data), [entries]);\n const pageParams = useMemo(() => entries.map((entry) => entry.pageParam), [entries]);\n\n const resolveNextPageParam = useCallback((): PageParam | undefined => {\n const lastEntry = entries[entries.length - 1];\n if (lastEntry !== undefined) {\n return getNextPageParam(lastEntry.data, pages, lastEntry.pageParam, pageParams);\n }\n if (initialQuery.phase !== \"success\") {\n return undefined;\n }\n const initialPage = initialQuery.data as Output;\n return getNextPageParam(\n initialPage,\n [initialPage],\n initialPageParam,\n [initialPageParam],\n );\n }, [\n entries,\n getNextPageParam,\n initialPageParam,\n initialQuery.data,\n initialQuery.phase,\n pageParams,\n pages,\n ]);\n\n const fetchNextPage = useCallback((): Promise<Output | undefined> => {\n const nextPageParam = resolveNextPageParam();\n if (nextPageParam === undefined) {\n return runtime.runPromise(Effect.succeed<Output | undefined>(undefined));\n }\n\n setIsFetchingNextPage(true);\n setError(undefined);\n\n const input = getInput(nextPageParam);\n const program = Effect.gen(function* () {\n const value = yield* data.fetch(definition, input, run);\n const snapshot = yield* data.getSnapshot(definition, input);\n return {\n key: snapshot.key,\n pageParam: nextPageParam,\n value,\n };\n });\n\n return runtime.runPromise(program).then(\n ({ key, pageParam, value }) => {\n setEntries((current) =>\n upsertInfiniteEntry(current, {\n key,\n pageParam,\n data: value,\n }),\n );\n setIsFetchingNextPage(false);\n return value;\n },\n (cause: unknown) => {\n setIsFetchingNextPage(false);\n const resolved = cause as QueryError<E>;\n setError(resolved);\n return runtime.runPromise(Effect.fail(resolved));\n },\n );\n }, [data, definition, getInput, resolveNextPageParam, run, runtime]);\n\n const refetch = useCallback((): Promise<readonly Output[]> => {\n const targets = pageParams.length === 0\n ? [initialPageParam]\n : pageParams;\n\n setError(undefined);\n\n const program = Effect.forEach(\n targets,\n (pageParam) => {\n const input = getInput(pageParam);\n return Effect.gen(function* () {\n const value = yield* data.fetch(definition, input, {\n ...run,\n forceRefresh: true,\n });\n const snapshot = yield* data.getSnapshot(definition, input);\n return {\n key: snapshot.key,\n pageParam,\n data: value,\n } satisfies InfiniteQueryEntry<Output, PageParam>;\n });\n },\n {\n concurrency: 1,\n discard: false,\n },\n );\n\n return runtime.runPromise(program).then(\n (fetchedEntries) => {\n setEntries(fetchedEntries);\n return fetchedEntries.map((entry) => entry.data);\n },\n (cause: unknown) => {\n const resolved = cause as QueryError<E>;\n setError(resolved);\n return runtime.runPromise(Effect.fail(resolved));\n },\n );\n }, [data, definition, getInput, initialPageParam, pageParams, run, runtime]);\n\n const invalidate = useCallback((): Promise<void> => {\n const targets = pageParams.length === 0\n ? [initialPageParam]\n : pageParams;\n\n const program = Effect.forEach(\n targets,\n (pageParam) => data.invalidate(definition, getInput(pageParam)),\n {\n concurrency: 1,\n discard: true,\n },\n );\n\n return runtime.runPromise(program).then(\n () => {\n setEntries([]);\n setError(undefined);\n setIsFetchingNextPage(false);\n return undefined;\n },\n (cause: unknown) => {\n const resolved = cause as QueryError<E>;\n setError(resolved);\n return runtime.runPromise(Effect.fail(resolved));\n },\n );\n }, [data, definition, getInput, initialPageParam, pageParams, runtime]);\n\n const resolvedError = error ??\n (initialQuery.phase === \"failure\" ? (initialQuery.error as QueryError<E>) : undefined);\n\n const phase: QueryPhase = resolvedError !== undefined\n ? \"failure\"\n : entries.length > 0\n ? \"success\"\n : initialQuery.phase;\n\n return {\n phase,\n pages,\n pageParams,\n error: resolvedError,\n hasNextPage: resolveNextPageParam() !== undefined,\n isFetchingNextPage,\n fetchNextPage,\n refetch,\n invalidate,\n };\n};\n","import { buildHref } from \"../navigation/matcher\";\nimport type { AnyRouteDefinition, RouteDefinition } from \"./types\";\n\ntype ExtractSegmentParam<Segment extends string> =\n Segment extends `:${infer Param}` ? Param : never;\n\ntype ExtractPathParams<Path extends string> =\n Path extends `${infer Head}/${infer Tail}`\n ? ExtractSegmentParam<Head> | ExtractPathParams<Tail>\n : ExtractSegmentParam<Path>;\n\ntype SearchPrimitive = string | number | boolean;\ntype SearchFieldInput<Value> =\n Value extends readonly (infer Item)[]\n ? Item | readonly Item[] | null | undefined\n : Value | readonly Value[] | null | undefined;\n\ntype SearchFallback = Readonly<Record<string, SearchPrimitive | readonly SearchPrimitive[] | null | undefined>>;\n\nexport type RoutePathParams<Path extends string> =\n [ExtractPathParams<Path>] extends [never]\n ? Record<never, never>\n : {\n readonly [K in ExtractPathParams<Path>]: string | number | boolean;\n };\n\nexport type RouteSearchInput<TRoute extends AnyRouteDefinition> =\n TRoute extends RouteDefinition<string, infer Search, unknown>\n ? {\n readonly [K in keyof Search]?: SearchFieldInput<Search[K]>;\n }\n : SearchFallback;\n\nexport interface RouteHrefOptions<TRoute extends AnyRouteDefinition> {\n readonly params?: RoutePathParams<TRoute[\"path\"]>;\n readonly search?: RouteSearchInput<TRoute>;\n}\n\nexport interface RouteUrlOptions<TRoute extends AnyRouteDefinition>\n extends RouteHrefOptions<TRoute> {\n readonly base?: string | URL;\n}\n\nconst PARAM_PATTERN = /:([A-Za-z0-9_]+)/g;\n\nconst appendSearchValue = (\n params: URLSearchParams,\n key: string,\n value: unknown,\n): void => {\n if (value === null || value === undefined) {\n return;\n }\n if (Array.isArray(value)) {\n for (const nestedValue of value) {\n appendSearchValue(params, key, nestedValue);\n }\n return;\n }\n if (typeof value === \"string\" || typeof value === \"number\" || typeof value === \"boolean\") {\n params.append(key, String(value));\n }\n};\n\nconst defaultBase = (): string => {\n if (typeof window === \"undefined\") {\n return \"http://localhost\";\n }\n return window.location.origin;\n};\n\nexport const routeSearchText = (search?: SearchFallback): string => {\n if (search === undefined) {\n return \"\";\n }\n\n const params = new URLSearchParams();\n const keys = Object.keys(search).sort((a, b) => a.localeCompare(b));\n for (const key of keys) {\n appendSearchValue(params, key, search[key]);\n }\n\n const text = params.toString();\n return text.length > 0 ? `?${text}` : \"\";\n};\n\nexport const routePath = <TRoute extends AnyRouteDefinition>(\n route: TRoute,\n params?: RoutePathParams<TRoute[\"path\"]>,\n): string =>\n route.path.replace(PARAM_PATTERN, (_match, name: string) => {\n const value = (params as Readonly<Record<string, string | number | boolean>> | undefined)?.[name];\n if (value === undefined) {\n throw new Error(`Missing route param '${name}' for route '${route.id}'`);\n }\n return encodeURIComponent(String(value));\n });\n\nexport const routeHref = <TRoute extends AnyRouteDefinition>(\n route: TRoute,\n options: RouteHrefOptions<TRoute> = {},\n): string =>\n buildHref(\n routePath(route, options.params),\n routeSearchText(options.search as SearchFallback | undefined),\n );\n\nexport const routeUrl = <TRoute extends AnyRouteDefinition>(\n route: TRoute,\n options: RouteUrlOptions<TRoute> = {},\n): URL =>\n new URL(\n routeHref(route, options),\n options.base ?? defaultBase(),\n );\n","import { Effect } from \"effect\";\nimport { Navigation, navigateTo } from \"../navigation\";\nimport type { NavigationError, NavigationSnapshot } from \"./types\";\n\nexport const navigate = (\n href: string,\n): Effect.Effect<NavigationSnapshot, NavigationError, Navigation> =>\n navigateTo(href);\n\nexport const revalidateNavigation = (): Effect.Effect<NavigationSnapshot, NavigationError, Navigation> =>\n Effect.flatMap(Navigation, (service) => service.revalidate());\n","import {\n useNavigate as useNavigationNavigate,\n useNavigationSnapshot as useNavigationState,\n} from \"../navigation/react\";\nimport type { AnyRouteDefinition, NavigationSnapshot, RouteMatch } from \"./types\";\n\nexport {\n Link,\n Outlet,\n type LinkProps,\n} from \"../navigation/react\";\n\nexport const useNavigate = (): ((href: string) => Promise<NavigationSnapshot>) =>\n useNavigationNavigate();\n\nexport const useNavigationSnapshot = (): NavigationSnapshot =>\n useNavigationState();\n\nexport const useRouteMatch = <TRoute extends AnyRouteDefinition>(\n route: TRoute,\n): RouteMatch<TRoute> | null => {\n const snapshot = useNavigationSnapshot();\n const match = snapshot.match;\n if (match === null || match.route.id !== route.id) {\n return null;\n }\n return match as RouteMatch<TRoute>;\n};\n","import type { Effect, ParseResult, Schema, Stream } from \"effect\";\n\nexport type FormValues = Readonly<Record<string, unknown>>;\n\nexport type FormFieldName<Values extends FormValues> = Extract<keyof Values, string>;\n\nexport type FormErrorKey<Values extends FormValues> = FormFieldName<Values> | \"_form\";\n\nexport type FormErrors<Values extends FormValues> = Readonly<\n Partial<Record<FormErrorKey<Values>, string>>\n>;\n\nexport type FormTouched<Values extends FormValues> = Readonly<\n Partial<Record<FormFieldName<Values>, boolean>>\n>;\n\nexport interface FormContract<Values extends FormValues, Encoded = Values> {\n readonly schema: Schema.Schema<Values, Encoded, never>;\n readonly defaults: Values;\n}\n\nexport const defineForm = <Values extends FormValues, Encoded = Values>(\n contract: FormContract<Values, Encoded>,\n): FormContract<Values, Encoded> => contract;\n\nexport interface FormState<Values extends FormValues> {\n readonly values: Values;\n readonly errors: FormErrors<Values>;\n readonly touched: FormTouched<Values>;\n readonly dirty: boolean;\n readonly submitting: boolean;\n readonly submitted: boolean;\n}\n\nexport type FormValidationResult<Values extends FormValues> =\n | {\n readonly _tag: \"valid\";\n readonly values: Values;\n }\n | {\n readonly _tag: \"invalid\";\n readonly errors: FormErrors<Values>;\n readonly issue: ParseResult.ParseError;\n };\n\nexport class FormValidationError<Values extends FormValues> extends Error {\n readonly _tag = \"FormValidationError\" as const;\n\n constructor(readonly errors: FormErrors<Values>) {\n super(\"Form validation failed\");\n this.name = \"FormValidationError\";\n }\n}\n\nexport type FormSubmitHandler<Values extends FormValues, A, E, R = never> = (\n values: Values,\n) => Effect.Effect<A, E, R>;\n\nexport interface FormStore<Values extends FormValues> {\n readonly getSnapshot: Effect.Effect<FormState<Values>, never, never>;\n readonly snapshots: Stream.Stream<FormState<Values>>;\n readonly setField: <Field extends FormFieldName<Values>>(\n field: Field,\n value: Values[Field],\n ) => Effect.Effect<void, never, never>;\n readonly reset: Effect.Effect<void, never, never>;\n readonly validate: Effect.Effect<FormValidationResult<Values>, never, never>;\n readonly submit: <A, E, R = never>(\n handler: FormSubmitHandler<Values, A, E, R>,\n ) => Effect.Effect<A, E | FormValidationError<Values>, R>;\n}\n","import { Effect, ParseResult, Schema, SubscriptionRef } from \"effect\";\nimport {\n type FormContract,\n type FormErrorKey,\n type FormErrors,\n type FormFieldName,\n type FormState,\n type FormStore,\n FormValidationError,\n type FormValidationResult,\n type FormValues,\n} from \"./types\";\n\nconst isRecord = (value: unknown): value is Record<string, unknown> =>\n typeof value === \"object\" && value !== null && !Array.isArray(value);\n\nconst cloneUnknown = (value: unknown): unknown => {\n if (Array.isArray(value)) {\n return value.map((entry) => cloneUnknown(entry));\n }\n\n if (isRecord(value)) {\n const clone: Record<string, unknown> = {};\n for (const [key, entry] of Object.entries(value)) {\n clone[key] = cloneUnknown(entry);\n }\n return clone;\n }\n\n return value;\n};\n\nconst cloneValue = <A>(value: A): A => {\n return cloneUnknown(value) as A;\n};\n\nconst deepEqual = (left: unknown, right: unknown): boolean => {\n if (Object.is(left, right)) {\n return true;\n }\n\n if (Array.isArray(left) && Array.isArray(right)) {\n if (left.length !== right.length) {\n return false;\n }\n for (let index = 0; index < left.length; index += 1) {\n if (!deepEqual(left[index], right[index])) {\n return false;\n }\n }\n return true;\n }\n\n if (isRecord(left) && isRecord(right)) {\n const leftKeys = Object.keys(left);\n const rightKeys = Object.keys(right);\n\n if (leftKeys.length !== rightKeys.length) {\n return false;\n }\n\n for (const key of leftKeys) {\n if (!(key in right)) {\n return false;\n }\n if (!deepEqual(left[key], right[key])) {\n return false;\n }\n }\n\n return true;\n }\n\n return false;\n};\n\nconst toFormErrors = <Values extends FormValues>(\n error: ParseResult.ParseError,\n fieldNames: ReadonlySet<string>,\n): FormErrors<Values> => {\n const formatted = ParseResult.ArrayFormatter.formatErrorSync(error);\n const errors: Partial<Record<FormErrorKey<Values>, string>> = {};\n\n for (const entry of formatted) {\n const root = entry.path[0];\n if (typeof root === \"string\" && fieldNames.has(root)) {\n const key = root as FormFieldName<Values>;\n errors[key] ??= entry.message;\n continue;\n }\n\n errors._form ??= entry.message;\n }\n\n if (formatted.length === 0 && errors._form === undefined) {\n errors._form = \"Invalid form values.\";\n }\n\n return errors;\n};\n\nconst createInitialState = <Values extends FormValues>(defaults: Values): FormState<Values> => ({\n values: cloneValue(defaults),\n errors: {} as FormErrors<Values>,\n touched: {} as FormState<Values>[\"touched\"],\n dirty: false,\n submitting: false,\n submitted: false,\n});\n\nexport const makeForm = <Values extends FormValues, Encoded = Values>(\n contract: FormContract<Values, Encoded>,\n): Effect.Effect<FormStore<Values>, never, never> =>\n Effect.gen(function* () {\n const decode = Schema.decodeUnknown(contract.schema, { errors: \"all\" });\n const defaults = cloneValue(contract.defaults);\n const fieldNames = new Set(Object.keys(defaults));\n const snapshots = yield* SubscriptionRef.make<FormState<Values>>(createInitialState(defaults));\n\n const validateCurrent = (\n current: FormState<Values>,\n ): Effect.Effect<FormValidationResult<Values>, never, never> =>\n decode(current.values).pipe(\n Effect.match({\n onFailure: (issue) => ({\n _tag: \"invalid\",\n errors: toFormErrors<Values>(issue, fieldNames),\n issue,\n }),\n onSuccess: (values) => ({\n _tag: \"valid\",\n values: cloneValue(values),\n }),\n }),\n );\n\n const setField: FormStore<Values>[\"setField\"] = (field, value) =>\n SubscriptionRef.update(snapshots, (current) => {\n const nextValues = {\n ...current.values,\n [field]: value,\n } as Values;\n\n const nextErrors: Partial<Record<FormErrorKey<Values>, string>> = {\n ...current.errors,\n };\n delete nextErrors[field];\n\n return {\n ...current,\n values: nextValues,\n errors: nextErrors,\n touched: {\n ...current.touched,\n [field]: true,\n },\n dirty: !deepEqual(nextValues, defaults),\n submitted: false,\n };\n }).pipe(Effect.asVoid);\n\n const reset: FormStore<Values>[\"reset\"] = SubscriptionRef.set(\n snapshots,\n createInitialState(defaults),\n ).pipe(Effect.asVoid);\n\n const validate: FormStore<Values>[\"validate\"] = Effect.gen(function* () {\n const current = yield* SubscriptionRef.get(snapshots);\n const result = yield* validateCurrent(current);\n\n if (result._tag === \"valid\") {\n yield* SubscriptionRef.update(snapshots, (snapshot) => ({\n ...snapshot,\n values: result.values,\n errors: {} as FormErrors<Values>,\n dirty: !deepEqual(result.values, defaults),\n }));\n } else {\n yield* SubscriptionRef.update(snapshots, (snapshot) => ({\n ...snapshot,\n errors: result.errors,\n }));\n }\n\n return result;\n });\n\n const submit: FormStore<Values>[\"submit\"] = (handler) =>\n Effect.gen(function* () {\n yield* SubscriptionRef.update(snapshots, (current) => ({\n ...current,\n submitting: true,\n submitted: false,\n }));\n\n const current = yield* SubscriptionRef.get(snapshots);\n const validation = yield* validateCurrent(current);\n\n if (validation._tag === \"invalid\") {\n yield* SubscriptionRef.update(snapshots, (snapshot) => ({\n ...snapshot,\n submitting: false,\n submitted: false,\n errors: validation.errors,\n }));\n\n return yield* Effect.fail(new FormValidationError(validation.errors));\n }\n\n yield* SubscriptionRef.update(snapshots, (snapshot) => ({\n ...snapshot,\n values: validation.values,\n errors: {} as FormErrors<Values>,\n dirty: !deepEqual(validation.values, defaults),\n }));\n\n return yield* handler(validation.values).pipe(\n Effect.tap(() =>\n SubscriptionRef.update(snapshots, (snapshot) => ({\n ...snapshot,\n submitting: false,\n submitted: true,\n })).pipe(Effect.asVoid),\n ),\n Effect.tapError(() =>\n SubscriptionRef.update(snapshots, (snapshot) => ({\n ...snapshot,\n submitting: false,\n submitted: false,\n })).pipe(Effect.asVoid),\n ),\n );\n });\n\n return {\n getSnapshot: SubscriptionRef.get(snapshots),\n snapshots: snapshots.changes,\n setField,\n reset,\n validate,\n submit,\n } satisfies FormStore<Values>;\n });\n","import { Effect, Fiber, Stream } from \"effect\";\nimport { useCallback, useMemo, useSyncExternalStore } from \"react\";\nimport { useEffectRuntime } from \"../react/provider\";\nimport { makeForm } from \"./service\";\nimport type {\n FormContract,\n FormFieldName,\n FormState,\n FormStore,\n FormSubmitHandler,\n FormValidationResult,\n FormValues,\n} from \"./types\";\n\nconst useFormStore = <Values extends FormValues, Encoded = Values>(\n contract: FormContract<Values, Encoded>,\n): FormStore<Values> => {\n const runtime = useEffectRuntime();\n return useMemo(() => runtime.runSync(makeForm(contract)), [contract, runtime]);\n};\n\nexport interface UseFormResult<Values extends FormValues> extends FormState<Values> {\n readonly commands: Pick<FormStore<Values>, \"setField\" | \"reset\" | \"validate\" | \"submit\">;\n readonly setField: <Field extends FormFieldName<Values>>(\n field: Field,\n value: Values[Field],\n ) => Promise<void>;\n readonly reset: () => Promise<void>;\n readonly validate: () => Promise<FormValidationResult<Values>>;\n readonly submit: <A, E>(handler: FormSubmitHandler<Values, A, E, never>) => Promise<A>;\n}\n\nexport const useForm = <Values extends FormValues, Encoded = Values>(\n contract: FormContract<Values, Encoded>,\n): UseFormResult<Values> => {\n const runtime = useEffectRuntime();\n const form = useFormStore(contract);\n\n const subscribe = useCallback(\n (listener: () => void) => {\n const fiber = runtime.runFork(Stream.runForEach(form.snapshots, () => Effect.sync(listener)));\n\n return () => {\n runtime.runFork(Fiber.interrupt(fiber));\n };\n },\n [form, runtime],\n );\n\n const getSnapshot = useCallback(() => runtime.runSync(form.getSnapshot), [form, runtime]);\n\n const snapshot = useSyncExternalStore(subscribe, getSnapshot, getSnapshot);\n\n const setField = useCallback<UseFormResult<Values>[\"setField\"]>(\n (field, value) => runtime.runPromise(form.setField(field, value)),\n [form, runtime],\n );\n\n const reset = useCallback<UseFormResult<Values>[\"reset\"]>(\n () => runtime.runPromise(form.reset),\n [form, runtime],\n );\n\n const validate = useCallback<UseFormResult<Values>[\"validate\"]>(\n () => runtime.runPromise(form.validate),\n [form, runtime],\n );\n\n const submit = useCallback<UseFormResult<Values>[\"submit\"]>(\n (handler) => runtime.runPromise(form.submit(handler)),\n [form, runtime],\n );\n\n return {\n ...snapshot,\n commands: {\n setField: form.setField,\n reset: form.reset,\n validate: form.validate,\n submit: form.submit,\n },\n setField,\n reset,\n validate,\n submit,\n };\n};\n","import { Array as EffectArray, Order, pipe } from \"effect\";\nimport type {\n GridColumn,\n GridColumnId,\n GridFilter,\n GridPage,\n GridPagination,\n GridRowProjection,\n GridSort,\n GridSortDirection,\n} from \"./types\";\n\ntype GridComparable = string | number | bigint | boolean | Date | null | undefined;\n\nconst normalizeInteger = (value: number, minimum: number): number => {\n if (!Number.isFinite(value)) {\n return minimum;\n }\n return Math.max(minimum, Math.floor(value));\n};\n\nconst toComparable = (value: unknown): GridComparable => {\n if (value === null || value === undefined || value instanceof Date) {\n return value;\n }\n\n switch (typeof value) {\n case \"string\":\n case \"number\":\n case \"bigint\":\n case \"boolean\":\n return value;\n case \"symbol\":\n return value.description ?? \"symbol\";\n case \"function\":\n return value.name.length > 0 ? `[function ${value.name}]` : \"[function]\";\n default:\n try {\n const encoded = JSON.stringify(value);\n return encoded ?? \"\";\n } catch {\n return \"\";\n }\n }\n};\n\nconst compareComparable = (left: GridComparable, right: GridComparable): -1 | 0 | 1 => {\n if (left === right) {\n return 0;\n }\n\n if (left === null || left === undefined) {\n return right === null || right === undefined ? 0 : -1;\n }\n\n if (right === null || right === undefined) {\n return 1;\n }\n\n if (left instanceof Date && right instanceof Date) {\n return Order.Date(left, right);\n }\n\n if (typeof left === \"number\" && typeof right === \"number\") {\n return Order.number(left, right);\n }\n\n if (typeof left === \"bigint\" && typeof right === \"bigint\") {\n return Order.bigint(left, right);\n }\n\n if (typeof left === \"boolean\" && typeof right === \"boolean\") {\n return Order.boolean(left, right);\n }\n\n return Order.string(toSearchText(left), toSearchText(right));\n};\n\nconst comparableOrder: Order.Order<GridComparable> = Order.make(compareComparable);\n\nconst toSearchText = (value: unknown): string => {\n if (value === null || value === undefined) {\n return \"\";\n }\n\n if (value instanceof Date) {\n return value.toISOString();\n }\n\n switch (typeof value) {\n case \"string\":\n return value;\n case \"number\":\n case \"bigint\":\n case \"boolean\":\n return value.toString();\n case \"symbol\":\n return value.description ?? \"symbol\";\n case \"function\":\n return value.name.length > 0 ? value.name : \"function\";\n default:\n try {\n const encoded = JSON.stringify(value);\n return encoded ?? \"\";\n } catch {\n return \"\";\n }\n }\n};\n\nconst defaultFilterMatch = (value: unknown, filterValue: unknown): boolean => {\n if (filterValue === null || filterValue === undefined) {\n return true;\n }\n\n if (typeof filterValue === \"string\") {\n const normalizedFilter = filterValue.trim().toLowerCase();\n if (normalizedFilter.length === 0) {\n return true;\n }\n return toSearchText(value).toLowerCase().includes(normalizedFilter);\n }\n\n if (Array.isArray(filterValue)) {\n return filterValue.some((candidate) => Object.is(candidate, value));\n }\n\n if (filterValue instanceof Date && value instanceof Date) {\n return filterValue.getTime() === value.getTime();\n }\n\n return Object.is(value, filterValue);\n};\n\nconst toSortDirection = (direction: GridSortDirection | undefined): GridSortDirection =>\n direction === \"desc\" ? \"desc\" : \"asc\";\n\nexport const defineColumns = <\n Row,\n const Columns extends readonly GridColumn<Row, string, unknown>[] = readonly GridColumn<\n Row,\n string,\n unknown\n >[],\n>(\n columns: Columns,\n): Columns => columns;\n\nexport const projectRow = <Row, const Columns extends readonly GridColumn<Row, string, unknown>[]>(\n row: Row,\n columns: Columns,\n): GridRowProjection<Columns> => {\n const projection: Record<string, unknown> = {};\n\n for (const column of columns) {\n projection[column.id] = column.accessor(row);\n }\n\n return projection as GridRowProjection<Columns>;\n};\n\nexport const projectRows = <Row, const Columns extends readonly GridColumn<Row, string, unknown>[]>(\n rows: readonly Row[],\n columns: Columns,\n): readonly GridRowProjection<Columns>[] =>\n pipe(\n rows,\n EffectArray.fromIterable,\n EffectArray.map((row) => projectRow(row, columns)),\n );\n\nexport const mapRows = projectRows;\n\nexport const sortRows = <Row, const Columns extends readonly GridColumn<Row, string, unknown>[]>(\n rows: readonly Row[],\n columns: Columns,\n sorts: readonly GridSort<GridColumnId<Columns>>[],\n): readonly Row[] => {\n const input = EffectArray.fromIterable(rows);\n\n if (input.length < 2 || sorts.length === 0) {\n return input;\n }\n\n const columnLookup = new Map<GridColumnId<Columns>, Columns[number]>();\n for (const column of columns) {\n columnLookup.set(column.id as GridColumnId<Columns>, column);\n }\n\n const orders: Order.Order<Row>[] = [];\n\n for (const sort of sorts) {\n const column = columnLookup.get(sort.id);\n if (column === undefined) {\n continue;\n }\n\n const orderForColumn = Order.mapInput(comparableOrder, (row: Row) =>\n toComparable(column.accessor(row)),\n );\n\n orders.push(toSortDirection(sort.direction) === \"desc\" ? Order.reverse(orderForColumn) : orderForColumn);\n }\n\n if (orders.length === 0) {\n return input;\n }\n\n const combinedOrder = Order.combineAll(orders);\n\n type IndexedRow = {\n readonly row: Row;\n readonly index: number;\n };\n\n const indexedOrder = Order.combine(\n Order.mapInput(combinedOrder, (entry: IndexedRow) => entry.row),\n Order.mapInput(Order.number, (entry: IndexedRow) => entry.index),\n );\n\n return pipe(\n input,\n EffectArray.map((row, index): IndexedRow => ({ row, index })),\n EffectArray.sort(indexedOrder),\n EffectArray.map((entry) => entry.row),\n );\n};\n\nexport const filterRows = <Row, const Columns extends readonly GridColumn<Row, string, unknown>[]>(\n rows: readonly Row[],\n columns: Columns,\n filters: readonly GridFilter<GridColumnId<Columns>>[],\n): readonly Row[] => {\n const input = EffectArray.fromIterable(rows);\n\n if (filters.length === 0) {\n return input;\n }\n\n const columnLookup = new Map<GridColumnId<Columns>, Columns[number]>();\n for (const column of columns) {\n columnLookup.set(column.id as GridColumnId<Columns>, column);\n }\n\n return pipe(\n input,\n EffectArray.filter((row) =>\n filters.every((filter) => {\n const column = columnLookup.get(filter.id);\n if (column === undefined) {\n return true;\n }\n return defaultFilterMatch(column.accessor(row), filter.value);\n }),\n ),\n );\n};\n\nexport const paginateRows = <Row>(\n rows: readonly Row[],\n pagination: GridPagination,\n): GridPage<Row> => {\n const input = EffectArray.fromIterable(rows);\n const pageSize = normalizeInteger(pagination.pageSize, 1);\n const pageCount = input.length === 0 ? 0 : Math.ceil(input.length / pageSize);\n const requestedPageIndex = normalizeInteger(pagination.pageIndex, 0);\n const pageIndex = pageCount === 0 ? 0 : Math.min(requestedPageIndex, pageCount - 1);\n const pageOffset = pageIndex * pageSize;\n\n const pageRows = pipe(\n input,\n EffectArray.drop(pageOffset),\n EffectArray.take(pageSize),\n );\n\n return {\n rows: pageRows,\n pageIndex,\n pageSize,\n pageCount,\n totalRows: input.length,\n };\n};\n","import { Array as EffectArray, pipe } from \"effect\";\nimport type {\n VirtualItemMeasurement,\n VirtualOffsetInput,\n VirtualRange,\n VirtualRangeInput,\n VirtualSizeInput,\n} from \"./types\";\n\nconst normalizeNonNegativeInteger = (value: number): number => {\n if (!Number.isFinite(value)) {\n return 0;\n }\n return Math.max(0, Math.floor(value));\n};\n\nconst normalizeNonNegativeNumber = (value: number): number => {\n if (!Number.isFinite(value)) {\n return 0;\n }\n return Math.max(0, value);\n};\n\nconst normalizePositiveNumber = (value: number, fallback: number): number => {\n if (!Number.isFinite(value) || value <= 0) {\n return fallback;\n }\n return value;\n};\n\nconst normalizeCount = (count: number): number => normalizeNonNegativeInteger(count);\nconst normalizeEstimateSize = (estimateSize: number): number => normalizePositiveNumber(estimateSize, 1);\n\nconst resolveItemSize = (\n sizes: readonly number[] | undefined,\n index: number,\n estimateSize: number,\n): number => normalizePositiveNumber(sizes?.[index] ?? estimateSize, estimateSize);\n\nexport const measureVirtualItems = (input: VirtualSizeInput): readonly VirtualItemMeasurement[] => {\n const count = normalizeCount(input.count);\n const estimateSize = normalizeEstimateSize(input.estimateSize);\n const items: VirtualItemMeasurement[] = [];\n\n let offset = 0;\n\n for (let index = 0; index < count; index += 1) {\n const size = resolveItemSize(input.sizes, index, estimateSize);\n const start = offset;\n const end = start + size;\n\n items[index] = {\n index,\n size,\n start,\n end,\n };\n\n offset = end;\n }\n\n return items;\n};\n\nexport const calculateOffsets = (input: VirtualSizeInput): readonly number[] =>\n pipe(\n measureVirtualItems(input),\n EffectArray.map((item) => item.start),\n );\n\nexport const calculateTotalSize = (input: VirtualSizeInput): number => {\n const items = measureVirtualItems(input);\n if (items.length === 0) {\n return 0;\n }\n return items[items.length - 1]!.end;\n};\n\nexport const calculateOffsetForIndex = (input: VirtualOffsetInput): number => {\n const count = normalizeCount(input.count);\n const index = normalizeNonNegativeInteger(input.index);\n\n if (count === 0 || index === 0) {\n return 0;\n }\n\n if (index >= count) {\n return calculateTotalSize(input);\n }\n\n const estimateSize = normalizeEstimateSize(input.estimateSize);\n let offset = 0;\n\n for (let currentIndex = 0; currentIndex < index; currentIndex += 1) {\n offset += resolveItemSize(input.sizes, currentIndex, estimateSize);\n }\n\n return offset;\n};\n\nexport const calculateVisibleRange = (input: VirtualRangeInput): VirtualRange => {\n const count = normalizeCount(input.count);\n\n if (count === 0) {\n return {\n startIndex: 0,\n endIndex: -1,\n overscanStartIndex: 0,\n overscanEndIndex: -1,\n };\n }\n\n const viewportSize = normalizeNonNegativeNumber(input.viewportSize);\n const scrollOffset = normalizeNonNegativeNumber(input.scrollOffset);\n const overscan = normalizeNonNegativeInteger(input.overscan ?? 0);\n const viewportEnd = scrollOffset + viewportSize;\n\n const measurements = measureVirtualItems(input);\n let startIndex = count - 1;\n let endIndex = count - 1;\n let foundStart = false;\n\n for (const item of measurements) {\n if (!foundStart && item.end > scrollOffset) {\n startIndex = item.index;\n foundStart = true;\n }\n\n if (item.start < viewportEnd) {\n endIndex = item.index;\n }\n\n if (foundStart && item.start >= viewportEnd) {\n break;\n }\n }\n\n if (!foundStart) {\n startIndex = count - 1;\n endIndex = count - 1;\n } else if (viewportSize <= 0) {\n endIndex = startIndex;\n }\n\n return {\n startIndex,\n endIndex,\n overscanStartIndex: Math.max(0, startIndex - overscan),\n overscanEndIndex: Math.min(count - 1, endIndex + overscan),\n };\n};\n\nexport const getOffsetForIndex = calculateOffsetForIndex;\nexport const getTotalSize = calculateTotalSize;\nexport const getVisibleRange = calculateVisibleRange;\n","import { Effect, PubSub, Stream } from \"effect\";\n\nexport interface CreateChannelOptions {\n readonly replay?: number;\n}\n\nexport interface RealtimeChannel<Message> {\n readonly publish: (message: Message) => Effect.Effect<void>;\n readonly publishAll: (messages: Iterable<Message>) => Effect.Effect<void>;\n readonly subscribe: () => Stream.Stream<Message>;\n readonly stream: Stream.Stream<Message>;\n readonly shutdown: Effect.Effect<void>;\n}\n\nexport const createChannel = <Message>(\n options: CreateChannelOptions = {},\n): Effect.Effect<RealtimeChannel<Message>> =>\n Effect.map(PubSub.unbounded<Message>(options), (pubsub) => {\n const subscribe = (): Stream.Stream<Message> => Stream.fromPubSub(pubsub);\n\n return {\n publish: (message) => PubSub.publish(pubsub, message).pipe(Effect.asVoid),\n publishAll: (messages) => PubSub.publishAll(pubsub, messages).pipe(Effect.asVoid),\n subscribe,\n stream: subscribe(),\n shutdown: PubSub.shutdown(pubsub),\n };\n });\n\nexport const publish = <Message>(\n channel: RealtimeChannel<Message>,\n message: Message,\n): Effect.Effect<void> => channel.publish(message);\n\nexport const publishAll = <Message>(\n channel: RealtimeChannel<Message>,\n messages: Iterable<Message>,\n): Effect.Effect<void> => channel.publishAll(messages);\n\nexport const subscribe = <Message>(channel: RealtimeChannel<Message>): Stream.Stream<Message> =>\n channel.subscribe();\n","import { Effect, Ref, Stream } from \"effect\";\nimport { createChannel, publish, subscribe } from \"./channel\";\n\nexport type PresenceEvent<MemberId extends string, Member> =\n | {\n readonly _tag: \"join\";\n readonly memberId: MemberId;\n readonly member: Member;\n readonly timestamp: number;\n }\n | {\n readonly _tag: \"leave\";\n readonly memberId: MemberId;\n readonly timestamp: number;\n };\n\nexport interface CreatePresenceOptions<MemberId extends string, Member> {\n readonly identify: (member: Member) => MemberId;\n}\n\nexport interface Presence<MemberId extends string, Member> {\n readonly events: Stream.Stream<PresenceEvent<MemberId, Member>>;\n readonly members: Stream.Stream<ReadonlyMap<MemberId, Member>>;\n readonly getMembers: Effect.Effect<ReadonlyMap<MemberId, Member>>;\n readonly join: (member: Member) => Effect.Effect<void>;\n readonly leave: (memberId: MemberId) => Effect.Effect<void>;\n}\n\nconst cloneMembers = <MemberId extends string, Member>(\n members: ReadonlyMap<MemberId, Member>,\n): ReadonlyMap<MemberId, Member> => new Map(members);\n\nconst applyPresenceEvent = <MemberId extends string, Member>(\n members: ReadonlyMap<MemberId, Member>,\n event: PresenceEvent<MemberId, Member>,\n): ReadonlyMap<MemberId, Member> => {\n const next = new Map(members);\n if (event._tag === \"join\") {\n next.set(event.memberId, event.member);\n } else {\n next.delete(event.memberId);\n }\n return next;\n};\n\nexport const createPresence = <MemberId extends string, Member>(\n options: CreatePresenceOptions<MemberId, Member>,\n): Effect.Effect<Presence<MemberId, Member>> =>\n Effect.gen(function* () {\n const channel = yield* createChannel<PresenceEvent<MemberId, Member>>();\n const membersRef = yield* Ref.make(new Map<MemberId, Member>());\n\n const getMembers: Effect.Effect<ReadonlyMap<MemberId, Member>> = Ref.get(membersRef).pipe(\n Effect.map((members) => cloneMembers(members)),\n );\n\n const events = subscribe(channel);\n\n const members = Stream.flatMap(\n Stream.fromEffect(getMembers),\n (initialMembers) =>\n events.pipe(\n Stream.scan(initialMembers, (current, event) =>\n applyPresenceEvent(current, event),\n ),\n ),\n );\n\n const join = (member: Member): Effect.Effect<void> => {\n const memberId = options.identify(member);\n const event: PresenceEvent<MemberId, Member> = {\n _tag: \"join\",\n memberId,\n member,\n timestamp: Date.now(),\n };\n\n return Ref.update(membersRef, (current) => {\n const next = new Map(current);\n next.set(memberId, member);\n return next;\n }).pipe(Effect.zipRight(publish(channel, event)));\n };\n\n const leave = (memberId: MemberId): Effect.Effect<void> => {\n const event: PresenceEvent<MemberId, Member> = {\n _tag: \"leave\",\n memberId,\n timestamp: Date.now(),\n };\n\n return Ref.update(membersRef, (current) => {\n const next = new Map(current);\n next.delete(memberId);\n return next;\n }).pipe(Effect.zipRight(publish(channel, event)));\n };\n\n return {\n events,\n members,\n getMembers,\n join,\n leave,\n };\n });\n","import { Effect, Stream } from \"effect\";\nimport { Telemetry, type TelemetryEvent } from \"../kernel/telemetry\";\nimport { createChannel, publish, subscribe } from \"../realtime\";\n\nexport type RuntimeEvent =\n | {\n readonly phase: \"runtime-created\" | \"runtime-disposed\";\n readonly timestamp: number;\n readonly detail?: unknown;\n }\n | {\n readonly phase: \"run-fork\" | \"run-sync\" | \"run-promise\";\n readonly timestamp: number;\n readonly detail?: unknown;\n };\n\nexport interface RuntimeEventSource {\n readonly emit: (event: RuntimeEvent) => Effect.Effect<void>;\n readonly stream: Stream.Stream<RuntimeEvent>;\n}\n\nexport type DevtoolsEvent =\n | {\n readonly _tag: \"telemetry\";\n readonly timestamp: number;\n readonly event: TelemetryEvent;\n }\n | {\n readonly _tag: \"runtime\";\n readonly timestamp: number;\n readonly event: RuntimeEvent;\n };\n\nexport interface DevtoolsEventStream {\n readonly stream: Stream.Stream<DevtoolsEvent>;\n}\n\nexport interface CreateDevtoolsEventStreamOptions {\n readonly telemetry: Stream.Stream<TelemetryEvent>;\n readonly runtime?: Stream.Stream<RuntimeEvent>;\n}\n\nexport interface CreateDevtoolsEventStreamFromTelemetryOptions {\n readonly runtime?: Stream.Stream<RuntimeEvent>;\n}\n\nconst emptyRuntimeStream = (): Stream.Stream<RuntimeEvent> =>\n Stream.fromIterable<RuntimeEvent>([]);\n\nconst wrapTelemetryEvent = (event: TelemetryEvent): DevtoolsEvent => ({\n _tag: \"telemetry\",\n timestamp: event.timestamp,\n event,\n});\n\nconst wrapRuntimeEvent = (event: RuntimeEvent): DevtoolsEvent => ({\n _tag: \"runtime\",\n timestamp: event.timestamp,\n event,\n});\n\nexport const createRuntimeEventSource = (): Effect.Effect<RuntimeEventSource> =>\n Effect.map(createChannel<RuntimeEvent>(), (channel) => ({\n emit: (event) => publish(channel, event),\n stream: subscribe(channel),\n }));\n\nexport const createDevtoolsEventStream = (\n options: CreateDevtoolsEventStreamOptions,\n): DevtoolsEventStream => {\n const telemetry = options.telemetry.pipe(Stream.map(wrapTelemetryEvent));\n const runtime = (options.runtime ?? emptyRuntimeStream()).pipe(Stream.map(wrapRuntimeEvent));\n\n return {\n stream: Stream.merge(telemetry, runtime),\n };\n};\n\nexport const createDevtoolsEventStreamFromTelemetry = (\n options: CreateDevtoolsEventStreamFromTelemetryOptions = {},\n): Effect.Effect<DevtoolsEventStream, never, Telemetry> =>\n Effect.map(Telemetry, (telemetry) =>\n createDevtoolsEventStream({\n telemetry: telemetry.stream,\n ...(options.runtime !== undefined ? { runtime: options.runtime } : {}),\n }),\n );\n","import { Effect, Fiber, Stream } from \"effect\";\nimport { useEffect, useState } from \"react\";\nimport { useEffectRuntime } from \"../react/provider\";\nimport type { DevtoolsEvent, DevtoolsEventStream } from \"./events\";\n\nexport interface UseEventStreamOptions {\n readonly enabled?: boolean;\n readonly limit?: number;\n}\n\nconst appendEvent = <Event,>(\n current: readonly Event[],\n event: Event,\n limit: number,\n): readonly Event[] => {\n if (limit <= 0) {\n return current;\n }\n if (current.length < limit) {\n return [...current, event];\n }\n return [...current.slice(current.length - limit + 1), event];\n};\n\nexport const useEventStream = <Event,>(\n stream: Stream.Stream<Event>,\n options: UseEventStreamOptions = {},\n): readonly Event[] => {\n const runtime = useEffectRuntime();\n const limit = options.limit ?? 128;\n const [events, setEvents] = useState<readonly Event[]>([]);\n\n useEffect(() => {\n if (options.enabled === false || limit <= 0) {\n return;\n }\n\n const fiber = runtime.runFork(\n Stream.runForEach(stream, (event) =>\n Effect.sync(() => {\n setEvents((current) => appendEvent(current, event, limit));\n }),\n ),\n );\n\n return () => {\n runtime.runFork(Fiber.interrupt(fiber));\n };\n }, [runtime, stream, options.enabled, limit]);\n\n return events;\n};\n\nexport const useDevtoolsEvents = (\n source: DevtoolsEventStream,\n options: UseEventStreamOptions = {},\n): readonly DevtoolsEvent[] => useEventStream(source.stream, options);\n"],"mappings":"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","names":["fetchQuery","useNavigate","useNavigationSnapshot","useQuery","useSuspenseQuery","import_effect","import_effect","import_effect","import_effect","import_effect","update","fetch","prefetch","invalidate","import_effect","import_react","subscribe","invalidate","routePath","import_effect","initialSnapshot","navigate","import_effect","import_react","import_jsx_runtime","subscribe","navigate","import_effect","import_effect","import_react","import_effect","import_effect","import_effect","import_effect","import_effect","import_react","defaultEquality","subscribe","import_effect","fetchQuery","import_effect","import_react","useDataService","useQuery","useSuspenseQuery","useDataService","invalidate","import_effect","useNavigate","useNavigationSnapshot","import_effect","current","import_effect","import_react","subscribe","import_effect","EffectArray","import_effect","EffectArray","import_effect","subscribe","import_effect","members","import_effect","import_effect","import_react"]}
@@ -0,0 +1,13 @@
1
+ export * from "./framework";
2
+ export * from "./config";
3
+ export * from "./server";
4
+ export * from "./client";
5
+ export * from "./testing";
6
+ export * from "./state";
7
+ export * from "./query";
8
+ export * from "./router";
9
+ export * from "./form";
10
+ export * from "./grid";
11
+ export * from "./virtual";
12
+ export * from "./realtime";
13
+ export * from "./devtools";