effective-rsc 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (220) hide show
  1. package/LICENSE +21 -0
  2. package/LLMS.md +382 -0
  3. package/README.md +235 -0
  4. package/bin/ersc.js +3 -0
  5. package/dist/application/component.d.ts +15 -0
  6. package/dist/application/component.js +20 -0
  7. package/dist/application/component.js.map +1 -0
  8. package/dist/application/definition.d.ts +31 -0
  9. package/dist/application/definition.js +57 -0
  10. package/dist/application/definition.js.map +1 -0
  11. package/dist/application/ersc-identity.d.ts +25 -0
  12. package/dist/application/ersc-identity.js +23 -0
  13. package/dist/application/ersc-identity.js.map +1 -0
  14. package/dist/application/ersc.d.ts +28 -0
  15. package/dist/application/ersc.js +72 -0
  16. package/dist/application/ersc.js.map +1 -0
  17. package/dist/application/layout.d.ts +18 -0
  18. package/dist/application/layout.js +17 -0
  19. package/dist/application/layout.js.map +1 -0
  20. package/dist/application/loading.d.ts +17 -0
  21. package/dist/application/loading.js +14 -0
  22. package/dist/application/loading.js.map +1 -0
  23. package/dist/application/middleware.d.ts +36 -0
  24. package/dist/application/middleware.js +46 -0
  25. package/dist/application/middleware.js.map +1 -0
  26. package/dist/application/page.d.ts +58 -0
  27. package/dist/application/page.js +50 -0
  28. package/dist/application/page.js.map +1 -0
  29. package/dist/application/render-runtime.d.ts +9 -0
  30. package/dist/application/render-runtime.js +28 -0
  31. package/dist/application/render-runtime.js.map +1 -0
  32. package/dist/application/route-graph.d.ts +22 -0
  33. package/dist/application/route-graph.js +68 -0
  34. package/dist/application/route-graph.js.map +1 -0
  35. package/dist/application/route-path.d.ts +31 -0
  36. package/dist/application/route-path.js +67 -0
  37. package/dist/application/route-path.js.map +1 -0
  38. package/dist/application/routes.d.ts +66 -0
  39. package/dist/application/routes.js +159 -0
  40. package/dist/application/routes.js.map +1 -0
  41. package/dist/application/server-fn.d.ts +30 -0
  42. package/dist/application/server-fn.js +58 -0
  43. package/dist/application/server-fn.js.map +1 -0
  44. package/dist/build/build.d.ts +26 -0
  45. package/dist/build/build.js +59 -0
  46. package/dist/build/build.js.map +1 -0
  47. package/dist/build/compiled-server.d.ts +53 -0
  48. package/dist/build/compiled-server.js +77 -0
  49. package/dist/build/compiled-server.js.map +1 -0
  50. package/dist/build/contract.d.ts +23 -0
  51. package/dist/build/contract.js +41 -0
  52. package/dist/build/contract.js.map +1 -0
  53. package/dist/build/dev-channel.d.ts +20 -0
  54. package/dist/build/dev-channel.js +71 -0
  55. package/dist/build/dev-channel.js.map +1 -0
  56. package/dist/build/dev.d.ts +41 -0
  57. package/dist/build/dev.js +186 -0
  58. package/dist/build/dev.js.map +1 -0
  59. package/dist/build/rsc-entry.d.ts +4 -0
  60. package/dist/build/rsc-entry.js +17 -0
  61. package/dist/build/rsc-entry.js.map +1 -0
  62. package/dist/build/rspack-config.d.ts +17 -0
  63. package/dist/build/rspack-config.js +259 -0
  64. package/dist/build/rspack-config.js.map +1 -0
  65. package/dist/build/rspack.d.ts +45 -0
  66. package/dist/build/rspack.js +231 -0
  67. package/dist/build/rspack.js.map +1 -0
  68. package/dist/build/terminal.d.ts +9 -0
  69. package/dist/build/terminal.js +17 -0
  70. package/dist/build/terminal.js.map +1 -0
  71. package/dist/cli.d.ts +14 -0
  72. package/dist/cli.js +116 -0
  73. package/dist/cli.js.map +1 -0
  74. package/dist/client/application.d.ts +2 -0
  75. package/dist/client/application.js +73 -0
  76. package/dist/client/application.js.map +1 -0
  77. package/dist/client/browser-capabilities.d.ts +9 -0
  78. package/dist/client/browser-capabilities.js +20 -0
  79. package/dist/client/browser-capabilities.js.map +1 -0
  80. package/dist/client/browser-effect-runner.d.ts +13 -0
  81. package/dist/client/browser-effect-runner.js +13 -0
  82. package/dist/client/browser-effect-runner.js.map +1 -0
  83. package/dist/client/browser-renderer.d.ts +70 -0
  84. package/dist/client/browser-renderer.js +159 -0
  85. package/dist/client/browser-renderer.js.map +1 -0
  86. package/dist/client/browser-screen.d.ts +2 -0
  87. package/dist/client/browser-screen.js +215 -0
  88. package/dist/client/browser-screen.js.map +1 -0
  89. package/dist/client/call-server.d.ts +8 -0
  90. package/dist/client/call-server.js +151 -0
  91. package/dist/client/call-server.js.map +1 -0
  92. package/dist/client/client-router.d.ts +6 -0
  93. package/dist/client/client-router.js +588 -0
  94. package/dist/client/client-router.js.map +1 -0
  95. package/dist/client/entry.d.ts +1 -0
  96. package/dist/client/entry.js +12 -0
  97. package/dist/client/entry.js.map +1 -0
  98. package/dist/client/flight-client.d.ts +83 -0
  99. package/dist/client/flight-client.js +146 -0
  100. package/dist/client/flight-client.js.map +1 -0
  101. package/dist/client/initial-flight-stream.d.ts +18 -0
  102. package/dist/client/initial-flight-stream.js +60 -0
  103. package/dist/client/initial-flight-stream.js.map +1 -0
  104. package/dist/client/navigation-api.d.ts +34 -0
  105. package/dist/client/navigation-api.js +25 -0
  106. package/dist/client/navigation-api.js.map +1 -0
  107. package/dist/client/navigation-routing.d.ts +3 -0
  108. package/dist/client/navigation-routing.js +8 -0
  109. package/dist/client/navigation-routing.js.map +1 -0
  110. package/dist/client/react-dom-renderer.d.ts +20 -0
  111. package/dist/client/react-dom-renderer.js +101 -0
  112. package/dist/client/react-dom-renderer.js.map +1 -0
  113. package/dist/client/route-loader.d.ts +81 -0
  114. package/dist/client/route-loader.js +128 -0
  115. package/dist/client/route-loader.js.map +1 -0
  116. package/dist/client/route-refresh.d.ts +31 -0
  117. package/dist/client/route-refresh.js +132 -0
  118. package/dist/client/route-refresh.js.map +1 -0
  119. package/dist/client/route-tree.d.ts +7 -0
  120. package/dist/client/route-tree.js +34 -0
  121. package/dist/client/route-tree.js.map +1 -0
  122. package/dist/dev/channel.d.ts +18 -0
  123. package/dist/dev/channel.js +30 -0
  124. package/dist/dev/channel.js.map +1 -0
  125. package/dist/dev/client.d.ts +3 -0
  126. package/dist/dev/client.js +132 -0
  127. package/dist/dev/client.js.map +1 -0
  128. package/dist/dev/hmr-update.d.ts +20 -0
  129. package/dist/dev/hmr-update.js +28 -0
  130. package/dist/dev/hmr-update.js.map +1 -0
  131. package/dist/dev/panel.d.ts +41 -0
  132. package/dist/dev/panel.js +9946 -0
  133. package/dist/dev/panel.js.map +1 -0
  134. package/dist/dev/runtime-failure.d.ts +11 -0
  135. package/dist/dev/runtime-failure.js +32 -0
  136. package/dist/dev/runtime-failure.js.map +1 -0
  137. package/dist/index.d.ts +1 -0
  138. package/dist/index.js +6 -0
  139. package/dist/index.js.map +1 -0
  140. package/dist/rsc/flight.d.ts +16 -0
  141. package/dist/rsc/flight.js +6 -0
  142. package/dist/rsc/flight.js.map +1 -0
  143. package/dist/rsc/render-route-tree.d.ts +11 -0
  144. package/dist/rsc/render-route-tree.js +52 -0
  145. package/dist/rsc/render-route-tree.js.map +1 -0
  146. package/dist/rsc/route-tree.d.ts +6 -0
  147. package/dist/rsc/route-tree.js +5 -0
  148. package/dist/rsc/route-tree.js.map +1 -0
  149. package/dist/server/application.d.ts +17 -0
  150. package/dist/server/application.js +178 -0
  151. package/dist/server/application.js.map +1 -0
  152. package/dist/server/flight-html-stream.d.ts +19 -0
  153. package/dist/server/flight-html-stream.js +193 -0
  154. package/dist/server/flight-html-stream.js.map +1 -0
  155. package/dist/server/flight-renderer.d.ts +31 -0
  156. package/dist/server/flight-renderer.js +47 -0
  157. package/dist/server/flight-renderer.js.map +1 -0
  158. package/dist/server/html-renderer.d.ts +28 -0
  159. package/dist/server/html-renderer.js +82 -0
  160. package/dist/server/html-renderer.js.map +1 -0
  161. package/dist/server/request-outcome.d.ts +8 -0
  162. package/dist/server/request-outcome.js +5 -0
  163. package/dist/server/request-outcome.js.map +1 -0
  164. package/dist/server/server-config.d.ts +17 -0
  165. package/dist/server/server-config.js +18 -0
  166. package/dist/server/server-config.js.map +1 -0
  167. package/dist/server/server-fn-outcome.d.ts +13 -0
  168. package/dist/server/server-fn-outcome.js +24 -0
  169. package/dist/server/server-fn-outcome.js.map +1 -0
  170. package/dist/server/server-fn-request.d.ts +24 -0
  171. package/dist/server/server-fn-request.js +160 -0
  172. package/dist/server/server-fn-request.js.map +1 -0
  173. package/dist/unsupported.d.ts +0 -0
  174. package/dist/unsupported.js +5 -0
  175. package/dist/unsupported.js.map +1 -0
  176. package/docs/01-getting-started/01_first-application.tsx +26 -0
  177. package/docs/01-getting-started/20_styling.tsx +6 -0
  178. package/docs/01-getting-started/index.md +27 -0
  179. package/docs/01-getting-started/styles.css +1 -0
  180. package/docs/02-guides/01-server-functions/10_ersc.ts +6 -0
  181. package/docs/02-guides/01-server-functions/20_follow-author.ts +15 -0
  182. package/docs/02-guides/01-server-functions/30_follow-author-button.tsx +19 -0
  183. package/docs/02-guides/01-server-functions/40_application.tsx +30 -0
  184. package/docs/02-guides/01-server-functions/index.md +19 -0
  185. package/docs/02-guides/02-services/10_catalog.ts +22 -0
  186. package/docs/02-guides/02-services/20_application.tsx +44 -0
  187. package/docs/02-guides/02-services/index.md +17 -0
  188. package/docs/02-guides/03-routing/10_ersc.ts +6 -0
  189. package/docs/02-guides/03-routing/10_layouts.tsx +36 -0
  190. package/docs/02-guides/03-routing/20_pages.tsx +23 -0
  191. package/docs/02-guides/03-routing/30_routes.tsx +17 -0
  192. package/docs/02-guides/03-routing/40_application.ts +7 -0
  193. package/docs/02-guides/03-routing/index.md +22 -0
  194. package/docs/02-guides/04-middleware/10_auth.ts +27 -0
  195. package/docs/02-guides/04-middleware/20_account-page.tsx +13 -0
  196. package/docs/02-guides/04-middleware/30_update-profile.ts +16 -0
  197. package/docs/02-guides/04-middleware/40_application.tsx +20 -0
  198. package/docs/02-guides/04-middleware/index.md +25 -0
  199. package/docs/02-guides/05-http/10_application-layer.tsx +60 -0
  200. package/docs/02-guides/05-http/index.md +23 -0
  201. package/docs/02-guides/index.md +11 -0
  202. package/docs/03-advanced/01-request-runtime-and-lifetimes/index.md +13 -0
  203. package/docs/03-advanced/02-client-navigation/index.md +61 -0
  204. package/docs/03-advanced/03-server-function-execution-and-refresh/index.md +17 -0
  205. package/docs/03-advanced/index.md +11 -0
  206. package/docs/04-api-reference/01-application/index.md +8 -0
  207. package/docs/04-api-reference/02-page/index.md +12 -0
  208. package/docs/04-api-reference/03-layout/index.md +4 -0
  209. package/docs/04-api-reference/04-loading/index.md +4 -0
  210. package/docs/04-api-reference/05-component/10_component.tsx +18 -0
  211. package/docs/04-api-reference/05-component/index.md +10 -0
  212. package/docs/04-api-reference/06-middleware/index.md +33 -0
  213. package/docs/04-api-reference/07-routes/index.md +20 -0
  214. package/docs/04-api-reference/08-server-fn/index.md +43 -0
  215. package/docs/04-api-reference/index.md +17 -0
  216. package/docs/environment.d.ts +1 -0
  217. package/docs/index.md +15 -0
  218. package/logo-dark.svg +6 -0
  219. package/logo.svg +6 -0
  220. package/package.json +87 -0
@@ -0,0 +1,132 @@
1
+ import { Effect, Layer, Ref, Semaphore, Stream } from "effect";
2
+ import { RpcClient, RpcSerialization } from "effect/unstable/rpc";
3
+ import { RouteRefresher } from "../client/route-refresh.js";
4
+ import { DevChannelPath, DevRpcs } from "./channel.js";
5
+ import { decideHotUpdate } from "./hmr-update.js";
6
+ import { makeDevPanel } from "./panel.js";
7
+ import { reportBrowserFailures } from "./runtime-failure.js";
8
+
9
+ import * as __rspack_external__effect_platform_browser_BrowserSocket_31178d5b from "@effect/platform-browser/BrowserSocket";
10
+
11
+
12
+
13
+
14
+
15
+
16
+
17
+
18
+
19
+
20
+
21
+
22
+
23
+
24
+
25
+
26
+ const socketProtocol = location.protocol === 'https:' ? 'wss:' : 'ws:';
27
+ const socketUrl = `${socketProtocol}//${location.host}${DevChannelPath}`;
28
+ const DevRpcProtocolLayer = RpcClient.layerProtocolSocket({
29
+ retryTransientErrors: true
30
+ }).pipe(Layer.provide(__rspack_external__effect_platform_browser_BrowserSocket_31178d5b.layerWebSocket(socketUrl)), Layer.provide(RpcSerialization.layerJson));
31
+ const recordUpdate = (pending, message)=>({
32
+ acknowledgedClientHash: pending.acknowledgedClientHash,
33
+ clientHash: message.clientHash,
34
+ rscRefresh: pending.rscRefresh === 'Pending' || message._tag === 'RscUpdate' ? 'Pending' : 'Current'
35
+ });
36
+ const settlePendingUpdate = Effect.fnUntraced(function*(pendingUpdate) {
37
+ const reconcile = Effect.gen(function*() {
38
+ const pending = yield* Ref.get(pendingUpdate);
39
+ if (pending.acknowledgedClientHash !== pending.clientHash) {
40
+ const previousHash = import.meta.rspackHash;
41
+ const check = yield* Effect.tryPromise(()=>import.meta.webpackHot.check(true)).pipe(Effect.match({
42
+ onFailure: ()=>({
43
+ _tag: 'Failed'
44
+ }),
45
+ onSuccess: (updatedModules)=>({
46
+ _tag: 'Completed',
47
+ currentHash: import.meta.rspackHash,
48
+ previousHash,
49
+ updatedModules
50
+ })
51
+ }));
52
+ const decision = decideHotUpdate(pending, check);
53
+ if (decision._tag === 'Reload') {
54
+ yield* Effect.sync(()=>location.reload());
55
+ return 'Reloading';
56
+ }
57
+ yield* Ref.update(pendingUpdate, (current)=>({
58
+ ...current,
59
+ acknowledgedClientHash: decision.acknowledgedClientHash
60
+ }));
61
+ return 'Retry';
62
+ }
63
+ return yield* Ref.modify(pendingUpdate, (current)=>{
64
+ if (current.acknowledgedClientHash !== current.clientHash) {
65
+ return [
66
+ 'Retry',
67
+ current
68
+ ];
69
+ }
70
+ if (current.rscRefresh === 'Current') {
71
+ return [
72
+ 'Current',
73
+ current
74
+ ];
75
+ }
76
+ return [
77
+ 'Refresh',
78
+ {
79
+ ...current,
80
+ rscRefresh: 'Current'
81
+ }
82
+ ];
83
+ });
84
+ });
85
+ return yield* reconcile.pipe(Effect.repeat({
86
+ while: (action)=>action === 'Retry'
87
+ }));
88
+ });
89
+ const startDevClient = Effect.gen(function*() {
90
+ const routeRefresher = yield* RouteRefresher;
91
+ const panel = yield* makeDevPanel;
92
+ const pendingUpdate = yield* Ref.make({
93
+ acknowledgedClientHash: import.meta.rspackHash,
94
+ clientHash: import.meta.rspackHash,
95
+ rscRefresh: 'Current'
96
+ });
97
+ const updateLock = yield* Semaphore.make(1);
98
+ const handleHotUpdate = Effect.fnUntraced(function*(message) {
99
+ yield* Ref.update(pendingUpdate, (pending)=>recordUpdate(pending, message));
100
+ const action = yield* updateLock.withPermit(settlePendingUpdate(pendingUpdate));
101
+ if (action === 'Reloading') {
102
+ return;
103
+ }
104
+ if (action === 'Refresh') {
105
+ yield* routeRefresher.refreshCurrentRoute('hmr-refresh');
106
+ }
107
+ yield* panel.dispatch({
108
+ _tag: 'Reconciled'
109
+ });
110
+ });
111
+ yield* reportBrowserFailures((failure)=>panel.dispatch({
112
+ _tag: 'RuntimeFailed',
113
+ failure
114
+ })).pipe(Effect.forkScoped);
115
+ const observeUpdates = Effect.gen(function*() {
116
+ const client = yield* RpcClient.make(DevRpcs);
117
+ const handleUpdate = Effect.fnUntraced(function*(phase, message) {
118
+ if (message._tag === 'BuildFailed') {
119
+ yield* panel.dispatch(message);
120
+ } else if (phase === 'Live') {
121
+ yield* handleHotUpdate(message);
122
+ }
123
+ return 'Live';
124
+ });
125
+ yield* client.ObserveDevUpdates().pipe(Stream.runFoldEffect(()=>'Snapshot', handleUpdate), Effect.asVoid);
126
+ });
127
+ yield* observeUpdates.pipe(Effect.provide(DevRpcProtocolLayer));
128
+ });
129
+
130
+ export { startDevClient };
131
+
132
+ //# sourceMappingURL=client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dev/client.js","sources":["../../src/dev/client.ts"],"sourcesContent":["import * as BrowserSocket from '@effect/platform-browser/BrowserSocket';\nimport { Effect, Layer, Ref, Semaphore, Stream } from 'effect';\nimport { RpcClient, RpcSerialization } from 'effect/unstable/rpc';\n\nimport { RouteRefresher } from '../client/route-refresh';\nimport { DevChannelPath, DevRpcs, type DevUpdate } from './channel';\nimport { decideHotUpdate, type HotUpdateCheck, type PendingDevUpdate } from './hmr-update';\nimport { makeDevPanel } from './panel';\nimport { reportBrowserFailures } from './runtime-failure';\n\nconst socketProtocol = location.protocol === 'https:' ? 'wss:' : 'ws:';\nconst socketUrl = `${socketProtocol}//${location.host}${DevChannelPath}`;\n\nconst DevRpcProtocolLayer = RpcClient.layerProtocolSocket({ retryTransientErrors: true }).pipe(\n Layer.provide(BrowserSocket.layerWebSocket(socketUrl)),\n Layer.provide(RpcSerialization.layerJson),\n);\n\ntype DevHotUpdate = Exclude<DevUpdate, { readonly _tag: 'BuildFailed' }>;\ntype DevUpdatePhase = 'Snapshot' | 'Live';\n\nconst recordUpdate = (pending: PendingDevUpdate, message: DevHotUpdate): PendingDevUpdate => ({\n acknowledgedClientHash: pending.acknowledgedClientHash,\n clientHash: message.clientHash,\n rscRefresh:\n pending.rscRefresh === 'Pending' || message._tag === 'RscUpdate' ? 'Pending' : 'Current',\n});\n\nconst settlePendingUpdate = Effect.fnUntraced(function* (pendingUpdate: Ref.Ref<PendingDevUpdate>) {\n const reconcile = Effect.gen(function* () {\n const pending = yield* Ref.get(pendingUpdate);\n if (pending.acknowledgedClientHash !== pending.clientHash) {\n const previousHash = import.meta.rspackHash;\n const check = yield* Effect.tryPromise(() => import.meta.webpackHot!.check(true)).pipe(\n Effect.match({\n onFailure: (): HotUpdateCheck => ({ _tag: 'Failed' }),\n onSuccess: (updatedModules): HotUpdateCheck => ({\n _tag: 'Completed',\n currentHash: import.meta.rspackHash,\n previousHash,\n updatedModules,\n }),\n }),\n );\n const decision = decideHotUpdate(pending, check);\n if (decision._tag === 'Reload') {\n yield* Effect.sync(() => location.reload());\n return 'Reloading' as const;\n }\n\n yield* Ref.update(pendingUpdate, (current) => ({\n ...current,\n acknowledgedClientHash: decision.acknowledgedClientHash,\n }));\n return 'Retry' as const;\n }\n\n return yield* Ref.modify(pendingUpdate, (current) => {\n if (current.acknowledgedClientHash !== current.clientHash) {\n return ['Retry', current] as const;\n }\n if (current.rscRefresh === 'Current') {\n return ['Current', current] as const;\n }\n return ['Refresh', { ...current, rscRefresh: 'Current' }] as const;\n });\n });\n\n return yield* reconcile.pipe(Effect.repeat({ while: (action) => action === 'Retry' }));\n});\n\nexport const startDevClient = Effect.gen(function* () {\n const routeRefresher = yield* RouteRefresher;\n const panel = yield* makeDevPanel;\n const pendingUpdate = yield* Ref.make<PendingDevUpdate>({\n acknowledgedClientHash: import.meta.rspackHash,\n clientHash: import.meta.rspackHash,\n rscRefresh: 'Current',\n });\n const updateLock = yield* Semaphore.make(1);\n const handleHotUpdate = Effect.fnUntraced(function* (message: DevHotUpdate) {\n yield* Ref.update(pendingUpdate, (pending) => recordUpdate(pending, message));\n const action = yield* updateLock.withPermit(settlePendingUpdate(pendingUpdate));\n if (action === 'Reloading') {\n return;\n }\n if (action === 'Refresh') {\n yield* routeRefresher.refreshCurrentRoute('hmr-refresh');\n }\n yield* panel.dispatch({ _tag: 'Reconciled' });\n });\n yield* reportBrowserFailures((failure) =>\n panel.dispatch({ _tag: 'RuntimeFailed', failure }),\n ).pipe(Effect.forkScoped);\n\n const observeUpdates = Effect.gen(function* () {\n const client = yield* RpcClient.make(DevRpcs);\n const handleUpdate = Effect.fnUntraced(function* (phase: DevUpdatePhase, message: DevUpdate) {\n if (message._tag === 'BuildFailed') {\n yield* panel.dispatch(message);\n } else if (phase === 'Live') {\n yield* handleHotUpdate(message);\n }\n\n return 'Live' as const;\n });\n\n yield* client.ObserveDevUpdates().pipe(\n Stream.runFoldEffect((): DevUpdatePhase => 'Snapshot', handleUpdate),\n Effect.asVoid,\n );\n });\n\n yield* observeUpdates.pipe(Effect.provide(DevRpcProtocolLayer));\n});\n"],"names":["BrowserSocket","Effect","Layer","Ref","Semaphore","Stream","RpcClient","RpcSerialization","RouteRefresher","DevChannelPath","DevRpcs","decideHotUpdate","makeDevPanel","reportBrowserFailures","socketProtocol","location","socketUrl","DevRpcProtocolLayer","recordUpdate","pending","message","settlePendingUpdate","pendingUpdate","reconcile","previousHash","check","updatedModules","decision","current","action","startDevClient","routeRefresher","panel","updateLock","handleHotUpdate","failure","observeUpdates","client","handleUpdate","phase"],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ export type PendingDevUpdate = {
2
+ readonly acknowledgedClientHash: string;
3
+ readonly clientHash: string;
4
+ readonly rscRefresh: 'Current' | 'Pending';
5
+ };
6
+ export type HotUpdateCheck = {
7
+ readonly _tag: 'Failed';
8
+ } | {
9
+ readonly _tag: 'Completed';
10
+ readonly currentHash: string;
11
+ readonly previousHash: string;
12
+ readonly updatedModules: ReadonlyArray<string | number> | null;
13
+ };
14
+ export type HotUpdateDecision = {
15
+ readonly _tag: 'Reload';
16
+ } | {
17
+ readonly _tag: 'Retry';
18
+ readonly acknowledgedClientHash: string;
19
+ };
20
+ export declare const decideHotUpdate: (pending: PendingDevUpdate, check: HotUpdateCheck) => HotUpdateDecision;
@@ -0,0 +1,28 @@
1
+ const decideHotUpdate = (pending, check)=>{
2
+ if (check._tag === 'Failed') {
3
+ return {
4
+ _tag: 'Reload'
5
+ };
6
+ }
7
+ if (check.currentHash !== check.previousHash) {
8
+ return {
9
+ _tag: 'Retry',
10
+ acknowledgedClientHash: check.currentHash
11
+ };
12
+ }
13
+ if (check.updatedModules !== null && check.updatedModules.length > 0) {
14
+ return {
15
+ _tag: 'Reload'
16
+ };
17
+ }
18
+ return pending.rscRefresh === 'Pending' ? {
19
+ _tag: 'Retry',
20
+ acknowledgedClientHash: pending.clientHash
21
+ } : {
22
+ _tag: 'Reload'
23
+ };
24
+ };
25
+
26
+ export { decideHotUpdate };
27
+
28
+ //# sourceMappingURL=hmr-update.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dev/hmr-update.js","sources":["../../src/dev/hmr-update.ts"],"sourcesContent":["export type PendingDevUpdate = {\n readonly acknowledgedClientHash: string;\n readonly clientHash: string;\n readonly rscRefresh: 'Current' | 'Pending';\n};\n\nexport type HotUpdateCheck =\n | { readonly _tag: 'Failed' }\n | {\n readonly _tag: 'Completed';\n readonly currentHash: string;\n readonly previousHash: string;\n readonly updatedModules: ReadonlyArray<string | number> | null;\n };\n\nexport type HotUpdateDecision =\n | { readonly _tag: 'Reload' }\n | { readonly _tag: 'Retry'; readonly acknowledgedClientHash: string };\n\nexport const decideHotUpdate = (\n pending: PendingDevUpdate,\n check: HotUpdateCheck,\n): HotUpdateDecision => {\n if (check._tag === 'Failed') {\n return { _tag: 'Reload' };\n }\n if (check.currentHash !== check.previousHash) {\n return { _tag: 'Retry', acknowledgedClientHash: check.currentHash };\n }\n if (check.updatedModules !== null && check.updatedModules.length > 0) {\n return { _tag: 'Reload' };\n }\n return pending.rscRefresh === 'Pending'\n ? { _tag: 'Retry', acknowledgedClientHash: pending.clientHash }\n : { _tag: 'Reload' };\n};\n"],"names":["decideHotUpdate","pending","check"],"mappings":"AAmBO,MAAMA,eAAeA,GAAG,CAC7BC,SACAC;IAEA,IAAIA,MAAM,IAAI,KAAK,UAAU;QAC3B,OAAO;YAAE,MAAM;QAAS;IAC1B;IACA,IAAIA,MAAM,WAAW,KAAKA,MAAM,YAAY,EAAE;QAC5C,OAAO;YAAE,MAAM;YAAS,wBAAwBA,MAAM,WAAW;QAAC;IACpE;IACA,IAAIA,MAAM,cAAc,KAAK,QAAQA,MAAM,cAAc,CAAC,MAAM,GAAG,GAAG;QACpE,OAAO;YAAE,MAAM;QAAS;IAC1B;IACA,OAAOD,QAAQ,UAAU,KAAK,YAC1B;QAAE,MAAM;QAAS,wBAAwBA,QAAQ,UAAU;IAAC,IAC5D;QAAE,MAAM;IAAS;AACvB,EAAE"}
@@ -0,0 +1,41 @@
1
+ import { Effect } from 'effect';
2
+ import type { DevRuntimeFailure } from './runtime-failure.js';
3
+ export type { DevRuntimeFailure } from './runtime-failure.js';
4
+ export declare const DevPanelElementName = "ersc-dev-panel";
5
+ type DevPanelContent = {
6
+ readonly _tag: 'BuildFailed';
7
+ readonly diagnostics: string;
8
+ } | {
9
+ readonly _tag: 'RuntimeFailed';
10
+ readonly failures: ReadonlyArray<DevRuntimeFailure>;
11
+ };
12
+ export type DevPanelState = {
13
+ readonly _tag: 'Inactive';
14
+ } | {
15
+ readonly _tag: 'Visible';
16
+ readonly content: DevPanelContent;
17
+ } | {
18
+ readonly _tag: 'Dismissed';
19
+ readonly content: DevPanelContent;
20
+ };
21
+ export type DevPanelEvent = {
22
+ readonly _tag: 'BuildFailed';
23
+ readonly diagnostics: string;
24
+ } | {
25
+ readonly _tag: 'RuntimeFailed';
26
+ readonly failure: DevRuntimeFailure;
27
+ } | {
28
+ readonly _tag: 'Reconciled';
29
+ } | {
30
+ readonly _tag: 'Opened';
31
+ } | {
32
+ readonly _tag: 'Dismissed';
33
+ };
34
+ export declare const InitialDevPanelState: DevPanelState;
35
+ export declare const applyDevPanelEvent: (state: DevPanelState, event: DevPanelEvent) => DevPanelState;
36
+ declare function DevPanelContent({ state }: {
37
+ readonly state: DevPanelState;
38
+ }): import("react").JSX.Element | null;
39
+ export declare const makeDevPanel: Effect.Effect<{
40
+ dispatch: (event: DevPanelEvent) => Effect.Effect<void, never, never>;
41
+ }, never, import("effect/Scope").Scope>;