@wular/pnext 0.0.4 → 0.0.7

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 (395) hide show
  1. package/README.md +22 -16
  2. package/bin/pnext +6 -1
  3. package/config/lint/base.js +7 -7
  4. package/config/ts/base.json +2 -4
  5. package/config/ts/react.json +2 -6
  6. package/package.json +23 -2
  7. package/reference/compat.md +87 -22
  8. package/reference/config.md +40 -93
  9. package/reference/css.md +42 -33
  10. package/reference/dev.md +26 -33
  11. package/reference/env.md +18 -20
  12. package/reference/getting-started.md +132 -0
  13. package/reference/metadata.md +31 -46
  14. package/reference/navigation.md +65 -105
  15. package/reference/performance.md +21 -142
  16. package/reference/rendering.md +78 -75
  17. package/reference/routing.md +97 -107
  18. package/reference/typegen.md +27 -29
  19. package/src/api/cache.ts +36 -37
  20. package/src/api/client-cache.ts +2 -2
  21. package/src/api/client-navigation.ts +121 -114
  22. package/src/api/dynamic.tsx +58 -55
  23. package/src/api/link.tsx +52 -53
  24. package/src/api/navigation.ts +59 -58
  25. package/src/api/server.ts +152 -144
  26. package/src/api/suspense.ts +4 -4
  27. package/src/cli/adapters/vercel-warm.ts +126 -121
  28. package/src/cli/adapters/vercel.ts +437 -443
  29. package/src/cli/analyze.ts +333 -144
  30. package/src/cli/{named-bin.ts → boot/named-bin.ts} +37 -37
  31. package/src/cli/{boot-trace.ts → boot/trace.ts} +10 -10
  32. package/src/cli/build.ts +976 -978
  33. package/src/cli/create.ts +72 -64
  34. package/src/cli/dev.ts +116 -116
  35. package/src/cli/index.ts +94 -85
  36. package/src/cli/migrate/package-json.ts +73 -71
  37. package/src/cli/migrate/report.ts +32 -33
  38. package/src/cli/migrate/{index.ts → run.ts} +48 -49
  39. package/src/cli/migrate/scan.ts +46 -46
  40. package/src/cli/migrate/spinner.ts +9 -9
  41. package/src/cli/migrate/tsconfig.ts +35 -35
  42. package/src/cli/{server-entry.ts → serve/entry.ts} +57 -57
  43. package/src/cli/{request-pipeline.ts → serve/pipeline.ts} +386 -394
  44. package/src/cli/{serve-ui.ts → serve/ui.ts} +47 -47
  45. package/src/cli/start.ts +65 -66
  46. package/src/{typegen.ts → cli/typegen.ts} +59 -59
  47. package/src/client/build.ts +802 -768
  48. package/src/client/chunk-fold.ts +245 -240
  49. package/src/client/{paths.ts → chunk-name.ts} +6 -6
  50. package/src/client/entry.ts +162 -147
  51. package/src/client/prebuilt.ts +231 -223
  52. package/src/client/profile.ts +29 -29
  53. package/src/client/react-compiler.ts +20 -15
  54. package/src/client/{compat-surface.ts → react-tier.ts} +64 -64
  55. package/src/client/reference-stub.ts +51 -51
  56. package/src/client/reference.ts +19 -19
  57. package/src/{api → client}/router/events.ts +32 -17
  58. package/src/{api → client}/router/history.ts +16 -16
  59. package/src/{api → client}/router/hub.ts +52 -53
  60. package/src/{api/router.ts → client/router/index.ts} +61 -60
  61. package/src/{api → client}/router/policies.ts +24 -24
  62. package/src/{api → client}/router/runtime.ts +2022 -1995
  63. package/src/{api → client}/router/types.ts +98 -98
  64. package/src/compat/actions/client-plugin.ts +42 -43
  65. package/src/compat/actions/client-stub.ts +14 -14
  66. package/src/compat/actions/{action-client.ts → client.ts} +194 -193
  67. package/src/compat/actions/config.ts +63 -64
  68. package/src/compat/actions/detect.ts +68 -68
  69. package/src/compat/actions/discovery.ts +105 -105
  70. package/src/compat/actions/{action-dispatch.ts → dispatch.ts} +277 -274
  71. package/src/compat/actions/early-submit.ts +1 -1
  72. package/src/compat/actions/endpoint.ts +198 -198
  73. package/src/compat/actions/extensions.ts +811 -0
  74. package/src/compat/actions/flight.ts +23 -23
  75. package/src/compat/actions/form-state.ts +34 -34
  76. package/src/compat/actions/hoist.ts +382 -236
  77. package/src/compat/actions/ids.ts +7 -12
  78. package/src/compat/actions/index.ts +8 -8
  79. package/src/compat/actions/instances.ts +46 -46
  80. package/src/compat/actions/origin.ts +47 -48
  81. package/src/compat/actions/protocol.ts +22 -22
  82. package/src/compat/actions/registry.ts +19 -19
  83. package/src/compat/{misc/action-return.ts → actions/return.ts} +60 -57
  84. package/src/compat/actions/rewrite.ts +125 -125
  85. package/src/compat/actions/{action-router.ts → router.ts} +10 -10
  86. package/src/compat/actions/serve.ts +132 -136
  87. package/src/compat/actions/server-tag.ts +4 -4
  88. package/src/compat/actions/{action-shared.ts → shared.ts} +34 -34
  89. package/src/compat/actions/unrecognized-error.ts +4 -4
  90. package/src/compat/{index.ts → aliases.ts} +112 -109
  91. package/src/compat/bundler/bun-externals.ts +18 -18
  92. package/src/compat/bundler/cjs-exports.ts +271 -223
  93. package/src/compat/bundler/config.ts +116 -111
  94. package/src/compat/bundler/externals.ts +12 -12
  95. package/src/compat/bundler/import-meta-url.ts +19 -19
  96. package/src/compat/bundler/modularize-imports.ts +36 -33
  97. package/src/compat/bundler/new-url-asset.ts +22 -24
  98. package/src/compat/bundler/optimize-package-imports.ts +111 -107
  99. package/src/compat/bundler/polyfill.ts +28 -28
  100. package/src/compat/bundler/react-compiler.ts +35 -29
  101. package/src/compat/bundler/react-profiler.tsx +11 -11
  102. package/src/compat/bundler/relay-transform.ts +48 -47
  103. package/src/compat/bundler/require-context.ts +119 -113
  104. package/src/compat/bundler/resolve-extensions.ts +19 -19
  105. package/src/compat/bundler/source-cache.ts +25 -25
  106. package/src/compat/bundler/static-imports.ts +7 -7
  107. package/src/compat/bundler/symlink-imports.ts +46 -46
  108. package/src/compat/bundler/tsconfig-paths.ts +13 -15
  109. package/src/compat/bundler/wasm.ts +58 -60
  110. package/src/compat/bundler/webpack-loaders.ts +254 -241
  111. package/src/compat/bundler/worker.ts +101 -104
  112. package/src/compat/cache/build-flags.ts +29 -29
  113. package/src/compat/cache/build-prerender-errors.ts +40 -44
  114. package/src/compat/cache/custom-handler.ts +60 -53
  115. package/src/compat/cache/fetch-patch.ts +240 -240
  116. package/src/compat/cache/handler.ts +27 -31
  117. package/src/compat/cache/modern-handler.ts +148 -126
  118. package/src/compat/cache/resume-data-cache.ts +47 -45
  119. package/src/compat/cache/revalidate.ts +233 -232
  120. package/src/compat/cache/runtime-error.ts +35 -35
  121. package/src/compat/cache/use-cache-transform.ts +442 -417
  122. package/src/compat/cache/use-cache.ts +650 -614
  123. package/src/compat/cache-control.ts +140 -142
  124. package/src/compat/client/base-path.ts +21 -20
  125. package/src/compat/client/css-order.ts +18 -18
  126. package/src/compat/client/errors/bare-boundary.ts +11 -11
  127. package/src/compat/client/errors/control-flow.ts +23 -23
  128. package/src/compat/client/errors/error-boundary.ts +61 -61
  129. package/src/compat/client/errors/global-error.ts +101 -91
  130. package/src/compat/client/errors/install.ts +71 -72
  131. package/src/compat/client/errors/lazy.ts +23 -23
  132. package/src/compat/client/errors/primitive-throw.ts +47 -45
  133. package/src/compat/client/errors/soft-refresh.ts +4 -4
  134. package/src/compat/client/link-status.ts +33 -33
  135. package/src/compat/client/{nav-compat-runtime.ts → nav-runtime.ts} +20 -20
  136. package/src/compat/client/{nav-compat.ts → nav.ts} +12 -13
  137. package/src/compat/client/navigation-scroll.ts +63 -63
  138. package/src/compat/client/optimistic-routing.ts +93 -88
  139. package/src/compat/client/prefetch-cache.ts +23 -24
  140. package/src/compat/client/route-announcer.ts +35 -35
  141. package/src/compat/client/segment-cache-policy.ts +20 -20
  142. package/src/compat/client/segment-cache.ts +309 -315
  143. package/src/compat/client/segment-prefetch.ts +127 -132
  144. package/src/compat/client/trailing-slash.ts +5 -4
  145. package/src/compat/css/chunking.ts +113 -116
  146. package/src/compat/css/inline-css.ts +21 -21
  147. package/src/compat/css/lightningcss.ts +37 -38
  148. package/src/compat/css/modules.ts +161 -175
  149. package/src/compat/css/nonce.ts +7 -7
  150. package/src/compat/css/sass-plugin.ts +18 -21
  151. package/src/compat/css/sass.ts +150 -152
  152. package/src/compat/css/styled-jsx-runtime.ts +27 -27
  153. package/src/compat/css/styled-jsx.ts +21 -21
  154. package/src/compat/edge-runtime.ts +27 -27
  155. package/src/compat/{adapter → export}/build-complete.ts +72 -75
  156. package/src/compat/export/client.ts +29 -31
  157. package/src/compat/export/{index.ts → emit.ts} +111 -110
  158. package/src/compat/export/standalone.ts +62 -54
  159. package/src/compat/image-optimizer/cache.ts +51 -49
  160. package/src/compat/image-optimizer/detect.ts +52 -52
  161. package/src/compat/image-optimizer/{index.ts → optimize.ts} +189 -194
  162. package/src/compat/image-optimizer/source.ts +77 -80
  163. package/src/compat/lifecycle/after-scope.ts +26 -26
  164. package/src/compat/lifecycle/after.ts +48 -45
  165. package/src/compat/lifecycle/error-funnel.ts +98 -102
  166. package/src/compat/lifecycle/error-serialize.ts +30 -26
  167. package/src/compat/lifecycle/error-ui.ts +67 -32
  168. package/src/compat/lifecycle/instrumentation-client.ts +36 -38
  169. package/src/compat/lifecycle/instrumentation.ts +85 -85
  170. package/src/compat/lifecycle/node-console.ts +11 -11
  171. package/src/compat/lifecycle/testmode.ts +160 -132
  172. package/src/compat/mdx/compile.ts +60 -57
  173. package/src/compat/mdx/plugin.ts +11 -11
  174. package/src/compat/mdx/{next-mdx-stub.ts → stub.ts} +5 -5
  175. package/src/compat/{metadata-route-artifacts.ts → metadata-artifacts.ts} +195 -191
  176. package/src/compat/metadata.ts +75 -81
  177. package/src/compat/next/cache.ts +68 -69
  178. package/src/compat/next/canonical-url.ts +9 -9
  179. package/src/compat/next/client-cache.ts +19 -19
  180. package/src/compat/next/client-navigation.ts +112 -116
  181. package/src/compat/next/client-only.ts +1 -1
  182. package/src/compat/next/client-script.tsx +99 -93
  183. package/src/compat/next/client-server.ts +10 -10
  184. package/src/compat/next/config-loader.ts +176 -173
  185. package/src/compat/next/config.ts +7 -7
  186. package/src/compat/next/constants.cjs +6 -6
  187. package/src/compat/next/constants.ts +6 -6
  188. package/src/compat/next/custom-server.ts +26 -24
  189. package/src/compat/next/dist/client/components/app-router-headers.ts +21 -21
  190. package/src/compat/next/dist/server/app-render/work-unit-async-storage.external.cjs +3 -4
  191. package/src/compat/next/dist/server/web/spec-extension/revalidate.ts +1 -1
  192. package/src/compat/next/dist/server/web/spec-extension/unstable-cache.ts +1 -1
  193. package/src/compat/next/dist/server/web/spec-extension/unstable-no-store.ts +1 -1
  194. package/src/compat/next/dynamic.tsx +21 -18
  195. package/src/compat/next/error.tsx +52 -52
  196. package/src/compat/next/font/cache.ts +74 -74
  197. package/src/compat/next/font/google.ts +2 -2
  198. package/src/compat/next/font/index.ts +1 -1
  199. package/src/compat/next/font/local.ts +3 -3
  200. package/src/compat/next/font/runtime-client.ts +17 -15
  201. package/src/compat/next/font/runtime.ts +443 -408
  202. package/src/compat/next/font/shared.ts +120 -108
  203. package/src/compat/next/form.tsx +63 -63
  204. package/src/compat/next/head.tsx +2 -2
  205. package/src/compat/next/headers.ts +103 -95
  206. package/src/compat/next/image/client.tsx +220 -0
  207. package/src/compat/next/image/config.ts +56 -58
  208. package/src/compat/next/image/optimizer.ts +40 -36
  209. package/src/compat/next/image/patterns.ts +37 -40
  210. package/src/compat/next/{image-props.ts → image/props.ts} +208 -202
  211. package/src/compat/next/image/shared.ts +65 -57
  212. package/src/compat/next/image/static-metadata.ts +98 -107
  213. package/src/compat/next/image/validate.ts +79 -88
  214. package/src/compat/next/image.tsx +19 -23
  215. package/src/compat/next/index.ts +1 -1
  216. package/src/compat/next/legacy-image.tsx +59 -60
  217. package/src/compat/next/{link-validation-transform.ts → link-transform.ts} +95 -96
  218. package/src/compat/next/link.tsx +158 -158
  219. package/src/compat/next/navigation.cjs +12 -3
  220. package/src/compat/next/navigation.ts +48 -50
  221. package/src/compat/next/offline.ts +27 -27
  222. package/src/compat/next/og.ts +121 -124
  223. package/src/compat/next/preferred-region.ts +13 -14
  224. package/src/compat/next/redirects.ts +58 -56
  225. package/src/compat/next/resource-hints.ts +73 -76
  226. package/src/compat/next/rewrites.ts +130 -133
  227. package/src/compat/next/root-params.ts +45 -45
  228. package/src/compat/next/{optimistic-route-state.ts → route-state.ts} +52 -52
  229. package/src/compat/next/router.cjs +4 -2
  230. package/src/compat/next/router.ts +58 -61
  231. package/src/compat/next/script.tsx +108 -108
  232. package/src/compat/next/server-only.ts +1 -1
  233. package/src/compat/next/server.ts +19 -19
  234. package/src/compat/next/svgr.ts +18 -17
  235. package/src/compat/next/telemetry.ts +24 -24
  236. package/src/compat/next/{image-usage.ts → usage.ts} +70 -39
  237. package/src/compat/next/user-agent.ts +53 -49
  238. package/src/compat/next/web-vitals.ts +22 -24
  239. package/src/compat/otel/api.ts +41 -41
  240. package/src/compat/otel/client-trace-metadata.ts +25 -27
  241. package/src/compat/otel/fetch-span.ts +29 -29
  242. package/src/compat/otel/tracer.ts +331 -331
  243. package/src/compat/pages/api.ts +456 -0
  244. package/src/compat/pages/client-plugin.ts +36 -36
  245. package/src/compat/pages/router-state.ts +34 -34
  246. package/src/compat/pages/{index.ts → router.ts} +130 -135
  247. package/src/compat/ppr/io.ts +12 -12
  248. package/src/compat/ppr/missing-root-params.ts +34 -38
  249. package/src/compat/ppr/root-params-scan.ts +66 -66
  250. package/src/compat/ppr/root-params-transform.ts +24 -26
  251. package/src/compat/ppr/root-params.ts +30 -30
  252. package/src/compat/ppr/segment-config-incompat.ts +6 -7
  253. package/src/compat/protocol.ts +71 -70
  254. package/src/compat/react/action-state.ts +47 -48
  255. package/src/compat/react/client-lite.ts +15 -15
  256. package/src/compat/react/client.ts +4 -4
  257. package/src/compat/react/compiler-runtime.ts +11 -11
  258. package/src/compat/react/dom-client.ts +44 -44
  259. package/src/compat/react/dom-react-server.ts +10 -16
  260. package/src/compat/react/dom-server.ts +10 -10
  261. package/src/compat/react/dom.ts +52 -52
  262. package/src/compat/react/hooks-extra.ts +34 -35
  263. package/src/compat/react/parity.ts +64 -61
  264. package/src/compat/react/preact.ts +81 -82
  265. package/src/compat/react/react-server.ts +28 -28
  266. package/src/compat/react/router-shim.ts +1 -1
  267. package/src/compat/react/server-component-use.ts +8 -8
  268. package/src/compat/react/server-inserted-html.ts +30 -31
  269. package/src/compat/react/server.ts +53 -55
  270. package/src/compat/react/use.ts +32 -32
  271. package/src/compat/react/view-transition.ts +20 -20
  272. package/src/compat/register/actions.ts +35 -824
  273. package/src/compat/register/boot.ts +41 -41
  274. package/src/compat/register/build-tier.ts +5 -5
  275. package/src/compat/register/build.ts +74 -70
  276. package/src/compat/register/bundler.ts +161 -156
  277. package/src/compat/register/cache.ts +20 -20
  278. package/src/compat/register/client-errors.ts +3 -3
  279. package/src/compat/register/config.ts +6 -6
  280. package/src/compat/register/css-extras.ts +30 -34
  281. package/src/compat/register/edge-runtime.ts +3 -3
  282. package/src/compat/register/errors.ts +10 -12
  283. package/src/compat/register/export.ts +16 -16
  284. package/src/compat/register/font.ts +11 -11
  285. package/src/compat/register/hooks.ts +2 -2
  286. package/src/compat/register/image.ts +40 -40
  287. package/src/compat/register/index.ts +59 -62
  288. package/src/compat/register/instrumentation-client.ts +10 -10
  289. package/src/compat/register/lifecycle.ts +25 -28
  290. package/src/compat/register/mdx.ts +10 -10
  291. package/src/compat/register/middleware.ts +226 -16
  292. package/src/compat/register/otel.ts +80 -88
  293. package/src/compat/register/pages-api.ts +10 -463
  294. package/src/compat/register/ppr.ts +16 -16
  295. package/src/compat/register/protocol.ts +17 -18
  296. package/src/compat/register/proxy.ts +49 -51
  297. package/src/compat/register/render.ts +79 -76
  298. package/src/compat/register/routing.ts +162 -159
  299. package/src/compat/register/segment.ts +24 -1897
  300. package/src/compat/register/static-image.ts +3 -3
  301. package/src/compat/register/{misc.ts → taint.ts} +9 -9
  302. package/src/compat/register/typed-routes.ts +14 -14
  303. package/src/compat/register/{usecache.ts → use-cache.ts} +39 -39
  304. package/src/compat/register/validation.ts +18 -18
  305. package/src/compat/segment/loading-boundary.ts +43 -45
  306. package/src/compat/segment/page-slot.ts +69 -69
  307. package/src/compat/segment/serve.ts +1884 -0
  308. package/src/compat/segment/tree.ts +113 -112
  309. package/src/compat/segment/vary-key.ts +38 -38
  310. package/src/compat/segment/vary-params.ts +138 -142
  311. package/src/compat/static-params.ts +14 -12
  312. package/src/compat/tsconfig-defaults.ts +87 -91
  313. package/src/compat/typecheck/{index.ts → check.ts} +234 -212
  314. package/src/compat/typecheck/worker.ts +15 -12
  315. package/src/compat/typed-routes/{index.ts → generate.ts} +36 -36
  316. package/src/compat/typed-routes/manifest.ts +174 -170
  317. package/src/compat/typed-routes/typegen.ts +127 -110
  318. package/src/compat/validation/errors.ts +16 -19
  319. package/src/compat/validation/prerender-diagnostics.ts +521 -504
  320. package/src/compat/validation/{index.ts → validate.ts} +647 -648
  321. package/src/compat-bootstrap.ts +16 -16
  322. package/src/config.ts +86 -69
  323. package/src/css/build.ts +230 -227
  324. package/src/css/postcss.ts +79 -80
  325. package/src/css/worker.ts +14 -15
  326. package/src/dev/client-actions.ts +10 -10
  327. package/src/dev/client-chunk-store.ts +27 -27
  328. package/src/dev/{client-key-cache.ts → restart/client-key.ts} +76 -76
  329. package/src/dev/{restart-cache.ts → restart/enabled.ts} +1 -1
  330. package/src/dev/{global-css-cache.ts → restart/global-css.ts} +91 -83
  331. package/src/dev/{node-module-bundle-cache.ts → restart/node-modules.ts} +24 -24
  332. package/src/dev/{route-bundle-key-cache.ts → restart/route-bundle-key.ts} +53 -53
  333. package/src/dev/{route-facts-cache.ts → restart/route-facts.ts} +82 -82
  334. package/src/dev/server.ts +804 -820
  335. package/src/env.ts +46 -43
  336. package/src/extensions.ts +491 -478
  337. package/src/index.ts +8 -8
  338. package/src/internal.ts +20 -23
  339. package/src/{islands → render}/boundary-error.ts +3 -3
  340. package/src/render/hooks.ts +71 -71
  341. package/src/render/island-context.ts +14 -14
  342. package/src/render/metadata.ts +310 -310
  343. package/src/{ppr-postpone.ts → render/postpone.ts} +5 -5
  344. package/src/{ppr.ts → render/ppr.ts} +244 -245
  345. package/src/render/renderer.ts +2087 -2082
  346. package/src/render/resource-hints.ts +16 -17
  347. package/src/render/slots.tsx +224 -235
  348. package/src/{islands → render}/static-children.ts +9 -12
  349. package/src/{islands → render}/static-slots.ts +37 -37
  350. package/src/{cache/context.ts → request/cache.ts} +20 -20
  351. package/src/request/context.ts +107 -107
  352. package/src/{dynamic/source.ts → resolve/dynamic.ts} +139 -139
  353. package/src/resolve/engine.ts +90 -77
  354. package/src/resolve/imports.ts +475 -463
  355. package/src/resolve/scan-facts.ts +318 -296
  356. package/src/resolve/source-text.ts +37 -37
  357. package/src/{dynamic → resolve}/tree-shake.ts +132 -128
  358. package/src/routing/forwarded.ts +19 -19
  359. package/src/routing/handler.ts +84 -91
  360. package/src/routing/href.ts +87 -70
  361. package/src/routing/{metadata.ts → metadata-files.ts} +403 -401
  362. package/src/{proxy.ts → routing/proxy.ts} +306 -312
  363. package/src/routing/{request-runtime.ts → request-environment.ts} +10 -10
  364. package/src/routing/routes.ts +827 -815
  365. package/src/routing/slots.ts +164 -160
  366. package/src/runtime/loader.ts +954 -0
  367. package/src/{dev → runtime}/module-cache.ts +309 -287
  368. package/src/{dev → runtime}/module-generations.ts +9 -9
  369. package/src/{dev → runtime}/module-transform.ts +81 -72
  370. package/src/{dev/imports.ts → runtime/modules.ts} +934 -847
  371. package/src/runtime/{server.ts → vendor-build.ts} +848 -1696
  372. package/src/runtime/vendor.ts +428 -406
  373. package/src/styles.d.ts +9 -0
  374. package/src/types.ts +324 -335
  375. package/src/utils/ansi.ts +5 -5
  376. package/src/utils/{source.ts → code.ts} +15 -12
  377. package/src/utils/content-type.ts +3 -3
  378. package/src/utils/decode.ts +2 -2
  379. package/src/utils/dev-profile.ts +13 -13
  380. package/src/utils/error-log.ts +6 -6
  381. package/src/utils/esbuild.ts +18 -18
  382. package/src/utils/fs-cache.ts +13 -13
  383. package/src/utils/fs.ts +57 -49
  384. package/src/utils/html.ts +20 -24
  385. package/src/utils/native-require.ts +8 -8
  386. package/src/utils/serialize.ts +139 -146
  387. package/src/utils/verbose.ts +18 -18
  388. package/reference/overview.md +0 -35
  389. package/src/cli/analyze-print.ts +0 -181
  390. package/src/compat/middleware/manifest.ts +0 -210
  391. package/src/compat/next/image-client.tsx +0 -215
  392. package/src/compat/next/link-usage.ts +0 -29
  393. package/src/css/index.ts +0 -2
  394. package/src/render/index.ts +0 -1
  395. package/src/style-modules.d.ts +0 -9
@@ -16,66 +16,67 @@
16
16
  // `sass` is an optionalDependency; when absent the module degrades to core's behavior (empty CSS, empty
17
17
  // map) so a non-sass app is never broken by loading compat.
18
18
 
19
- import { createRequire } from 'node:module';
20
- import { existsSync, readFileSync } from 'node:fs';
21
- import path from 'node:path';
22
- import { resolveImport } from '../../resolve/imports';
23
- import { nextCssSource } from './modules';
19
+ import { createRequire } from 'node:module'
20
+ import { existsSync, readFileSync } from 'node:fs'
21
+ import path from 'node:path'
22
+ import { resolveImport } from '../../resolve/imports'
23
+ import { nextCssSource } from './modules'
24
+ import { escapeRegex } from '../../utils/code'
24
25
 
25
26
  // Structural typing of the slice of the Dart Sass JS API we use. Avoids a hard
26
27
  // type dependency on the optional `sass` package (mirrors how css.ts/runtime.ts
27
28
  // type postcss/sharp via local structural shapes).
28
29
  interface SassCompileOptions {
29
- loadPaths?: string[];
30
- style?: 'expanded' | 'compressed';
31
- syntax?: 'scss' | 'indented' | 'css';
32
- sourceMap?: boolean;
30
+ loadPaths?: string[]
31
+ style?: 'expanded' | 'compressed'
32
+ syntax?: 'scss' | 'indented' | 'css'
33
+ sourceMap?: boolean
33
34
  }
34
35
  interface SassCompileResult {
35
- css: string;
36
+ css: string
36
37
  }
37
38
  interface SassApi {
38
- compile: (path: string, options?: SassCompileOptions) => SassCompileResult;
39
- compileString: (source: string, options?: SassCompileOptions) => SassCompileResult;
39
+ compile: (path: string, options?: SassCompileOptions) => SassCompileResult
40
+ compileString: (source: string, options?: SassCompileOptions) => SassCompileResult
40
41
  }
41
42
 
42
- const sassApis = new Map<string, SassApi | null>();
43
+ const sassApis = new Map<string, SassApi | null>()
43
44
 
44
45
  /** Resolve the optional `sass` package once, from the project root. */
45
46
  function loadSass(root: string): SassApi | undefined {
46
- const cacheKey = path.resolve(root);
47
- if (sassApis.has(cacheKey)) return sassApis.get(cacheKey) ?? undefined;
47
+ const cacheKey = path.resolve(root)
48
+ if (sassApis.has(cacheKey)) return sassApis.get(cacheKey) ?? undefined
48
49
  // eslint-disable-next-line turbo/no-undeclared-env-vars
49
50
  const roots = [root, path.resolve(import.meta.dirname, '../../..'), process.env.PNEXT_NEXTJS_REPO]
50
51
  .filter(
51
52
  (candidate): candidate is string => typeof candidate === 'string' && candidate.length > 0,
52
53
  )
53
- .map(candidate => path.join(path.resolve(candidate), 'package.json'));
54
+ .map(candidate => path.join(path.resolve(candidate), 'package.json'))
54
55
 
55
56
  for (const packageJson of roots) {
56
57
  try {
57
- const appRequire = createRequire(packageJson);
58
- const sass = appRequire('sass') as SassApi;
59
- sassApis.set(cacheKey, sass);
60
- return sass;
58
+ const appRequire = createRequire(packageJson)
59
+ const sass = appRequire('sass') as SassApi
60
+ sassApis.set(cacheKey, sass)
61
+ return sass
61
62
  } catch {
62
63
  // Try the next resolution root.
63
64
  }
64
65
  }
65
66
 
66
67
  // Not installed / not resolvable — degrade to core's empty-module behavior.
67
- sassApis.set(cacheKey, null);
68
- return undefined;
68
+ sassApis.set(cacheKey, null)
69
+ return undefined
69
70
  }
70
71
 
71
72
  /** True for `.scss` / `.sass` (module or global). */
72
73
  export function isSassFile(file: string): boolean {
73
- return /\.(?:scss|sass)$/.test(file);
74
+ return /\.(?:scss|sass)$/.test(file)
74
75
  }
75
76
 
76
77
  /** True for `.module.scss` / `.module.sass`. */
77
78
  export function isSassModuleFile(file: string): boolean {
78
- return /\.module\.(?:scss|sass)$/.test(file);
79
+ return /\.module\.(?:scss|sass)$/.test(file)
79
80
  }
80
81
 
81
82
  /**
@@ -88,17 +89,17 @@ export function isSassModuleFile(file: string): boolean {
88
89
  * empty-module behavior) so the bundle still succeeds.
89
90
  */
90
91
  export function compileSassCss(file: string, root: string, includePaths: string[] = []): string {
91
- file = nextCssSource(file, root);
92
- const sass = loadSass(root);
93
- if (!sass) return '';
92
+ file = nextCssSource(file, root)
93
+ const sass = loadSass(root)
94
+ if (!sass) return ''
94
95
  const compiled = sass.compile(file, {
95
96
  loadPaths: [path.dirname(file), ...includePaths],
96
97
  style: 'expanded',
97
98
  syntax: file.endsWith('.sass') ? 'indented' : 'scss',
98
- }).css;
99
+ }).css
99
100
 
100
- if (!isSassModuleFile(file)) return compiled;
101
- return transformCssModule(compiled, file, root, includePaths);
101
+ if (!isSassModuleFile(file)) return compiled
102
+ return transformCssModule(compiled, file, root, includePaths)
102
103
  }
103
104
 
104
105
  /**
@@ -112,16 +113,16 @@ export function sassModuleMapping(
112
113
  root: string,
113
114
  includePaths: string[] = [],
114
115
  ): Record<string, string> {
115
- file = nextCssSource(file, root);
116
- const sass = loadSass(root);
117
- if (!sass) return {};
116
+ file = nextCssSource(file, root)
117
+ const sass = loadSass(root)
118
+ if (!sass) return {}
118
119
  const compiled = sass.compile(file, {
119
120
  loadPaths: [path.dirname(file), ...includePaths],
120
121
  style: 'expanded',
121
122
  syntax: file.endsWith('.sass') ? 'indented' : 'scss',
122
- }).css;
123
+ }).css
123
124
 
124
- return cssModuleMappingFromSource(compiled, file, root, includePaths);
125
+ return cssModuleMappingFromSource(compiled, file, root, includePaths)
125
126
  }
126
127
 
127
128
  // ---------------------------------------------------------------------------
@@ -129,14 +130,14 @@ export function sassModuleMapping(
129
130
  // ---------------------------------------------------------------------------
130
131
 
131
132
  interface ComposeRef {
132
- names: string[];
133
- from?: string;
133
+ names: string[]
134
+ from?: string
134
135
  }
135
136
 
136
137
  interface CssModuleInfo {
137
- classes: Set<string>;
138
- composes: Map<string, ComposeRef[]>;
139
- dependencies: string[];
138
+ classes: Set<string>
139
+ composes: Map<string, ComposeRef[]>
140
+ dependencies: string[]
140
141
  }
141
142
 
142
143
  function cssModuleMappingFromSource(
@@ -145,15 +146,15 @@ function cssModuleMappingFromSource(
145
146
  root: string,
146
147
  includePaths: string[],
147
148
  ): Record<string, string> {
148
- const cache = new Map<string, CssModuleInfo>();
149
- const info = moduleInfoFromSource(source, file, root);
150
- cache.set(path.resolve(file), info);
149
+ const cache = new Map<string, CssModuleInfo>()
150
+ const info = moduleInfoFromSource(source, file, root)
151
+ cache.set(path.resolve(file), info)
151
152
  return Object.fromEntries(
152
153
  [...info.classes].map(className => [
153
154
  className,
154
155
  classValue(file, className, root, includePaths, cache, new Set()),
155
156
  ]),
156
- );
157
+ )
157
158
  }
158
159
 
159
160
  function transformCssModule(
@@ -162,10 +163,10 @@ function transformCssModule(
162
163
  root: string,
163
164
  _includePaths: string[],
164
165
  ): string {
165
- const info = moduleInfoFromSource(source, file, root);
166
- const imports = info.dependencies.map(dep => `@import ${JSON.stringify(dep)};`).join('\n');
167
- const css = scopeKeyframes(rewriteModuleSelectors(stripComposes(source), file), file);
168
- return [imports, css].filter(Boolean).join('\n');
166
+ const info = moduleInfoFromSource(source, file, root)
167
+ const imports = info.dependencies.map(dep => `@import ${JSON.stringify(dep)};`).join('\n')
168
+ const css = scopeKeyframes(rewriteModuleSelectors(stripComposes(source), file), file)
169
+ return [imports, css].filter(Boolean).join('\n')
169
170
  }
170
171
 
171
172
  function moduleInfo(
@@ -174,56 +175,56 @@ function moduleInfo(
174
175
  includePaths: string[],
175
176
  cache: Map<string, CssModuleInfo>,
176
177
  ): CssModuleInfo {
177
- const key = path.resolve(file);
178
- const cached = cache.get(key);
179
- if (cached) return cached;
178
+ const key = path.resolve(file)
179
+ const cached = cache.get(key)
180
+ if (cached) return cached
180
181
  const source = isSassFile(key)
181
182
  ? compileSassCssSource(key, root, includePaths)
182
- : readFileSync(key, 'utf8');
183
- const info = moduleInfoFromSource(source, key, root);
184
- cache.set(key, info);
185
- return info;
183
+ : readFileSync(key, 'utf8')
184
+ const info = moduleInfoFromSource(source, key, root)
185
+ cache.set(key, info)
186
+ return info
186
187
  }
187
188
 
188
189
  function compileSassCssSource(file: string, root: string, includePaths: string[]): string {
189
- const sass = loadSass(root);
190
- if (!sass) return '';
190
+ const sass = loadSass(root)
191
+ if (!sass) return ''
191
192
  return sass.compile(file, {
192
193
  loadPaths: [path.dirname(file), ...includePaths],
193
194
  style: 'expanded',
194
195
  syntax: file.endsWith('.sass') ? 'indented' : 'scss',
195
- }).css;
196
+ }).css
196
197
  }
197
198
 
198
199
  function moduleInfoFromSource(source: string, file: string, root: string): CssModuleInfo {
199
- const classes = cssClassNames(source);
200
- const composes = new Map<string, ComposeRef[]>();
201
- const dependencies: string[] = [];
202
- const seenDependencies = new Set<string>();
203
- const rulePattern = /(^|})([^{}]+)\{([^{}]*)\}/g;
204
- let match: RegExpExecArray | null;
200
+ const classes = cssClassNames(source)
201
+ const composes = new Map<string, ComposeRef[]>()
202
+ const dependencies: string[] = []
203
+ const seenDependencies = new Set<string>()
204
+ const rulePattern = /(^|})([^{}]+)\{([^{}]*)\}/g
205
+ let match: RegExpExecArray | null
205
206
 
206
207
  while ((match = rulePattern.exec(source))) {
207
- const [, , selector, body] = match;
208
- if (!selector || !body) continue;
209
- const localClasses = selectorClassNames(selector).filter(className => classes.has(className));
210
- if (localClasses.length === 0) continue;
208
+ const [, , selector, body] = match
209
+ if (!selector || !body) continue
210
+ const localClasses = selectorClassNames(selector).filter(className => classes.has(className))
211
+ if (localClasses.length === 0) continue
211
212
 
212
213
  for (const ref of composeRefs(body)) {
213
214
  for (const localClass of localClasses) {
214
- const refs = composes.get(localClass) ?? [];
215
- refs.push(ref);
216
- composes.set(localClass, refs);
215
+ const refs = composes.get(localClass) ?? []
216
+ refs.push(ref)
217
+ composes.set(localClass, refs)
217
218
  }
218
- if (!ref.from || ref.from === 'global') continue;
219
- const dependency = resolveCssModuleImport(root, file, ref.from);
220
- if (!dependency || seenDependencies.has(dependency)) continue;
221
- dependencies.push(dependency);
222
- seenDependencies.add(dependency);
219
+ if (!ref.from || ref.from === 'global') continue
220
+ const dependency = resolveCssModuleImport(root, file, ref.from)
221
+ if (!dependency || seenDependencies.has(dependency)) continue
222
+ dependencies.push(dependency)
223
+ seenDependencies.add(dependency)
223
224
  }
224
225
  }
225
226
 
226
- return { classes, composes, dependencies };
227
+ return { classes, composes, dependencies }
227
228
  }
228
229
 
229
230
  function classValue(
@@ -234,139 +235,140 @@ function classValue(
234
235
  cache: Map<string, CssModuleInfo>,
235
236
  stack: Set<string>,
236
237
  ): string {
237
- const key = `${path.resolve(file)}\0${className}`;
238
- if (stack.has(key)) return cssModuleClassName(file, className);
239
- stack.add(key);
238
+ const key = `${path.resolve(file)}\0${className}`
239
+ if (stack.has(key)) return cssModuleClassName(file, className)
240
+ stack.add(key)
240
241
 
241
- const info = moduleInfo(file, root, includePaths, cache);
242
- const parts = [cssModuleClassName(file, className)];
242
+ const info = moduleInfo(file, root, includePaths, cache)
243
+ const parts = [cssModuleClassName(file, className)]
243
244
  for (const ref of info.composes.get(className) ?? []) {
244
245
  if (ref.from === 'global') {
245
- parts.push(...ref.names);
246
- continue;
246
+ parts.push(...ref.names)
247
+ continue
247
248
  }
248
- const refFile = ref.from ? resolveCssModuleImport(root, file, ref.from) : file;
249
- if (!refFile) continue;
250
- const refInfo = moduleInfo(refFile, root, includePaths, cache);
249
+ const refFile = ref.from ? resolveCssModuleImport(root, file, ref.from) : file
250
+ if (!refFile) continue
251
+ const refInfo = moduleInfo(refFile, root, includePaths, cache)
251
252
  for (const name of ref.names) {
252
- if (!refInfo.classes.has(name)) continue;
253
- parts.push(...classValue(refFile, name, root, includePaths, cache, stack).split(/\s+/));
253
+ if (!refInfo.classes.has(name)) continue
254
+ parts.push(...classValue(refFile, name, root, includePaths, cache, stack).split(/\s+/))
254
255
  }
255
256
  }
256
257
 
257
- stack.delete(key);
258
- return [...new Set(parts)].join(' ');
258
+ stack.delete(key)
259
+ return [...new Set(parts)].join(' ')
259
260
  }
260
261
 
261
262
  function composeRefs(body: string): ComposeRef[] {
262
- const refs: ComposeRef[] = [];
263
- const pattern = /\bcomposes\s*:\s*([^;]+);/g;
264
- let match: RegExpExecArray | null;
263
+ const refs: ComposeRef[] = []
264
+ const pattern = /\bcomposes\s*:\s*([^;]+);/g
265
+ let match: RegExpExecArray | null
265
266
 
266
267
  while ((match = pattern.exec(body))) {
267
- const value = match[1]?.trim();
268
- if (!value) continue;
269
- const fromMatch = /^(.+?)\s+from\s+(['"]?)([^'"]+)\2$/.exec(value);
270
- const names = (fromMatch?.[1] ?? value).split(/\s+/).filter(Boolean);
271
- if (names.length === 0) continue;
272
- refs.push({ names, ...(fromMatch?.[3] ? { from: fromMatch[3] } : {}) });
268
+ const value = match[1]?.trim()
269
+ if (!value) continue
270
+ const fromMatch = /^(.+?)\s+from\s+(['"]?)([^'"]+)\2$/.exec(value)
271
+ const names = (fromMatch?.[1] ?? value).split(/\s+/).filter(Boolean)
272
+ if (names.length === 0) continue
273
+ refs.push({ names, ...(fromMatch?.[3] ? { from: fromMatch[3] } : {}) })
273
274
  }
274
275
 
275
- return refs;
276
+ return refs
276
277
  }
277
278
 
278
- function resolveCssModuleImport(root: string, fromFile: string, specifier: string): string | undefined {
279
- const resolved = resolveImport(root, fromFile, specifier);
280
- if (resolved && isCssModuleFile(resolved)) return path.resolve(resolved);
281
- if (specifier.startsWith('.') || path.isAbsolute(specifier)) return undefined;
282
-
283
- const sibling = path.resolve(path.dirname(fromFile), specifier);
284
- return existsSync(sibling) && isCssModuleFile(sibling) ? sibling : undefined;
279
+ function resolveCssModuleImport(
280
+ root: string,
281
+ fromFile: string,
282
+ specifier: string,
283
+ ): string | undefined {
284
+ const resolved = resolveImport(root, fromFile, specifier)
285
+ if (resolved && isCssModuleFile(resolved)) return path.resolve(resolved)
286
+ if (specifier.startsWith('.') || path.isAbsolute(specifier)) return undefined
287
+
288
+ const sibling = path.resolve(path.dirname(fromFile), specifier)
289
+ return existsSync(sibling) && isCssModuleFile(sibling) ? sibling : undefined
285
290
  }
286
291
 
287
292
  function isCssModuleFile(file: string): boolean {
288
- return /\.module\.(?:css|scss|sass)$/.test(file);
293
+ return /\.module\.(?:css|scss|sass)$/.test(file)
289
294
  }
290
295
 
291
296
  function stripComposes(source: string): string {
292
- return source.replace(/\s*composes\s*:[^;{}]+;/g, '');
297
+ return source.replace(/\s*composes\s*:[^;{}]+;/g, '')
293
298
  }
294
299
 
295
300
  function rewriteModuleSelectors(css: string, file: string): string {
296
301
  return css.replace(/(^|})([^{}]+)\{/g, (match, boundary: string, selector: string) => {
297
- if (selector.trimStart().startsWith('@')) return match;
298
- let out = selector;
302
+ if (selector.trimStart().startsWith('@')) return match
303
+ let out = selector
299
304
  for (const className of selectorClassNames(selector)) {
300
- out = rewriteClassSelector(out, cssModuleClassName(file, className), className);
305
+ out = rewriteClassSelector(out, cssModuleClassName(file, className), className)
301
306
  }
302
- return `${boundary}${out}{`;
303
- });
307
+ return `${boundary}${out}{`
308
+ })
304
309
  }
305
310
 
306
311
  function cssClassNames(source: string): Set<string> {
307
- return new Set(selectorClassNames(source.replace(/\{[^{}]*\}/g, '{')));
312
+ return new Set(selectorClassNames(source.replace(/\{[^{}]*\}/g, '{')))
308
313
  }
309
314
 
310
315
  function selectorClassNames(selector: string): string[] {
311
- const classNames: string[] = [];
312
- const classPattern = /(^|[\s,>+~])\.(-?[_a-zA-Z][\w-]*)/g;
313
- let match: RegExpExecArray | null;
316
+ const classNames: string[] = []
317
+ const classPattern = /(^|[\s,>+~])\.(-?[_a-zA-Z][\w-]*)/g
318
+ let match: RegExpExecArray | null
314
319
  while ((match = classPattern.exec(selector))) {
315
- if (match[2]) classNames.push(match[2]);
320
+ if (match[2]) classNames.push(match[2])
316
321
  }
317
- return classNames;
322
+ return classNames
318
323
  }
319
324
 
320
325
  function cssModuleClassName(file: string, className: string): string {
321
326
  const base = path
322
327
  .basename(file)
323
328
  .replace(/\.module\.(?:css|scss|sass)$/, '')
324
- .replace(/[^_a-zA-Z0-9]/g, '_');
325
- const hash = pathHash(cssModuleScopePath(file));
326
- return `${base}_${className}_${hash}`;
329
+ .replace(/[^_a-zA-Z0-9]/g, '_')
330
+ const hash = pathHash(cssModuleScopePath(file))
331
+ return `${base}_${className}_${hash}`
327
332
  }
328
333
 
329
334
  function scopeKeyframes(css: string, file: string): string {
330
- let out = css;
335
+ let out = css
331
336
  for (const name of keyframeNames(css)) {
332
- const scoped = cssModuleClassName(file, name);
337
+ const scoped = cssModuleClassName(file, name)
333
338
  out = out.replace(
334
339
  new RegExp(`(@(?:-webkit-)?keyframes\\s+)${escapeRegex(name)}(?![-_a-zA-Z0-9])`, 'g'),
335
340
  `$1${scoped}`,
336
- );
341
+ )
337
342
  out = out.replace(
338
- new RegExp(
339
- `(animation-name\\s*:\\s*)${escapeRegex(name)}(?![-_a-zA-Z0-9])`,
340
- 'g',
341
- ),
343
+ new RegExp(`(animation-name\\s*:\\s*)${escapeRegex(name)}(?![-_a-zA-Z0-9])`, 'g'),
342
344
  `$1${scoped}`,
343
- );
345
+ )
344
346
  out = out.replace(
345
347
  new RegExp(
346
348
  `(animation\\s*:[^;{}]*?(?<![-_a-zA-Z0-9]))${escapeRegex(name)}(?![-_a-zA-Z0-9])`,
347
349
  'g',
348
350
  ),
349
351
  `$1${scoped}`,
350
- );
352
+ )
351
353
  }
352
- return out;
354
+ return out
353
355
  }
354
356
 
355
357
  function keyframeNames(css: string): Set<string> {
356
- const names = new Set<string>();
357
- const pattern = /@(?:-webkit-)?keyframes\s+(-?[_a-zA-Z][\w-]*)/g;
358
- let match: RegExpExecArray | null;
358
+ const names = new Set<string>()
359
+ const pattern = /@(?:-webkit-)?keyframes\s+(-?[_a-zA-Z][\w-]*)/g
360
+ let match: RegExpExecArray | null
359
361
  while ((match = pattern.exec(css))) {
360
- if (match[1]) names.add(match[1]);
362
+ if (match[1]) names.add(match[1])
361
363
  }
362
- return names;
364
+ return names
363
365
  }
364
366
 
365
367
  function cssModuleScopePath(file: string): string {
366
- const normalized = file.split(path.sep).join('/');
367
- const appIndex = normalized.lastIndexOf('/app/');
368
- if (appIndex !== -1) return normalized.slice(appIndex + 1);
369
- return normalized.split('/').slice(-3).join('/');
368
+ const normalized = file.split(path.sep).join('/')
369
+ const appIndex = normalized.lastIndexOf('/app/')
370
+ if (appIndex !== -1) return normalized.slice(appIndex + 1)
371
+ return normalized.split('/').slice(-3).join('/')
370
372
  }
371
373
 
372
374
  function rewriteClassSelector(
@@ -377,16 +379,12 @@ function rewriteClassSelector(
377
379
  const esbuildNamePattern = new RegExp(
378
380
  `\\.${escapeRegex(originalClassName)}(?![-_a-zA-Z0-9])`,
379
381
  'g',
380
- );
381
- return css.replace(esbuildNamePattern, `.${scopedClassName}`);
382
+ )
383
+ return css.replace(esbuildNamePattern, `.${scopedClassName}`)
382
384
  }
383
385
 
384
386
  function pathHash(file: string): string {
385
- let hash = 5381;
386
- for (const char of file) hash = ((hash << 5) + hash) ^ char.charCodeAt(0);
387
- return (hash >>> 0).toString(36).slice(0, 5);
388
- }
389
-
390
- function escapeRegex(value: string): string {
391
- return value.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
387
+ let hash = 5381
388
+ for (const char of file) hash = ((hash << 5) + hash) ^ char.charCodeAt(0)
389
+ return (hash >>> 0).toString(36).slice(0, 5)
392
390
  }
@@ -7,27 +7,27 @@
7
7
  // the registry and renders nothing; the app flushes `registry.styles()` through
8
8
  // useServerInsertedHTML so the rules land in the streamed document head. On the client the registry
9
9
  // mirrors new rules into document.head imperatively, matching styled-jsx's client runtime.
10
- import { createContext, h, type ComponentChildren } from 'preact';
11
- import { useContext } from 'preact/hooks';
10
+ import { createContext, h, type ComponentChildren } from 'preact'
11
+ import { useContext } from 'preact/hooks'
12
12
 
13
13
  interface StyleProps {
14
- id: string;
15
- children?: ComponentChildren;
14
+ id: string
15
+ children?: ComponentChildren
16
16
  }
17
17
 
18
18
  export class PNextStyleRegistry {
19
- private rules = new Map<string, string>();
19
+ private rules = new Map<string, string>()
20
20
 
21
21
  add(id: string, css: string): void {
22
- if (this.rules.has(id)) return;
23
- this.rules.set(id, css);
22
+ if (this.rules.has(id)) return
23
+ this.rules.set(id, css)
24
24
  if (typeof document !== 'undefined') {
25
- const domId = `__jsx-${id}`;
25
+ const domId = `__jsx-${id}`
26
26
  if (!document.getElementById(domId)) {
27
- const element = document.createElement('style');
28
- element.id = domId;
29
- element.textContent = css;
30
- document.head.appendChild(element);
27
+ const element = document.createElement('style')
28
+ element.id = domId
29
+ element.textContent = css
30
+ document.head.appendChild(element)
31
31
  }
32
32
  }
33
33
  }
@@ -36,45 +36,45 @@ export class PNextStyleRegistry {
36
36
  styles() {
37
37
  return [...this.rules.entries()].map(([id, css]) =>
38
38
  h('style', { id: `__jsx-${id}`, key: `__jsx-${id}` }, css),
39
- );
39
+ )
40
40
  }
41
41
 
42
42
  flush(): void {
43
- this.rules.clear();
43
+ this.rules.clear()
44
44
  }
45
45
  }
46
46
 
47
- const StyleRegistryContext = createContext<PNextStyleRegistry | undefined>(undefined);
47
+ const StyleRegistryContext = createContext<PNextStyleRegistry | undefined>(undefined)
48
48
 
49
49
  export function createStyleRegistry(): PNextStyleRegistry {
50
- return new PNextStyleRegistry();
50
+ return new PNextStyleRegistry()
51
51
  }
52
52
 
53
53
  export function StyleRegistry({
54
54
  registry,
55
55
  children,
56
56
  }: {
57
- registry?: PNextStyleRegistry;
58
- children?: ComponentChildren;
57
+ registry?: PNextStyleRegistry
58
+ children?: ComponentChildren
59
59
  }) {
60
- return h(StyleRegistryContext.Provider, { value: registry ?? createStyleRegistry() }, children);
60
+ return h(StyleRegistryContext.Provider, { value: registry ?? createStyleRegistry() }, children)
61
61
  }
62
62
 
63
63
  export function useStyleRegistry(): PNextStyleRegistry | undefined {
64
- return useContext(StyleRegistryContext);
64
+ return useContext(StyleRegistryContext)
65
65
  }
66
66
 
67
67
  export function style({ id, children }: StyleProps) {
68
- const registry = useContext(StyleRegistryContext);
68
+ const registry = useContext(StyleRegistryContext)
69
69
  if (registry) {
70
- registry.add(id, childrenToCss(children));
71
- return null;
70
+ registry.add(id, childrenToCss(children))
71
+ return null
72
72
  }
73
- return h('style', { id: `__jsx-${id}` }, children);
73
+ return h('style', { id: `__jsx-${id}` }, children)
74
74
  }
75
75
 
76
76
  function childrenToCss(children: ComponentChildren): string {
77
- if (typeof children === 'string' || typeof children === 'number') return String(children);
78
- if (Array.isArray(children)) return children.map(childrenToCss).join('');
79
- return '';
77
+ if (typeof children === 'string' || typeof children === 'number') return String(children)
78
+ if (Array.isArray(children)) return children.map(childrenToCss).join('')
79
+ return ''
80
80
  }