@wular/pnext 0.0.3 → 0.0.6

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 (392) hide show
  1. package/README.md +11 -11
  2. package/bin/pnext +1 -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 +1 -1
  8. package/reference/config.md +2 -2
  9. package/reference/css.md +13 -9
  10. package/reference/dev.md +1 -1
  11. package/reference/metadata.md +7 -7
  12. package/reference/navigation.md +35 -28
  13. package/reference/performance.md +70 -70
  14. package/reference/rendering.md +17 -17
  15. package/reference/routing.md +17 -17
  16. package/reference/typegen.md +12 -8
  17. package/src/api/cache.ts +36 -37
  18. package/src/api/client-cache.ts +2 -2
  19. package/src/api/client-navigation.ts +113 -109
  20. package/src/api/dynamic.tsx +58 -55
  21. package/src/api/link.tsx +49 -52
  22. package/src/api/navigation.ts +59 -58
  23. package/src/api/server.ts +152 -144
  24. package/src/api/suspense.ts +4 -4
  25. package/src/cli/adapters/vercel-warm.ts +126 -121
  26. package/src/cli/adapters/vercel.ts +437 -443
  27. package/src/cli/analyze.ts +333 -144
  28. package/src/cli/{named-bin.ts → boot/named-bin.ts} +37 -37
  29. package/src/cli/{boot-trace.ts → boot/trace.ts} +10 -10
  30. package/src/cli/build.ts +976 -978
  31. package/src/cli/create.ts +71 -63
  32. package/src/cli/dev.ts +116 -116
  33. package/src/cli/index.ts +88 -85
  34. package/src/cli/migrate/package-json.ts +73 -71
  35. package/src/cli/migrate/report.ts +32 -33
  36. package/src/cli/migrate/{index.ts → run.ts} +48 -49
  37. package/src/cli/migrate/scan.ts +46 -46
  38. package/src/cli/migrate/spinner.ts +9 -9
  39. package/src/cli/migrate/tsconfig.ts +35 -35
  40. package/src/cli/{server-entry.ts → serve/entry.ts} +57 -57
  41. package/src/cli/{request-pipeline.ts → serve/pipeline.ts} +386 -394
  42. package/src/cli/{serve-ui.ts → serve/ui.ts} +47 -47
  43. package/src/cli/start.ts +65 -66
  44. package/src/{typegen.ts → cli/typegen.ts} +59 -59
  45. package/src/client/build.ts +794 -768
  46. package/src/client/chunk-fold.ts +245 -240
  47. package/src/client/{paths.ts → chunk-name.ts} +6 -6
  48. package/src/client/entry.ts +162 -147
  49. package/src/client/prebuilt.ts +231 -223
  50. package/src/client/profile.ts +29 -29
  51. package/src/client/react-compiler.ts +20 -15
  52. package/src/client/{compat-surface.ts → react-tier.ts} +64 -64
  53. package/src/client/reference-stub.ts +51 -51
  54. package/src/client/reference.ts +19 -19
  55. package/src/{api → client}/router/events.ts +17 -17
  56. package/src/{api → client}/router/history.ts +16 -16
  57. package/src/{api → client}/router/hub.ts +52 -53
  58. package/src/{api/router.ts → client/router/index.ts} +61 -60
  59. package/src/{api → client}/router/policies.ts +24 -24
  60. package/src/{api → client}/router/runtime.ts +1988 -1961
  61. package/src/{api → client}/router/types.ts +93 -98
  62. package/src/compat/actions/client-plugin.ts +42 -43
  63. package/src/compat/actions/client-stub.ts +14 -14
  64. package/src/compat/actions/{action-client.ts → client.ts} +194 -193
  65. package/src/compat/actions/config.ts +63 -64
  66. package/src/compat/actions/detect.ts +68 -68
  67. package/src/compat/actions/discovery.ts +105 -105
  68. package/src/compat/actions/{action-dispatch.ts → dispatch.ts} +277 -274
  69. package/src/compat/actions/early-submit.ts +1 -1
  70. package/src/compat/actions/endpoint.ts +198 -198
  71. package/src/compat/actions/extensions.ts +811 -0
  72. package/src/compat/actions/flight.ts +23 -23
  73. package/src/compat/actions/form-state.ts +34 -34
  74. package/src/compat/actions/hoist.ts +382 -236
  75. package/src/compat/actions/ids.ts +7 -12
  76. package/src/compat/actions/index.ts +8 -8
  77. package/src/compat/actions/instances.ts +46 -46
  78. package/src/compat/actions/origin.ts +47 -48
  79. package/src/compat/actions/protocol.ts +22 -22
  80. package/src/compat/actions/registry.ts +19 -19
  81. package/src/compat/{misc/action-return.ts → actions/return.ts} +60 -57
  82. package/src/compat/actions/rewrite.ts +125 -125
  83. package/src/compat/actions/{action-router.ts → router.ts} +10 -10
  84. package/src/compat/actions/serve.ts +132 -136
  85. package/src/compat/actions/server-tag.ts +4 -4
  86. package/src/compat/actions/{action-shared.ts → shared.ts} +34 -34
  87. package/src/compat/actions/unrecognized-error.ts +4 -4
  88. package/src/compat/{index.ts → aliases.ts} +112 -109
  89. package/src/compat/bundler/bun-externals.ts +18 -18
  90. package/src/compat/bundler/cjs-exports.ts +271 -223
  91. package/src/compat/bundler/config.ts +116 -111
  92. package/src/compat/bundler/externals.ts +12 -12
  93. package/src/compat/bundler/import-meta-url.ts +19 -19
  94. package/src/compat/bundler/modularize-imports.ts +36 -33
  95. package/src/compat/bundler/new-url-asset.ts +22 -24
  96. package/src/compat/bundler/optimize-package-imports.ts +111 -107
  97. package/src/compat/bundler/polyfill.ts +28 -28
  98. package/src/compat/bundler/react-compiler.ts +35 -29
  99. package/src/compat/bundler/react-profiler.tsx +11 -11
  100. package/src/compat/bundler/relay-transform.ts +48 -47
  101. package/src/compat/bundler/require-context.ts +119 -113
  102. package/src/compat/bundler/resolve-extensions.ts +19 -19
  103. package/src/compat/bundler/source-cache.ts +25 -25
  104. package/src/compat/bundler/static-imports.ts +7 -7
  105. package/src/compat/bundler/symlink-imports.ts +46 -46
  106. package/src/compat/bundler/tsconfig-paths.ts +13 -15
  107. package/src/compat/bundler/wasm.ts +58 -60
  108. package/src/compat/bundler/webpack-loaders.ts +254 -241
  109. package/src/compat/bundler/worker.ts +101 -104
  110. package/src/compat/cache/build-flags.ts +29 -29
  111. package/src/compat/cache/build-prerender-errors.ts +40 -44
  112. package/src/compat/cache/custom-handler.ts +60 -53
  113. package/src/compat/cache/fetch-patch.ts +240 -240
  114. package/src/compat/cache/handler.ts +27 -31
  115. package/src/compat/cache/modern-handler.ts +148 -126
  116. package/src/compat/cache/resume-data-cache.ts +47 -45
  117. package/src/compat/cache/revalidate.ts +233 -232
  118. package/src/compat/cache/runtime-error.ts +35 -35
  119. package/src/compat/cache/use-cache-transform.ts +442 -417
  120. package/src/compat/cache/use-cache.ts +650 -614
  121. package/src/compat/cache-control.ts +140 -142
  122. package/src/compat/client/base-path.ts +21 -20
  123. package/src/compat/client/css-order.ts +18 -18
  124. package/src/compat/client/errors/bare-boundary.ts +11 -11
  125. package/src/compat/client/errors/control-flow.ts +23 -23
  126. package/src/compat/client/errors/error-boundary.ts +61 -61
  127. package/src/compat/client/errors/global-error.ts +101 -91
  128. package/src/compat/client/errors/install.ts +71 -72
  129. package/src/compat/client/errors/lazy.ts +23 -23
  130. package/src/compat/client/errors/primitive-throw.ts +47 -45
  131. package/src/compat/client/errors/soft-refresh.ts +4 -4
  132. package/src/compat/client/link-status.ts +33 -33
  133. package/src/compat/client/{nav-compat-runtime.ts → nav-runtime.ts} +20 -20
  134. package/src/compat/client/{nav-compat.ts → nav.ts} +12 -13
  135. package/src/compat/client/navigation-scroll.ts +63 -63
  136. package/src/compat/client/optimistic-routing.ts +93 -88
  137. package/src/compat/client/prefetch-cache.ts +23 -24
  138. package/src/compat/client/route-announcer.ts +35 -35
  139. package/src/compat/client/segment-cache-policy.ts +20 -20
  140. package/src/compat/client/segment-cache.ts +309 -315
  141. package/src/compat/client/segment-prefetch.ts +127 -132
  142. package/src/compat/client/trailing-slash.ts +5 -4
  143. package/src/compat/css/chunking.ts +113 -116
  144. package/src/compat/css/inline-css.ts +21 -21
  145. package/src/compat/css/lightningcss.ts +37 -38
  146. package/src/compat/css/modules.ts +161 -175
  147. package/src/compat/css/nonce.ts +7 -7
  148. package/src/compat/css/sass-plugin.ts +18 -21
  149. package/src/compat/css/sass.ts +150 -152
  150. package/src/compat/css/styled-jsx-runtime.ts +27 -27
  151. package/src/compat/css/styled-jsx.ts +21 -21
  152. package/src/compat/edge-runtime.ts +27 -27
  153. package/src/compat/{adapter → export}/build-complete.ts +72 -75
  154. package/src/compat/export/client.ts +29 -31
  155. package/src/compat/export/{index.ts → emit.ts} +111 -110
  156. package/src/compat/export/standalone.ts +62 -54
  157. package/src/compat/image-optimizer/cache.ts +51 -49
  158. package/src/compat/image-optimizer/detect.ts +52 -52
  159. package/src/compat/image-optimizer/{index.ts → optimize.ts} +189 -194
  160. package/src/compat/image-optimizer/source.ts +77 -80
  161. package/src/compat/lifecycle/after-scope.ts +26 -26
  162. package/src/compat/lifecycle/after.ts +48 -45
  163. package/src/compat/lifecycle/error-funnel.ts +98 -102
  164. package/src/compat/lifecycle/error-serialize.ts +30 -26
  165. package/src/compat/lifecycle/error-ui.ts +67 -32
  166. package/src/compat/lifecycle/instrumentation-client.ts +36 -38
  167. package/src/compat/lifecycle/instrumentation.ts +85 -85
  168. package/src/compat/lifecycle/node-console.ts +11 -11
  169. package/src/compat/lifecycle/testmode.ts +160 -132
  170. package/src/compat/mdx/compile.ts +60 -57
  171. package/src/compat/mdx/plugin.ts +11 -11
  172. package/src/compat/mdx/{next-mdx-stub.ts → stub.ts} +5 -5
  173. package/src/compat/{metadata-route-artifacts.ts → metadata-artifacts.ts} +195 -191
  174. package/src/compat/metadata.ts +75 -81
  175. package/src/compat/next/cache.ts +68 -69
  176. package/src/compat/next/canonical-url.ts +9 -9
  177. package/src/compat/next/client-cache.ts +19 -19
  178. package/src/compat/next/client-navigation.ts +112 -116
  179. package/src/compat/next/client-only.ts +1 -1
  180. package/src/compat/next/client-script.tsx +99 -93
  181. package/src/compat/next/client-server.ts +10 -10
  182. package/src/compat/next/config-loader.ts +176 -173
  183. package/src/compat/next/config.ts +7 -7
  184. package/src/compat/next/constants.cjs +6 -6
  185. package/src/compat/next/constants.ts +6 -6
  186. package/src/compat/next/custom-server.ts +26 -24
  187. package/src/compat/next/dist/client/components/app-router-headers.ts +21 -21
  188. package/src/compat/next/dist/server/app-render/work-unit-async-storage.external.cjs +3 -4
  189. package/src/compat/next/dist/server/web/spec-extension/revalidate.ts +1 -1
  190. package/src/compat/next/dist/server/web/spec-extension/unstable-cache.ts +1 -1
  191. package/src/compat/next/dist/server/web/spec-extension/unstable-no-store.ts +1 -1
  192. package/src/compat/next/dynamic.tsx +21 -18
  193. package/src/compat/next/error.tsx +52 -52
  194. package/src/compat/next/font/cache.ts +74 -74
  195. package/src/compat/next/font/google.ts +2 -2
  196. package/src/compat/next/font/index.ts +1 -1
  197. package/src/compat/next/font/local.ts +3 -3
  198. package/src/compat/next/font/runtime-client.ts +17 -15
  199. package/src/compat/next/font/runtime.ts +443 -408
  200. package/src/compat/next/font/shared.ts +120 -108
  201. package/src/compat/next/form.tsx +63 -63
  202. package/src/compat/next/head.tsx +2 -2
  203. package/src/compat/next/headers.ts +103 -95
  204. package/src/compat/next/image/client.tsx +220 -0
  205. package/src/compat/next/image/config.ts +56 -58
  206. package/src/compat/next/image/optimizer.ts +40 -36
  207. package/src/compat/next/image/patterns.ts +37 -40
  208. package/src/compat/next/{image-props.ts → image/props.ts} +208 -202
  209. package/src/compat/next/image/shared.ts +65 -57
  210. package/src/compat/next/image/static-metadata.ts +98 -107
  211. package/src/compat/next/image/validate.ts +79 -88
  212. package/src/compat/next/image.tsx +19 -23
  213. package/src/compat/next/index.ts +1 -1
  214. package/src/compat/next/legacy-image.tsx +59 -60
  215. package/src/compat/next/{link-validation-transform.ts → link-transform.ts} +95 -96
  216. package/src/compat/next/link.tsx +158 -158
  217. package/src/compat/next/navigation.cjs +12 -3
  218. package/src/compat/next/navigation.ts +48 -50
  219. package/src/compat/next/offline.ts +27 -27
  220. package/src/compat/next/og.ts +121 -124
  221. package/src/compat/next/preferred-region.ts +13 -14
  222. package/src/compat/next/redirects.ts +58 -56
  223. package/src/compat/next/resource-hints.ts +73 -76
  224. package/src/compat/next/rewrites.ts +130 -133
  225. package/src/compat/next/root-params.ts +45 -45
  226. package/src/compat/next/{optimistic-route-state.ts → route-state.ts} +52 -52
  227. package/src/compat/next/router.cjs +4 -2
  228. package/src/compat/next/router.ts +58 -61
  229. package/src/compat/next/script.tsx +108 -108
  230. package/src/compat/next/server-only.ts +1 -1
  231. package/src/compat/next/server.ts +19 -19
  232. package/src/compat/next/svgr.ts +18 -17
  233. package/src/compat/next/telemetry.ts +24 -24
  234. package/src/compat/next/{image-usage.ts → usage.ts} +70 -39
  235. package/src/compat/next/user-agent.ts +53 -49
  236. package/src/compat/next/web-vitals.ts +22 -24
  237. package/src/compat/otel/api.ts +41 -41
  238. package/src/compat/otel/client-trace-metadata.ts +25 -27
  239. package/src/compat/otel/fetch-span.ts +29 -29
  240. package/src/compat/otel/tracer.ts +331 -331
  241. package/src/compat/pages/api.ts +456 -0
  242. package/src/compat/pages/client-plugin.ts +36 -36
  243. package/src/compat/pages/router-state.ts +34 -34
  244. package/src/compat/pages/{index.ts → router.ts} +130 -135
  245. package/src/compat/ppr/io.ts +12 -12
  246. package/src/compat/ppr/missing-root-params.ts +34 -38
  247. package/src/compat/ppr/root-params-scan.ts +66 -66
  248. package/src/compat/ppr/root-params-transform.ts +24 -26
  249. package/src/compat/ppr/root-params.ts +30 -30
  250. package/src/compat/ppr/segment-config-incompat.ts +6 -7
  251. package/src/compat/protocol.ts +71 -70
  252. package/src/compat/react/action-state.ts +47 -48
  253. package/src/compat/react/client-lite.ts +15 -15
  254. package/src/compat/react/client.ts +4 -4
  255. package/src/compat/react/compiler-runtime.ts +11 -11
  256. package/src/compat/react/dom-client.ts +44 -44
  257. package/src/compat/react/dom-react-server.ts +10 -16
  258. package/src/compat/react/dom-server.ts +10 -10
  259. package/src/compat/react/dom.ts +52 -52
  260. package/src/compat/react/hooks-extra.ts +34 -35
  261. package/src/compat/react/parity.ts +64 -61
  262. package/src/compat/react/preact.ts +81 -82
  263. package/src/compat/react/react-server.ts +28 -28
  264. package/src/compat/react/router-shim.ts +1 -1
  265. package/src/compat/react/server-component-use.ts +8 -8
  266. package/src/compat/react/server-inserted-html.ts +30 -31
  267. package/src/compat/react/server.ts +53 -55
  268. package/src/compat/react/use.ts +32 -32
  269. package/src/compat/react/view-transition.ts +20 -20
  270. package/src/compat/register/actions.ts +35 -824
  271. package/src/compat/register/boot.ts +41 -41
  272. package/src/compat/register/build-tier.ts +5 -5
  273. package/src/compat/register/build.ts +74 -70
  274. package/src/compat/register/bundler.ts +161 -156
  275. package/src/compat/register/cache.ts +20 -20
  276. package/src/compat/register/client-errors.ts +3 -3
  277. package/src/compat/register/config.ts +6 -6
  278. package/src/compat/register/css-extras.ts +30 -34
  279. package/src/compat/register/edge-runtime.ts +3 -3
  280. package/src/compat/register/errors.ts +10 -12
  281. package/src/compat/register/export.ts +16 -16
  282. package/src/compat/register/font.ts +11 -11
  283. package/src/compat/register/hooks.ts +2 -2
  284. package/src/compat/register/image.ts +40 -40
  285. package/src/compat/register/index.ts +59 -62
  286. package/src/compat/register/instrumentation-client.ts +10 -10
  287. package/src/compat/register/lifecycle.ts +25 -28
  288. package/src/compat/register/mdx.ts +10 -10
  289. package/src/compat/register/middleware.ts +226 -16
  290. package/src/compat/register/otel.ts +80 -88
  291. package/src/compat/register/pages-api.ts +10 -463
  292. package/src/compat/register/ppr.ts +16 -16
  293. package/src/compat/register/protocol.ts +17 -18
  294. package/src/compat/register/proxy.ts +49 -51
  295. package/src/compat/register/render.ts +79 -76
  296. package/src/compat/register/routing.ts +162 -159
  297. package/src/compat/register/segment.ts +24 -1887
  298. package/src/compat/register/static-image.ts +3 -3
  299. package/src/compat/register/{misc.ts → taint.ts} +9 -9
  300. package/src/compat/register/typed-routes.ts +14 -14
  301. package/src/compat/register/{usecache.ts → use-cache.ts} +39 -39
  302. package/src/compat/register/validation.ts +18 -18
  303. package/src/compat/segment/loading-boundary.ts +43 -45
  304. package/src/compat/segment/page-slot.ts +69 -69
  305. package/src/compat/segment/serve.ts +1884 -0
  306. package/src/compat/segment/tree.ts +113 -112
  307. package/src/compat/segment/vary-key.ts +38 -38
  308. package/src/compat/segment/vary-params.ts +138 -142
  309. package/src/compat/static-params.ts +14 -12
  310. package/src/compat/tsconfig-defaults.ts +87 -91
  311. package/src/compat/typecheck/{index.ts → check.ts} +234 -212
  312. package/src/compat/typecheck/worker.ts +15 -12
  313. package/src/compat/typed-routes/{index.ts → generate.ts} +36 -36
  314. package/src/compat/typed-routes/manifest.ts +174 -170
  315. package/src/compat/typed-routes/typegen.ts +127 -110
  316. package/src/compat/validation/errors.ts +16 -19
  317. package/src/compat/validation/prerender-diagnostics.ts +521 -504
  318. package/src/compat/validation/{index.ts → validate.ts} +647 -648
  319. package/src/compat-bootstrap.ts +16 -16
  320. package/src/config.ts +69 -69
  321. package/src/css/build.ts +230 -227
  322. package/src/css/postcss.ts +79 -80
  323. package/src/css/worker.ts +14 -15
  324. package/src/dev/client-actions.ts +10 -10
  325. package/src/dev/client-chunk-store.ts +27 -27
  326. package/src/dev/{client-key-cache.ts → restart/client-key.ts} +76 -76
  327. package/src/dev/{restart-cache.ts → restart/enabled.ts} +1 -1
  328. package/src/dev/{global-css-cache.ts → restart/global-css.ts} +91 -83
  329. package/src/dev/{node-module-bundle-cache.ts → restart/node-modules.ts} +24 -24
  330. package/src/dev/{route-bundle-key-cache.ts → restart/route-bundle-key.ts} +53 -53
  331. package/src/dev/{route-facts-cache.ts → restart/route-facts.ts} +82 -82
  332. package/src/dev/server.ts +804 -820
  333. package/src/env.ts +46 -43
  334. package/src/extensions.ts +491 -478
  335. package/src/index.ts +8 -8
  336. package/src/internal.ts +20 -23
  337. package/src/{islands → render}/boundary-error.ts +3 -3
  338. package/src/render/hooks.ts +71 -71
  339. package/src/render/island-context.ts +14 -14
  340. package/src/render/metadata.ts +310 -310
  341. package/src/{ppr-postpone.ts → render/postpone.ts} +5 -5
  342. package/src/{ppr.ts → render/ppr.ts} +244 -245
  343. package/src/render/renderer.ts +2076 -2082
  344. package/src/render/resource-hints.ts +16 -17
  345. package/src/render/slots.tsx +224 -235
  346. package/src/{islands → render}/static-children.ts +9 -12
  347. package/src/{islands → render}/static-slots.ts +37 -37
  348. package/src/{cache/context.ts → request/cache.ts} +20 -20
  349. package/src/request/context.ts +107 -107
  350. package/src/{dynamic/source.ts → resolve/dynamic.ts} +152 -143
  351. package/src/resolve/engine.ts +90 -77
  352. package/src/resolve/imports.ts +475 -463
  353. package/src/resolve/scan-facts.ts +442 -186
  354. package/src/resolve/source-text.ts +37 -37
  355. package/src/{dynamic → resolve}/tree-shake.ts +132 -128
  356. package/src/routing/forwarded.ts +19 -19
  357. package/src/routing/handler.ts +84 -91
  358. package/src/routing/href.ts +69 -70
  359. package/src/routing/{metadata.ts → metadata-files.ts} +403 -401
  360. package/src/{proxy.ts → routing/proxy.ts} +306 -312
  361. package/src/routing/{request-runtime.ts → request-environment.ts} +10 -10
  362. package/src/routing/routes.ts +833 -848
  363. package/src/routing/slots.ts +164 -160
  364. package/src/runtime/loader.ts +952 -0
  365. package/src/{dev → runtime}/module-cache.ts +309 -287
  366. package/src/{dev → runtime}/module-generations.ts +9 -9
  367. package/src/{dev → runtime}/module-transform.ts +81 -72
  368. package/src/{dev/imports.ts → runtime/modules.ts} +934 -847
  369. package/src/runtime/{server.ts → vendor-build.ts} +848 -1696
  370. package/src/runtime/vendor.ts +425 -404
  371. package/src/styles.d.ts +9 -0
  372. package/src/types.ts +320 -335
  373. package/src/utils/ansi.ts +5 -5
  374. package/src/utils/{source.ts → code.ts} +15 -12
  375. package/src/utils/content-type.ts +3 -3
  376. package/src/utils/decode.ts +2 -2
  377. package/src/utils/dev-profile.ts +13 -13
  378. package/src/utils/error-log.ts +6 -6
  379. package/src/utils/esbuild.ts +18 -18
  380. package/src/utils/fs-cache.ts +13 -13
  381. package/src/utils/fs.ts +57 -49
  382. package/src/utils/html.ts +20 -24
  383. package/src/utils/native-require.ts +8 -8
  384. package/src/utils/serialize.ts +139 -146
  385. package/src/utils/verbose.ts +18 -18
  386. package/src/cli/analyze-print.ts +0 -181
  387. package/src/compat/middleware/manifest.ts +0 -210
  388. package/src/compat/next/image-client.tsx +0 -215
  389. package/src/compat/next/link-usage.ts +0 -29
  390. package/src/css/index.ts +0 -2
  391. package/src/render/index.ts +0 -1
  392. 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
  }