@bleedingdev/modern-js-renderer-solid 0.0.0-stage → 3.9.3-ultramodern.10

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 (301) hide show
  1. package/dist/esm/actions.js +282 -0
  2. package/dist/esm/application-router.js +30 -0
  3. package/dist/esm/client.js +49 -0
  4. package/dist/esm/entry-application.js +60 -0
  5. package/dist/esm/entry-client.js +24 -0
  6. package/dist/esm/federation-context.js +25 -0
  7. package/dist/esm/federation-ssr.js +92 -0
  8. package/dist/esm/federation.js +87 -0
  9. package/dist/esm/i18n/I18nProvider.js +33 -0
  10. package/dist/esm/i18n/LocalizedLink.js +52 -0
  11. package/dist/esm/i18n/context.js +3 -0
  12. package/dist/esm/i18n/index.js +8 -0
  13. package/dist/esm/i18n/languageSync.js +50 -0
  14. package/dist/esm/i18n/types.js +0 -0
  15. package/dist/esm/i18n/useI18n.js +74 -0
  16. package/dist/esm/index.js +58 -0
  17. package/dist/esm/manifest.js +150 -0
  18. package/dist/esm/route-completion.js +151 -0
  19. package/dist/esm/route-data-error.js +108 -0
  20. package/dist/esm/router-binding/Asset.js +202 -0
  21. package/dist/esm/router-binding/CatchBoundary.js +94 -0
  22. package/dist/esm/router-binding/ClientOnly.js +26 -0
  23. package/dist/esm/router-binding/HeadContent.js +8 -0
  24. package/dist/esm/router-binding/LICENSE +21 -0
  25. package/dist/esm/router-binding/Match.js +319 -0
  26. package/dist/esm/router-binding/Matches.js +124 -0
  27. package/dist/esm/router-binding/PROVENANCE.json +94 -0
  28. package/dist/esm/router-binding/RouterProvider.js +52 -0
  29. package/dist/esm/router-binding/SafeFragment.js +5 -0
  30. package/dist/esm/router-binding/ScriptOnce.js +15 -0
  31. package/dist/esm/router-binding/Scripts.js +30 -0
  32. package/dist/esm/router-binding/ScrollRestoration.js +16 -0
  33. package/dist/esm/router-binding/Transitioner.js +109 -0
  34. package/dist/esm/router-binding/awaited.js +48 -0
  35. package/dist/esm/router-binding/fileRoute.js +83 -0
  36. package/dist/esm/router-binding/flightData.js +23 -0
  37. package/dist/esm/router-binding/headContentUtils.js +168 -0
  38. package/dist/esm/router-binding/history.js +0 -0
  39. package/dist/esm/router-binding/index.js +35 -0
  40. package/dist/esm/router-binding/lazyRouteComponent.js +30 -0
  41. package/dist/esm/router-binding/link.js +387 -0
  42. package/dist/esm/router-binding/matchContext.js +7 -0
  43. package/dist/esm/router-binding/nonRouteComponentContext.js +13 -0
  44. package/dist/esm/router-binding/not-found.js +35 -0
  45. package/dist/esm/router-binding/publicMatchData.js +447 -0
  46. package/dist/esm/router-binding/registryTransfer.js +223 -0
  47. package/dist/esm/router-binding/renderRouteNotFound.js +23 -0
  48. package/dist/esm/router-binding/route.js +143 -0
  49. package/dist/esm/router-binding/router.js +14 -0
  50. package/dist/esm/router-binding/routerContext.js +3 -0
  51. package/dist/esm/router-binding/routerOptions.js +0 -0
  52. package/dist/esm/router-binding/routerStores.js +50 -0
  53. package/dist/esm/router-binding/scroll-restoration.js +13 -0
  54. package/dist/esm/router-binding/typePrimitives.js +0 -0
  55. package/dist/esm/router-binding/useBlocker.js +152 -0
  56. package/dist/esm/router-binding/useCanGoBack.js +7 -0
  57. package/dist/esm/router-binding/useLoaderData.js +8 -0
  58. package/dist/esm/router-binding/useLoaderDeps.js +8 -0
  59. package/dist/esm/router-binding/useLocation.js +14 -0
  60. package/dist/esm/router-binding/useMatch.js +28 -0
  61. package/dist/esm/router-binding/useNavigate.js +25 -0
  62. package/dist/esm/router-binding/useParams.js +11 -0
  63. package/dist/esm/router-binding/useRouteContext.js +8 -0
  64. package/dist/esm/router-binding/useRouter.js +10 -0
  65. package/dist/esm/router-binding/useRouterState.js +19 -0
  66. package/dist/esm/router-binding/useSearch.js +11 -0
  67. package/dist/esm/router-binding/utils.js +23 -0
  68. package/dist/esm/router.js +187 -0
  69. package/dist/esm-node/actions.js +263 -0
  70. package/dist/esm-node/application-router.js +30 -0
  71. package/dist/esm-node/client.js +49 -0
  72. package/dist/esm-node/entry-application.js +110 -0
  73. package/dist/esm-node/entry-client.js +24 -0
  74. package/dist/esm-node/entry-server.js +47 -0
  75. package/dist/esm-node/federation-context.js +25 -0
  76. package/dist/esm-node/federation-ssr.js +92 -0
  77. package/dist/esm-node/federation.js +87 -0
  78. package/dist/esm-node/i18n/I18nProvider.js +42 -0
  79. package/dist/esm-node/i18n/LocalizedLink.js +88 -0
  80. package/dist/esm-node/i18n/context.js +3 -0
  81. package/dist/esm-node/i18n/index.js +8 -0
  82. package/dist/esm-node/i18n/languageSync.js +50 -0
  83. package/dist/esm-node/i18n/types.js +1 -0
  84. package/dist/esm-node/i18n/useI18n.js +74 -0
  85. package/dist/esm-node/index.js +58 -0
  86. package/dist/esm-node/manifest.js +150 -0
  87. package/dist/esm-node/native-promise-serialization.js +113 -0
  88. package/dist/esm-node/plugin/compiler.js +209 -0
  89. package/dist/esm-node/plugin/create.js +236 -0
  90. package/dist/esm-node/plugin/index.js +70 -0
  91. package/dist/esm-node/plugin/profile.js +51 -0
  92. package/dist/esm-node/route-completion.js +161 -0
  93. package/dist/esm-node/route-data-error.js +108 -0
  94. package/dist/esm-node/router-binding/Asset.js +172 -0
  95. package/dist/esm-node/router-binding/CatchBoundary.js +136 -0
  96. package/dist/esm-node/router-binding/ClientOnly.js +46 -0
  97. package/dist/esm-node/router-binding/HeadContent.js +8 -0
  98. package/dist/esm-node/router-binding/LICENSE +21 -0
  99. package/dist/esm-node/router-binding/Match.js +660 -0
  100. package/dist/esm-node/router-binding/Matches.js +161 -0
  101. package/dist/esm-node/router-binding/PROVENANCE.json +94 -0
  102. package/dist/esm-node/router-binding/RouterProvider.js +88 -0
  103. package/dist/esm-node/router-binding/SafeFragment.js +5 -0
  104. package/dist/esm-node/router-binding/ScriptOnce.js +16 -0
  105. package/dist/esm-node/router-binding/Scripts.js +49 -0
  106. package/dist/esm-node/router-binding/ScrollRestoration.js +16 -0
  107. package/dist/esm-node/router-binding/Transitioner.js +109 -0
  108. package/dist/esm-node/router-binding/awaited.js +75 -0
  109. package/dist/esm-node/router-binding/fileRoute.js +83 -0
  110. package/dist/esm-node/router-binding/flightData.js +23 -0
  111. package/dist/esm-node/router-binding/headContentUtils.js +168 -0
  112. package/dist/esm-node/router-binding/history.js +1 -0
  113. package/dist/esm-node/router-binding/index.js +35 -0
  114. package/dist/esm-node/router-binding/lazyRouteComponent.js +30 -0
  115. package/dist/esm-node/router-binding/link.js +399 -0
  116. package/dist/esm-node/router-binding/matchContext.js +7 -0
  117. package/dist/esm-node/router-binding/nonRouteComponentContext.js +22 -0
  118. package/dist/esm-node/router-binding/not-found.js +49 -0
  119. package/dist/esm-node/router-binding/publicMatchData.js +447 -0
  120. package/dist/esm-node/router-binding/registryTransfer.js +223 -0
  121. package/dist/esm-node/router-binding/renderRouteNotFound.js +22 -0
  122. package/dist/esm-node/router-binding/route.js +162 -0
  123. package/dist/esm-node/router-binding/router.js +14 -0
  124. package/dist/esm-node/router-binding/routerContext.js +3 -0
  125. package/dist/esm-node/router-binding/routerOptions.js +1 -0
  126. package/dist/esm-node/router-binding/routerStores.js +50 -0
  127. package/dist/esm-node/router-binding/scroll-restoration.js +12 -0
  128. package/dist/esm-node/router-binding/typePrimitives.js +1 -0
  129. package/dist/esm-node/router-binding/useBlocker.js +152 -0
  130. package/dist/esm-node/router-binding/useCanGoBack.js +7 -0
  131. package/dist/esm-node/router-binding/useLoaderData.js +8 -0
  132. package/dist/esm-node/router-binding/useLoaderDeps.js +8 -0
  133. package/dist/esm-node/router-binding/useLocation.js +14 -0
  134. package/dist/esm-node/router-binding/useMatch.js +28 -0
  135. package/dist/esm-node/router-binding/useNavigate.js +25 -0
  136. package/dist/esm-node/router-binding/useParams.js +11 -0
  137. package/dist/esm-node/router-binding/useRouteContext.js +8 -0
  138. package/dist/esm-node/router-binding/useRouter.js +10 -0
  139. package/dist/esm-node/router-binding/useRouterState.js +19 -0
  140. package/dist/esm-node/router-binding/useSearch.js +11 -0
  141. package/dist/esm-node/router-binding/utils.js +23 -0
  142. package/dist/esm-node/router.js +187 -0
  143. package/dist/esm-node/server.js +396 -0
  144. package/dist/types/actions.d.ts +45 -0
  145. package/dist/types/application-router.d.ts +5 -0
  146. package/dist/types/client.d.ts +23 -0
  147. package/dist/types/entry-application.d.ts +10 -0
  148. package/dist/types/entry-client.d.ts +5 -0
  149. package/dist/types/entry-server.d.ts +5 -0
  150. package/dist/types/federation-context.d.ts +16 -0
  151. package/dist/types/federation-ssr.d.ts +19 -0
  152. package/dist/types/federation.d.ts +30 -0
  153. package/dist/types/i18n/I18nProvider.d.ts +21 -0
  154. package/dist/types/i18n/LocalizedLink.d.ts +15 -0
  155. package/dist/types/i18n/context.d.ts +11 -0
  156. package/dist/types/i18n/index.d.ts +9 -0
  157. package/dist/types/i18n/languageSync.d.ts +31 -0
  158. package/dist/types/i18n/types.d.ts +33 -0
  159. package/dist/types/i18n/useI18n.d.ts +24 -0
  160. package/dist/types/index.d.ts +41 -0
  161. package/dist/types/manifest.d.ts +55 -0
  162. package/dist/types/native-promise-serialization.d.ts +9 -0
  163. package/dist/types/plugin/compiler.d.ts +6 -0
  164. package/dist/types/plugin/create.d.ts +21 -0
  165. package/dist/types/plugin/index.d.ts +3 -0
  166. package/dist/types/plugin/lazy-modules.d.cts +15 -0
  167. package/dist/types/plugin/preserve-import-loader.d.cts +3 -0
  168. package/dist/types/plugin/profile.d.ts +2 -0
  169. package/dist/types/plugin/solid-loader.d.cts +2 -0
  170. package/dist/types/plugin/svg-component-template.d.cts +6 -0
  171. package/dist/types/route-completion.d.ts +21 -0
  172. package/dist/types/route-data-error.d.ts +17 -0
  173. package/dist/types/router-binding/Asset.d.ts +3 -0
  174. package/dist/types/router-binding/CatchBoundary.d.ts +13 -0
  175. package/dist/types/router-binding/ClientOnly.d.ts +31 -0
  176. package/dist/types/router-binding/HeadContent.d.ts +13 -0
  177. package/dist/types/router-binding/Match.d.ts +6 -0
  178. package/dist/types/router-binding/Matches.d.ts +26 -0
  179. package/dist/types/router-binding/RouterProvider.d.ts +11 -0
  180. package/dist/types/router-binding/SafeFragment.d.ts +2 -0
  181. package/dist/types/router-binding/ScriptOnce.d.ts +6 -0
  182. package/dist/types/router-binding/Scripts.d.ts +2 -0
  183. package/dist/types/router-binding/ScrollRestoration.d.ts +14 -0
  184. package/dist/types/router-binding/Transitioner.d.ts +2 -0
  185. package/dist/types/router-binding/awaited.d.ts +11 -0
  186. package/dist/types/router-binding/fileRoute.d.ts +54 -0
  187. package/dist/types/router-binding/flightData.d.ts +38 -0
  188. package/dist/types/router-binding/headContentUtils.d.ts +15 -0
  189. package/dist/types/router-binding/history.d.ts +8 -0
  190. package/dist/types/router-binding/index.d.ts +46 -0
  191. package/dist/types/router-binding/lazyRouteComponent.d.ts +2 -0
  192. package/dist/types/router-binding/link.d.ts +43 -0
  193. package/dist/types/router-binding/matchContext.d.ts +7 -0
  194. package/dist/types/router-binding/nonRouteComponentContext.d.ts +5 -0
  195. package/dist/types/router-binding/not-found.d.ts +11 -0
  196. package/dist/types/router-binding/publicMatchData.d.ts +19 -0
  197. package/dist/types/router-binding/registryTransfer.d.ts +49 -0
  198. package/dist/types/router-binding/renderRouteNotFound.d.ts +11 -0
  199. package/dist/types/router-binding/route.d.ts +105 -0
  200. package/dist/types/router-binding/router.d.ts +70 -0
  201. package/dist/types/router-binding/routerContext.d.ts +3 -0
  202. package/dist/types/router-binding/routerOptions.d.ts +6 -0
  203. package/dist/types/router-binding/routerStores.d.ts +2 -0
  204. package/dist/types/router-binding/scroll-restoration.d.ts +2 -0
  205. package/dist/types/router-binding/typePrimitives.d.ts +10 -0
  206. package/dist/types/router-binding/useBlocker.d.ts +70 -0
  207. package/dist/types/router-binding/useCanGoBack.d.ts +2 -0
  208. package/dist/types/router-binding/useLoaderData.d.ts +8 -0
  209. package/dist/types/router-binding/useLoaderDeps.d.ts +8 -0
  210. package/dist/types/router-binding/useLocation.d.ts +7 -0
  211. package/dist/types/router-binding/useMatch.d.ts +10 -0
  212. package/dist/types/router-binding/useNavigate.d.ts +5 -0
  213. package/dist/types/router-binding/useParams.d.ts +9 -0
  214. package/dist/types/router-binding/useRouteContext.d.ts +4 -0
  215. package/dist/types/router-binding/useRouter.d.ts +4 -0
  216. package/dist/types/router-binding/useRouterState.d.ts +8 -0
  217. package/dist/types/router-binding/useSearch.d.ts +9 -0
  218. package/dist/types/router-binding/utils.d.ts +25 -0
  219. package/dist/types/router.d.ts +31 -0
  220. package/dist/types/server.d.ts +47 -0
  221. package/package.json +130 -4
  222. package/src/actions.tsx +441 -0
  223. package/src/application-router.tsx +47 -0
  224. package/src/client.ts +106 -0
  225. package/src/entry-application.tsx +73 -0
  226. package/src/entry-client.tsx +49 -0
  227. package/src/entry-server.tsx +85 -0
  228. package/src/federation-context.ts +47 -0
  229. package/src/federation-ssr.ts +136 -0
  230. package/src/federation.tsx +197 -0
  231. package/src/i18n/I18nProvider.tsx +54 -0
  232. package/src/i18n/LocalizedLink.tsx +83 -0
  233. package/src/i18n/context.ts +13 -0
  234. package/src/i18n/index.ts +31 -0
  235. package/src/i18n/languageSync.ts +113 -0
  236. package/src/i18n/types.ts +35 -0
  237. package/src/i18n/useI18n.ts +121 -0
  238. package/src/index.ts +41 -0
  239. package/src/manifest.ts +337 -0
  240. package/src/native-promise-serialization.ts +167 -0
  241. package/src/plugin/compiler.ts +320 -0
  242. package/src/plugin/create.ts +271 -0
  243. package/src/plugin/index.ts +69 -0
  244. package/src/plugin/lazy-modules.cjs +146 -0
  245. package/src/plugin/preserve-import-loader.cjs +46 -0
  246. package/src/plugin/profile.ts +42 -0
  247. package/src/plugin/solid-loader.cjs +83 -0
  248. package/src/plugin/svg-component-template.cjs +19 -0
  249. package/src/route-completion.tsx +226 -0
  250. package/src/route-data-error.ts +175 -0
  251. package/src/router-binding/Asset.tsx +284 -0
  252. package/src/router-binding/CatchBoundary.tsx +130 -0
  253. package/src/router-binding/ClientOnly.tsx +76 -0
  254. package/src/router-binding/HeadContent.tsx +23 -0
  255. package/src/router-binding/LICENSE +21 -0
  256. package/src/router-binding/Match.tsx +397 -0
  257. package/src/router-binding/Matches.tsx +242 -0
  258. package/src/router-binding/PROVENANCE.json +94 -0
  259. package/src/router-binding/RouterProvider.tsx +128 -0
  260. package/src/router-binding/SafeFragment.tsx +5 -0
  261. package/src/router-binding/ScriptOnce.tsx +23 -0
  262. package/src/router-binding/Scripts.tsx +44 -0
  263. package/src/router-binding/ScrollRestoration.tsx +49 -0
  264. package/src/router-binding/Transitioner.tsx +177 -0
  265. package/src/router-binding/awaited.tsx +71 -0
  266. package/src/router-binding/fileRoute.ts +268 -0
  267. package/src/router-binding/flightData.ts +90 -0
  268. package/src/router-binding/headContentUtils.tsx +292 -0
  269. package/src/router-binding/history.ts +9 -0
  270. package/src/router-binding/index.tsx +315 -0
  271. package/src/router-binding/lazyRouteComponent.tsx +70 -0
  272. package/src/router-binding/link.tsx +865 -0
  273. package/src/router-binding/matchContext.tsx +15 -0
  274. package/src/router-binding/nonRouteComponentContext.tsx +23 -0
  275. package/src/router-binding/not-found.tsx +65 -0
  276. package/src/router-binding/publicMatchData.ts +674 -0
  277. package/src/router-binding/registryTransfer.ts +400 -0
  278. package/src/router-binding/renderRouteNotFound.tsx +53 -0
  279. package/src/router-binding/route.tsx +665 -0
  280. package/src/router-binding/router.ts +123 -0
  281. package/src/router-binding/routerContext.tsx +6 -0
  282. package/src/router-binding/routerOptions.ts +26 -0
  283. package/src/router-binding/routerStores.ts +85 -0
  284. package/src/router-binding/scroll-restoration.tsx +15 -0
  285. package/src/router-binding/typePrimitives.ts +74 -0
  286. package/src/router-binding/useBlocker.tsx +359 -0
  287. package/src/router-binding/useCanGoBack.ts +9 -0
  288. package/src/router-binding/useLoaderData.tsx +51 -0
  289. package/src/router-binding/useLoaderDeps.tsx +46 -0
  290. package/src/router-binding/useLocation.tsx +43 -0
  291. package/src/router-binding/useMatch.tsx +111 -0
  292. package/src/router-binding/useNavigate.tsx +45 -0
  293. package/src/router-binding/useParams.tsx +70 -0
  294. package/src/router-binding/useRouteContext.ts +30 -0
  295. package/src/router-binding/useRouter.tsx +17 -0
  296. package/src/router-binding/useRouterState.tsx +50 -0
  297. package/src/router-binding/useSearch.tsx +70 -0
  298. package/src/router-binding/utils.ts +59 -0
  299. package/src/router.ts +376 -0
  300. package/src/server.ts +645 -0
  301. package/README.md +0 -3
@@ -0,0 +1,150 @@
1
+ import { nativeModuleManifestFilename, readRendererIdentity } from "@modern-js/renderer-core/identity";
2
+ const SOLID_COMPILER_VERSION = "2.0.0-rc.15";
3
+ function solidModuleManifestFilename(entryName) {
4
+ return nativeModuleManifestFilename("solid", entryName);
5
+ }
6
+ function requireRecord(value, description) {
7
+ if (!value || "object" != typeof value || ![
8
+ Object.prototype,
9
+ null
10
+ ].includes(Object.getPrototypeOf(value))) throw new Error(`Invalid Solid module manifest ${description}`);
11
+ for (const key of Reflect.ownKeys(value)){
12
+ const descriptor = Object.getOwnPropertyDescriptor(value, key);
13
+ if ("string" != typeof key || !descriptor || !("value" in descriptor)) throw new Error(`Invalid Solid module manifest ${description}: data properties are required`);
14
+ }
15
+ return value;
16
+ }
17
+ function requireArray(value, description) {
18
+ if (!Array.isArray(value) || Object.getPrototypeOf(value) !== Array.prototype) throw new Error(`Invalid Solid module manifest ${description}: an array is required`);
19
+ for (const key of Reflect.ownKeys(value)){
20
+ const descriptor = Object.getOwnPropertyDescriptor(value, key);
21
+ if ("string" != typeof key || "length" !== key && !/^(0|[1-9]\d*)$/.test(key) || !descriptor || !("value" in descriptor)) throw new Error(`Invalid Solid module manifest ${description}: array data properties are required`);
22
+ }
23
+ }
24
+ function requireStrings(value, description) {
25
+ requireArray(value, description);
26
+ for(let index = 0; index < value.length; index++)if ("string" != typeof value[index] || !value[index]) throw new Error(`Invalid Solid module manifest ${description}: nonempty strings are required`);
27
+ }
28
+ function validateAssetUrl(base, file) {
29
+ const prefix = base || "/";
30
+ const joined = /^(?:[a-z][a-z0-9+.-]*:)?\/\//i.test(file) ? file : `${prefix.endsWith("/") ? prefix : `${prefix}/`}${file.startsWith("/") ? file.slice(1) : file}`;
31
+ try {
32
+ new URL(joined, "https://manifest.invalid/");
33
+ } catch (cause) {
34
+ throw new Error(`Invalid Solid module manifest asset URL: ${file}`, {
35
+ cause
36
+ });
37
+ }
38
+ }
39
+ function validatePreload(value, base) {
40
+ const link = requireRecord(value, "preload");
41
+ if (![
42
+ "fetch",
43
+ "font",
44
+ "image",
45
+ "script",
46
+ "style",
47
+ "track"
48
+ ].includes(link.as)) throw new Error("Invalid Solid module manifest preload destination");
49
+ if (void 0 !== link.href) {
50
+ if ("string" != typeof link.href || !link.href) throw new Error("Invalid Solid module manifest preload href");
51
+ validateAssetUrl(base, link.href);
52
+ }
53
+ if ("image" === link.as) {
54
+ if (void 0 !== link.imagesrcset && ("string" != typeof link.imagesrcset || !link.imagesrcset)) throw new Error("Invalid Solid module manifest image preload source set");
55
+ if (void 0 === link.href && void 0 === link.imagesrcset) throw new Error("Invalid Solid module manifest image preload source");
56
+ if (void 0 !== link.imagesizes && "string" != typeof link.imagesizes) throw new Error("Invalid Solid module manifest image preload sizes");
57
+ } else if (void 0 === link.href || void 0 !== link.imagesrcset || void 0 !== link.imagesizes) throw new Error("Invalid Solid module manifest preload source");
58
+ for (const key of [
59
+ "type",
60
+ "integrity",
61
+ "media"
62
+ ])if (void 0 !== link[key] && "string" != typeof link[key]) throw new Error(`Invalid Solid module manifest preload ${key}`);
63
+ const enumerated = {
64
+ crossorigin: [
65
+ "",
66
+ true,
67
+ "anonymous",
68
+ "use-credentials"
69
+ ],
70
+ fetchpriority: [
71
+ "high",
72
+ "low",
73
+ "auto"
74
+ ],
75
+ referrerpolicy: [
76
+ "no-referrer",
77
+ "no-referrer-when-downgrade",
78
+ "origin",
79
+ "origin-when-cross-origin",
80
+ "same-origin",
81
+ "strict-origin",
82
+ "strict-origin-when-cross-origin",
83
+ "unsafe-url"
84
+ ]
85
+ };
86
+ for (const [key, values] of Object.entries(enumerated))if (void 0 !== link[key] && !values.includes(link[key])) throw new Error(`Invalid Solid module manifest preload ${key}`);
87
+ }
88
+ function assertCurrentIdentity(manifest, expectedIdentity) {
89
+ if (!manifest.rendererIdentity || "solid" !== expectedIdentity.renderer) throw new Error("Solid module manifest requires the current Solid application build identity.");
90
+ try {
91
+ readRendererIdentity(manifest.rendererIdentity, expectedIdentity);
92
+ } catch (cause) {
93
+ throw new Error("Stale Solid module manifest identity. Serve the manifest and hydration assets from the same application build.", {
94
+ cause
95
+ });
96
+ }
97
+ }
98
+ function readSolidModuleManifest(value, expectedIdentity) {
99
+ const manifest = requireRecord(value, "envelope");
100
+ if (1 !== manifest.schemaVersion || "solid" !== manifest.renderer || manifest.compilerVersion !== SOLID_COMPILER_VERSION) throw new Error(`Solid module manifest compiler ABI mismatch. Rebuild with @solidjs/compiler ${SOLID_COMPILER_VERSION}.`);
101
+ assertCurrentIdentity(manifest, expectedIdentity);
102
+ if (!manifest.modules || "object" != typeof manifest.modules || Array.isArray(manifest.modules)) throw new Error("Solid module manifest has no module inventory. Rebuild the application.");
103
+ const modules = requireRecord(manifest.modules, "module inventory");
104
+ if (void 0 !== modules._base && "string" != typeof modules._base) throw new Error("Invalid Solid module manifest asset base");
105
+ const base = modules._base;
106
+ for (const [key, value] of Object.entries(modules)){
107
+ if ("_base" === key) continue;
108
+ const chunk = requireRecord(value, `chunk ${key}`);
109
+ if ("string" != typeof chunk.file || !chunk.file) throw new Error(`Invalid Solid module manifest chunk ${key}: a nonempty file is required`);
110
+ validateAssetUrl(base, chunk.file);
111
+ for (const field of [
112
+ "css",
113
+ "imports"
114
+ ])if (void 0 !== chunk[field]) requireStrings(chunk[field], `${key}.${field}`);
115
+ for (const file of chunk.css ?? [])validateAssetUrl(base, file);
116
+ if (void 0 !== chunk.isEntry && "boolean" != typeof chunk.isEntry) throw new Error(`Invalid Solid module manifest chunk ${key}: isEntry must be boolean`);
117
+ if (void 0 !== chunk.preloads) {
118
+ requireArray(chunk.preloads, `${key}.preloads`);
119
+ for (const preload of chunk.preloads)validatePreload(preload, base);
120
+ }
121
+ }
122
+ for (const [key, value] of Object.entries(modules))if ("_base" !== key) {
123
+ for (const dependency of value.imports ?? [])if ("_base" === dependency || !Object.hasOwn(modules, dependency)) throw new Error(`Solid module manifest chunk ${key} imports missing own chunk ${dependency}`);
124
+ }
125
+ return manifest;
126
+ }
127
+ const validatedManifests = new WeakMap();
128
+ function validateSolidModuleManifest(value, expectedIdentity, requiredModuleKeys = []) {
129
+ if (!value || "object" != typeof value) throw new Error("Missing Solid module manifest. Rebuild the application before SSR or hydration.");
130
+ let manifest = validatedManifests.get(value);
131
+ if (manifest) assertCurrentIdentity(manifest, expectedIdentity);
132
+ else {
133
+ manifest = readSolidModuleManifest(value, expectedIdentity);
134
+ validatedManifests.set(value, manifest);
135
+ }
136
+ for (const key of requiredModuleKeys)if ("_base" === key || !Object.hasOwn(manifest.modules, key)) throw new Error(`Solid module manifest is missing ${key}. Rebuild the application before SSR or hydration.`);
137
+ return manifest;
138
+ }
139
+ const compilerArtifacts = {
140
+ clientManifestFile: solidModuleManifestFilename,
141
+ async validateClientManifest (value, identity) {
142
+ return {
143
+ nativeManifest: validateSolidModuleManifest(value, identity)
144
+ };
145
+ },
146
+ isMutableDevelopmentAsset (filename, entryNames) {
147
+ return entryNames.some((entry)=>filename === solidModuleManifestFilename(entry));
148
+ }
149
+ };
150
+ export { SOLID_COMPILER_VERSION, compilerArtifacts, solidModuleManifestFilename, validateSolidModuleManifest };
@@ -0,0 +1,113 @@
1
+ import { createPlugin } from "@solidjs/web/serialization";
2
+ const nativeThen = Promise.prototype.then;
3
+ class ResolverToken {
4
+ }
5
+ class SettlementToken {
6
+ constructor(resolver, value, fulfilled){
7
+ this.resolver = resolver;
8
+ this.value = value;
9
+ this.fulfilled = fulfilled;
10
+ }
11
+ }
12
+ function mintNativeResolver() {
13
+ let accept;
14
+ let reject;
15
+ const promise = new Promise((resolve, fail)=>{
16
+ accept = resolve;
17
+ reject = fail;
18
+ });
19
+ const resolver = {
20
+ p: promise,
21
+ s (value) {
22
+ accept(value);
23
+ promise.s = 1;
24
+ promise.v = value;
25
+ },
26
+ f (value) {
27
+ reject(value);
28
+ promise.s = 2;
29
+ promise.v = value;
30
+ }
31
+ };
32
+ Promise.prototype.then.call(promise, void 0, ()=>void 0);
33
+ return resolver;
34
+ }
35
+ function requireStreamingHydration() {
36
+ throw new Error("The Solid native Promise serializer only supports streaming SSR hydration.");
37
+ }
38
+ const resolverPlugin = createPlugin({
39
+ tag: "ultramodern/solid/native-promise-resolver-v1",
40
+ test: (value)=>value instanceof ResolverToken,
41
+ parse: {
42
+ sync: requireStreamingHydration,
43
+ async: requireStreamingHydration,
44
+ stream: ()=>({})
45
+ },
46
+ serialize: ()=>`(${mintNativeResolver.toString()})()`,
47
+ deserialize: requireStreamingHydration
48
+ });
49
+ const settlementPlugin = createPlugin({
50
+ tag: "ultramodern/solid/native-promise-settlement-v1",
51
+ test: (value)=>value instanceof SettlementToken,
52
+ parse: {
53
+ sync: requireStreamingHydration,
54
+ async: requireStreamingHydration,
55
+ stream: (value, context)=>({
56
+ resolver: context.parse(value.resolver),
57
+ value: context.parse(value.value),
58
+ fulfilled: context.parse(value.fulfilled)
59
+ })
60
+ },
61
+ serialize: (node, context)=>`(${context.serialize(node.resolver)})[${context.serialize(node.fulfilled)}?"s":"f"](${context.serialize(node.value)})`,
62
+ deserialize: requireStreamingHydration
63
+ });
64
+ const nativePromiseSerializationPlugin = createPlugin({
65
+ tag: "ultramodern/solid/native-promise-v1",
66
+ extends: [
67
+ resolverPlugin,
68
+ settlementPlugin
69
+ ],
70
+ test: (value)=>value instanceof Promise,
71
+ parse: {
72
+ sync: requireStreamingHydration,
73
+ async: requireStreamingHydration,
74
+ stream (value, context) {
75
+ const resolver = new ResolverToken();
76
+ const node = context.parse(resolver);
77
+ context.pushPendingState();
78
+ let pending = {
79
+ context,
80
+ resolver
81
+ };
82
+ context.addCleanup(()=>{
83
+ pending = void 0;
84
+ });
85
+ const settle = (result, fulfilled)=>{
86
+ const current = pending;
87
+ if (!current) return;
88
+ pending = void 0;
89
+ try {
90
+ if (!current.context.isAlive()) return;
91
+ const settlement = current.context.parseWithError(new SettlementToken(current.resolver, result, fulfilled));
92
+ if (settlement && current.context.isAlive()) current.context.onParse(settlement);
93
+ } finally{
94
+ if (current.context.isAlive()) current.context.popPendingState();
95
+ }
96
+ };
97
+ try {
98
+ const bridge = nativeThen.call(value, (result)=>settle(result, true), (reason)=>settle(reason, false));
99
+ nativeThen.call(bridge, void 0, ()=>void 0);
100
+ } catch (error) {
101
+ pending = void 0;
102
+ if (context.isAlive()) context.popPendingState();
103
+ throw error;
104
+ }
105
+ return {
106
+ resolver: node
107
+ };
108
+ }
109
+ },
110
+ serialize: (node, context)=>`(${context.serialize(node.resolver)}).p`,
111
+ deserialize: requireStreamingHydration
112
+ });
113
+ export { nativePromiseSerializationPlugin };
@@ -0,0 +1,209 @@
1
+ import node_fs from "node:fs";
2
+ import { createRequire } from "node:module";
3
+ import node_path from "node:path";
4
+ import { fileURLToPath } from "node:url";
5
+ import { identityCacheKey } from "@modern-js/renderer-core";
6
+ import { SOLID_COMPILER_VERSION, solidModuleManifestFilename } from "../manifest.js";
7
+ const nativeDependencySources = [
8
+ /[/\\]node_modules[/\\]\.modern-js[/\\]solid[/\\]/u,
9
+ /[/\\]node_modules[/\\]@modern-js[/\\]renderer-solid[/\\]/u
10
+ ];
11
+ function pluginSourceDirectory() {
12
+ let directory = node_path.dirname(fileURLToPath(import.meta.url));
13
+ while(true){
14
+ const manifest = node_path.join(directory, 'package.json');
15
+ const compiler = node_path.join(directory, 'src/plugin');
16
+ if (node_fs.existsSync(manifest) && node_fs.existsSync(node_path.join(compiler, 'solid-loader.cjs'))) return compiler;
17
+ const parent = node_path.dirname(directory);
18
+ if (parent === directory) throw new Error('Cannot locate the UltraModern Solid compiler package');
19
+ directory = parent;
20
+ }
21
+ }
22
+ function pluginSolidRenderer(options) {
23
+ return {
24
+ name: 'ultramodern:solid:compiler',
25
+ setup (api) {
26
+ if ('function' != typeof options?.rendererIdentities) throw new Error('Solid compiler requires identities from the native UltraModern infrastructure. Select renderer: solid through defineConfig.');
27
+ const directory = pluginSourceDirectory();
28
+ const require = createRequire(node_path.join(directory, 'index.cjs'));
29
+ const { collectLazyModules } = require('./lazy-modules.cjs');
30
+ const projectRoot = api.context.rootPath;
31
+ api.modifyRsbuildConfig((config)=>{
32
+ config.html ??= {};
33
+ config.html.scriptLoading = 'module';
34
+ config.source ??= {};
35
+ config.source.include = [
36
+ ...config.source.include ?? [],
37
+ ...nativeDependencySources
38
+ ];
39
+ return config;
40
+ });
41
+ api.modifyRspackConfig((config, { environment, isProd, rspack })=>{
42
+ const target = environment.config.output.target;
43
+ const ssrWorker = environment.name === options.workerEnvironmentName;
44
+ const client = 'web' === target && !ssrWorker;
45
+ const worker = 'web-worker' === target || ssrWorker;
46
+ const server = !client;
47
+ config.resolve ??= {};
48
+ config.resolve.conditionNames = [
49
+ 'solid',
50
+ client ? 'browser' : worker ? 'worker' : 'node',
51
+ ...isProd ? [] : [
52
+ 'development'
53
+ ],
54
+ 'import',
55
+ 'default'
56
+ ];
57
+ const sourceExtensions = (config.resolve.extensions ?? [
58
+ '.tsx',
59
+ '.ts',
60
+ '.jsx',
61
+ '.js'
62
+ ]).filter((extension)=>[
63
+ '.tsx',
64
+ '.ts',
65
+ '.jsx',
66
+ '.js'
67
+ ].includes(extension));
68
+ config.module ??= {};
69
+ config.module.rules ??= [];
70
+ config.module.rules.unshift({
71
+ test: /\.[jt]sx?$/u,
72
+ exclude: /\.d\.[cm]?ts$/u,
73
+ include: (filename)=>node_path.isAbsolute(filename) && (!filename.includes(`${node_path.sep}node_modules${node_path.sep}`) || nativeDependencySources.some((source)=>source.test(filename))),
74
+ enforce: 'pre',
75
+ use: [
76
+ {
77
+ loader: node_path.join(directory, 'solid-loader.cjs'),
78
+ options: {
79
+ projectRoot,
80
+ server,
81
+ isProd,
82
+ sourceExtensions
83
+ }
84
+ }
85
+ ]
86
+ });
87
+ if (!client) return config;
88
+ config.module.rules.unshift({
89
+ test: /[/\\]@solidjs[/\\]web[/\\]dist[/\\]web(?:\.dev)?\.js$/u,
90
+ enforce: 'pre',
91
+ use: [
92
+ node_path.join(directory, 'preserve-import-loader.cjs')
93
+ ]
94
+ });
95
+ config.output = {
96
+ ...config.output,
97
+ module: true,
98
+ chunkFormat: 'module',
99
+ chunkLoading: 'import',
100
+ iife: false,
101
+ scriptType: 'module',
102
+ library: {
103
+ type: 'module'
104
+ }
105
+ };
106
+ config.optimization ??= {};
107
+ config.optimization.runtimeChunk = {
108
+ name: 'runtime'
109
+ };
110
+ let currentDiscovery;
111
+ const originalEntry = config.entry;
112
+ config.entry = async ()=>{
113
+ const discovery = currentDiscovery;
114
+ if (!discovery) throw new Error('Solid lazy discovery requires an active Rspack compilation');
115
+ const entries = 'function' == typeof originalEntry ? await originalEntry() : originalEntry;
116
+ if (!entries || 'object' != typeof entries || Array.isArray(entries)) throw new Error('Solid lazy modules require named application entries');
117
+ const entryDirectories = Object.values(entries).flatMap((entry)=>{
118
+ const imports = 'object' != typeof entry || Array.isArray(entry) ? entry : entry.import;
119
+ return (Array.isArray(imports) ? imports : [
120
+ imports
121
+ ]).filter((file)=>'string' == typeof file && /\.[jt]sx?$/u.test(file)).map((file)=>node_path.dirname(node_path.resolve(projectRoot, file)));
122
+ });
123
+ discovery.applicationEntries = Object.keys(entries);
124
+ for (const directory of entryDirectories)discovery.compilation.contextDependencies.add(directory);
125
+ try {
126
+ discovery.modules = collectLazyModules(projectRoot, entryDirectories, sourceExtensions, {
127
+ files: discovery.compilation.fileDependencies,
128
+ contexts: discovery.compilation.contextDependencies,
129
+ missing: discovery.compilation.missingDependencies
130
+ });
131
+ } catch (error) {
132
+ discovery.failed = true;
133
+ discovery.modules = [];
134
+ discovery.compilation.errors.push(error instanceof Error ? error : new Error(String(error)));
135
+ return entries;
136
+ }
137
+ const next = {
138
+ ...entries
139
+ };
140
+ for (const module of discovery.modules){
141
+ if (Object.hasOwn(next, module.entryName)) throw new Error(`Reserved Solid lazy entry ${module.entryName} conflicts with an application entry`);
142
+ next[module.entryName] = {
143
+ import: module.request
144
+ };
145
+ }
146
+ return next;
147
+ };
148
+ config.plugins ??= [];
149
+ config.plugins.push({
150
+ apply (compiler) {
151
+ compiler.hooks.thisCompilation.tap('UltraModernSolidModuleManifest', (compilation)=>{
152
+ const discovery = {
153
+ compilation,
154
+ modules: [],
155
+ applicationEntries: [],
156
+ failed: false
157
+ };
158
+ currentDiscovery = discovery;
159
+ compilation.contextDependencies.add(node_path.join(projectRoot, 'src'));
160
+ compilation.hooks.processAssets.tap({
161
+ name: 'UltraModernSolidModuleManifest',
162
+ stage: rspack.Compilation.PROCESS_ASSETS_STAGE_SUMMARIZE
163
+ }, ()=>{
164
+ if (discovery.failed || compilation.errors.length > 0) return;
165
+ const assets = {};
166
+ const publicPath = compilation.outputOptions.publicPath;
167
+ if ('string' == typeof publicPath && 'auto' !== publicPath) assets._base = publicPath;
168
+ for (const module of discovery.modules){
169
+ const entry = compilation.entrypoints.get(module.entryName);
170
+ const files = entry?.getFiles() ?? [];
171
+ const chunk = entry?.getEntrypointChunk();
172
+ const entryFiles = chunk ? [
173
+ ...chunk.files
174
+ ] : [];
175
+ const file = entryFiles.find((asset)=>/\.(?:m)?js$/u.test(asset));
176
+ if (!file) throw new Error(`Solid lazy module ${module.key} has no native ESM entry asset`);
177
+ const css = files.filter((asset)=>/\.css$/u.test(asset));
178
+ assets[module.key] = {
179
+ file,
180
+ ...css.length ? {
181
+ css
182
+ } : {}
183
+ };
184
+ }
185
+ const identities = options.rendererIdentities();
186
+ if (!identities || 'object' != typeof identities || Array.isArray(identities)) throw new Error('Solid compiler requires the current native application entry identity map');
187
+ for (const entryName of discovery.applicationEntries){
188
+ const rendererIdentity = identities[entryName];
189
+ if (!rendererIdentity || 'solid' !== rendererIdentity.renderer || rendererIdentity.entryName !== entryName) throw new Error(`Solid compiler requires the current source-build identity for entry ${entryName}`);
190
+ identityCacheKey(rendererIdentity);
191
+ const manifest = {
192
+ schemaVersion: 1,
193
+ renderer: 'solid',
194
+ compilerVersion: SOLID_COMPILER_VERSION,
195
+ rendererIdentity,
196
+ modules: assets
197
+ };
198
+ compilation.emitAsset(solidModuleManifestFilename(entryName), new rspack.sources.RawSource(JSON.stringify(manifest, null, 2)));
199
+ }
200
+ });
201
+ });
202
+ }
203
+ });
204
+ return config;
205
+ });
206
+ }
207
+ };
208
+ }
209
+ export { pluginSolidRenderer, pluginSourceDirectory };