@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
@@ -1,16 +1,16 @@
1
- import { dynamicCallFacts, rewriteFacts, type DynamicCallFact } from '../resolve/scan-facts';
1
+ import { dynamicCallFacts, rewriteFacts, type DynamicCallFact } from './scan-facts'
2
2
 
3
3
  export interface DynamicCall {
4
- index: number;
5
- name: string;
6
- open: number;
7
- close: number;
8
- source: string;
4
+ index: number
5
+ name: string
6
+ open: number
7
+ close: number
8
+ source: string
9
9
  }
10
10
 
11
11
  /** Cheap gate: a `dynamic` binding can only come from one of these specifiers. */
12
12
  export function sourceHasDynamicImport(source: string) {
13
- return source.includes('@wular/pnext') || source.includes('next/dynamic');
13
+ return source.includes('@wular/pnext') || source.includes('next/dynamic')
14
14
  }
15
15
 
16
16
  /**
@@ -19,55 +19,55 @@ export function sourceHasDynamicImport(source: string) {
19
19
  * scanning below stays textual.
20
20
  */
21
21
  export function pnextDynamicImportNames(source: string, file = 'module.tsx') {
22
- const names = new Set<string>();
23
- if (!sourceHasDynamicImport(source)) return names;
22
+ const names = new Set<string>()
23
+ if (!sourceHasDynamicImport(source)) return names
24
24
  for (const statement of rewriteFacts(file, source).imports) {
25
- const { specifier } = statement;
26
- const pnext = specifier === '@wular/pnext' || specifier === '@wular/pnext/dynamic';
25
+ const { specifier } = statement
26
+ const pnext = specifier === '@wular/pnext' || specifier === '@wular/pnext/dynamic'
27
27
  // The compat alias rewrite may already have turned `next/dynamic` into the
28
28
  // shim's own file path/href before this scan runs.
29
29
  const nextDynamic =
30
- specifier === 'next/dynamic' || /compat\/next\/dynamic(?:\.tsx)?$/.test(specifier);
31
- if (!pnext && !nextDynamic) continue;
30
+ specifier === 'next/dynamic' || /compat\/next\/dynamic(?:\.tsx)?$/.test(specifier)
31
+ if (!pnext && !nextDynamic) continue
32
32
  for (const binding of statement.bindings) {
33
- if (binding.type) continue;
33
+ if (binding.type) continue
34
34
  if (pnext ? binding.imported === 'dynamic' : binding.imported === 'default') {
35
- names.add(binding.local);
35
+ names.add(binding.local)
36
36
  }
37
37
  }
38
38
  }
39
- return names;
39
+ return names
40
40
  }
41
41
 
42
42
  export function dynamicCallsFromSource(source: string, dynamicNames: Set<string>) {
43
- const calls: DynamicCall[] = [];
44
- if (dynamicNames.size === 0) return calls;
43
+ const calls: DynamicCall[] = []
44
+ if (dynamicNames.size === 0) return calls
45
45
 
46
- let index = 0;
46
+ let index = 0
47
47
 
48
48
  while ((index = nextDynamicCallIndex(source, dynamicNames, index)) !== -1) {
49
- const name = dynamicNameAt(source, dynamicNames, index);
49
+ const name = dynamicNameAt(source, dynamicNames, index)
50
50
  if (!name) {
51
- index += 1;
52
- continue;
51
+ index += 1
52
+ continue
53
53
  }
54
- const before = source[index - 1];
55
- const after = source[index + name.length];
54
+ const before = source[index - 1]
55
+ const after = source[index + name.length]
56
56
  if ((before && /[\w$]/.test(before)) || (after && /[\w$]/.test(after))) {
57
- index += name.length;
58
- continue;
57
+ index += name.length
58
+ continue
59
59
  }
60
60
 
61
- const open = source.indexOf('(', index + name.length);
61
+ const open = source.indexOf('(', index + name.length)
62
62
  if (open === -1 || source.slice(index + name.length, open).trim()) {
63
- index += name.length;
64
- continue;
63
+ index += name.length
64
+ continue
65
65
  }
66
66
 
67
- const close = matchingParen(source, open);
67
+ const close = matchingParen(source, open)
68
68
  if (close === -1) {
69
- index = open + 1;
70
- continue;
69
+ index = open + 1
70
+ continue
71
71
  }
72
72
 
73
73
  calls.push({
@@ -76,36 +76,36 @@ export function dynamicCallsFromSource(source: string, dynamicNames: Set<string>
76
76
  open,
77
77
  close,
78
78
  source: source.slice(index, close + 1),
79
- });
80
- index = close + 1;
79
+ })
80
+ index = close + 1
81
81
  }
82
82
 
83
- return calls;
83
+ return calls
84
84
  }
85
85
 
86
86
  export function rewriteLiteralDynamicCalls(source: string, file?: string) {
87
- const dynamicNames = pnextDynamicImportNames(source, file);
88
- if (dynamicNames.size === 0) return source;
89
- const facts = dynamicCallFacts(source, file);
87
+ const dynamicNames = pnextDynamicImportNames(source, file)
88
+ if (dynamicNames.size === 0) return source
89
+ const facts = dynamicCallFacts(source, file)
90
90
 
91
- const edits: { start: number; end: number; value: string }[] = [];
91
+ const edits: { start: number; end: number; value: string }[] = []
92
92
  for (const call of dynamicCallsFromSource(source, dynamicNames)) {
93
- const fact = factForCall(facts, call);
94
- if (!fact?.literal) continue;
93
+ const fact = factForCall(facts, call)
94
+ if (!fact?.literal) continue
95
95
  edits.push({
96
96
  start: fact.specifierStart,
97
97
  end: fact.specifierEnd,
98
98
  value: `() => import(${source.slice(fact.specifierStart, fact.specifierEnd)})`,
99
- });
99
+ })
100
100
  }
101
101
 
102
- if (edits.length === 0) return source;
102
+ if (edits.length === 0) return source
103
103
 
104
- let next = source;
104
+ let next = source
105
105
  for (const edit of edits.reverse()) {
106
- next = `${next.slice(0, edit.start)}${edit.value}${next.slice(edit.end)}`;
106
+ next = `${next.slice(0, edit.start)}${edit.value}${next.slice(edit.end)}`
107
107
  }
108
- return next;
108
+ return next
109
109
  }
110
110
 
111
111
  // Server compiles append the statically-resolved import target as a third
@@ -118,39 +118,39 @@ export function rewriteDynamicCallTargets(
118
118
  resolve: (specifier: string) => string | undefined,
119
119
  file?: string,
120
120
  ) {
121
- const dynamicNames = pnextDynamicImportNames(source, file);
122
- if (dynamicNames.size === 0) return source;
123
- const facts = dynamicCallFacts(source, file);
121
+ const dynamicNames = pnextDynamicImportNames(source, file)
122
+ if (dynamicNames.size === 0) return source
123
+ const facts = dynamicCallFacts(source, file)
124
124
 
125
- const edits: { at: number; value: string }[] = [];
125
+ const edits: { at: number; value: string }[] = []
126
126
  for (const call of dynamicCallsFromSource(source, dynamicNames)) {
127
- const target = loaderImportTargetForCall(call, facts);
128
- if (!target) continue;
129
- const file = resolve(target.specifier);
130
- if (!file) continue;
131
-
132
- const args = source.slice(call.open + 1, call.close);
133
- const argCount = topLevelArgCount(args);
134
- if (argCount < 1 || argCount > 2) continue;
135
- const literal = JSON.stringify({ file, exportName: target.exportName });
136
- const separator = /,\s*$/.test(args) ? '' : ', ';
127
+ const target = loaderImportTargetForCall(call, facts)
128
+ if (!target) continue
129
+ const file = resolve(target.specifier)
130
+ if (!file) continue
131
+
132
+ const args = source.slice(call.open + 1, call.close)
133
+ const argCount = topLevelArgCount(args)
134
+ if (argCount < 1 || argCount > 2) continue
135
+ const literal = JSON.stringify({ file, exportName: target.exportName })
136
+ const separator = /,\s*$/.test(args) ? '' : ', '
137
137
  edits.push({
138
138
  at: call.close,
139
139
  value: `${separator}${argCount === 1 ? 'undefined, ' : ''}${literal}`,
140
- });
140
+ })
141
141
  }
142
142
 
143
- if (edits.length === 0) return source;
143
+ if (edits.length === 0) return source
144
144
 
145
- let next = source;
145
+ let next = source
146
146
  for (const edit of edits.reverse()) {
147
- next = `${next.slice(0, edit.at)}${edit.value}${next.slice(edit.at)}`;
147
+ next = `${next.slice(0, edit.at)}${edit.value}${next.slice(edit.at)}`
148
148
  }
149
- return next;
149
+ return next
150
150
  }
151
151
 
152
152
  function factForCall(facts: DynamicCallFact[], call: DynamicCall) {
153
- return facts.find(fact => fact.start === call.index);
153
+ return facts.find(fact => fact.start === call.index)
154
154
  }
155
155
 
156
156
  /**
@@ -159,14 +159,14 @@ function factForCall(facts: DynamicCallFact[], call: DynamicCall) {
159
159
  * calls (`dynamic('./x')`) answer undefined — they carry no `import()` yet.
160
160
  */
161
161
  function loaderImportTargetForCall(call: DynamicCall, facts: DynamicCallFact[]) {
162
- const fact = factForCall(facts, call);
163
- return fact && !fact.literal ? fact : undefined;
162
+ const fact = factForCall(facts, call)
163
+ return fact && !fact.literal ? fact : undefined
164
164
  }
165
165
 
166
166
  /** Dev split of `dynamic(ssr:false)` targets; `PNEXT_DYNAMIC_SPLIT=0` restores eager builds. */
167
167
  export function devDynamicSplitEnabled() {
168
168
  // eslint-disable-next-line turbo/no-undeclared-env-vars
169
- return process.env.PNEXT_DYNAMIC_SPLIT !== '0';
169
+ return process.env.PNEXT_DYNAMIC_SPLIT !== '0'
170
170
  }
171
171
 
172
172
  /**
@@ -180,28 +180,28 @@ export function rewriteDeferredDynamicImports(
180
180
  resolve: (specifier: string) => string | undefined,
181
181
  href: (target: { file: string; exportName: string }) => string | undefined,
182
182
  ) {
183
- const dynamicNames = pnextDynamicImportNames(source, file);
184
- if (dynamicNames.size === 0) return source;
185
- const deferred = deferredDynamicImportSpecifiers(source, file);
186
- if (deferred.size === 0) return source;
187
- const facts = dynamicCallFacts(source, file);
183
+ const dynamicNames = pnextDynamicImportNames(source, file)
184
+ if (dynamicNames.size === 0) return source
185
+ const deferred = deferredDynamicImportSpecifiers(source, file)
186
+ if (deferred.size === 0) return source
187
+ const facts = dynamicCallFacts(source, file)
188
188
 
189
- const edits: { start: number; end: number; value: string }[] = [];
189
+ const edits: { start: number; end: number; value: string }[] = []
190
190
  for (const call of dynamicCallsFromSource(source, dynamicNames)) {
191
- const target = loaderImportTargetForCall(call, facts);
192
- if (!target || !deferred.has(target.specifier)) continue;
193
- const resolved = resolve(target.specifier);
194
- if (!resolved) continue;
195
- const url = href({ file: resolved, exportName: target.exportName });
196
- if (!url) continue;
197
- edits.push({ start: target.specifierStart + 1, end: target.specifierEnd - 1, value: url });
191
+ const target = loaderImportTargetForCall(call, facts)
192
+ if (!target || !deferred.has(target.specifier)) continue
193
+ const resolved = resolve(target.specifier)
194
+ if (!resolved) continue
195
+ const url = href({ file: resolved, exportName: target.exportName })
196
+ if (!url) continue
197
+ edits.push({ start: target.specifierStart + 1, end: target.specifierEnd - 1, value: url })
198
198
  }
199
- if (edits.length === 0) return source;
200
- let next = source;
199
+ if (edits.length === 0) return source
200
+ let next = source
201
201
  for (const edit of edits.sort((a, b) => b.start - a.start)) {
202
- next = `${next.slice(0, edit.start)}${edit.value}${next.slice(edit.end)}`;
202
+ next = `${next.slice(0, edit.start)}${edit.value}${next.slice(edit.end)}`
203
203
  }
204
- return next;
204
+ return next
205
205
  }
206
206
 
207
207
  /**
@@ -209,108 +209,108 @@ export function rewriteDeferredDynamicImports(
209
209
  * without `ssr: true`) - the dev split points: their target modules compile on browser demand, not eagerly.
210
210
  */
211
211
  export function deferredDynamicImportSpecifiers(source: string, file?: string) {
212
- const deferred = new Set<string>();
213
- const dynamicNames = pnextDynamicImportNames(source, file);
214
- if (dynamicNames.size === 0) return deferred;
212
+ const deferred = new Set<string>()
213
+ const dynamicNames = pnextDynamicImportNames(source, file)
214
+ if (dynamicNames.size === 0) return deferred
215
215
 
216
216
  // `const opts = { ssr: false }` option objects referenced by name.
217
- const optionConsts = new Map<string, string>();
218
- const constPattern = /const\s+([A-Za-z_$][\w$]*)\s*=\s*({[\s\S]*?})\s*(?:as\s+const\s*)?;/g;
219
- let constMatch: RegExpExecArray | null;
217
+ const optionConsts = new Map<string, string>()
218
+ const constPattern = /const\s+([A-Za-z_$][\w$]*)\s*=\s*({[\s\S]*?})\s*(?:as\s+const\s*)?;/g
219
+ let constMatch: RegExpExecArray | null
220
220
  while ((constMatch = constPattern.exec(source))) {
221
- if (constMatch[1] && constMatch[2]) optionConsts.set(constMatch[1], constMatch[2]);
221
+ if (constMatch[1] && constMatch[2]) optionConsts.set(constMatch[1], constMatch[2])
222
222
  }
223
223
 
224
- const facts = dynamicCallFacts(source, file);
224
+ const facts = dynamicCallFacts(source, file)
225
225
  for (const call of dynamicCallsFromSource(source, dynamicNames)) {
226
- const target = loaderImportTargetForCall(call, facts);
227
- if (!target) continue;
226
+ const target = loaderImportTargetForCall(call, facts)
227
+ if (!target) continue
228
228
  // Token scan over the call plus any named option consts it references —
229
229
  // tolerant of the compile-appended target argument (rewriteDynamicCallTargets).
230
- const tail = source.slice(target.loaderEnd, call.close);
231
- let options = tail;
230
+ const tail = source.slice(target.loaderEnd, call.close)
231
+ let options = tail
232
232
  for (const identifier of tail.match(/[A-Za-z_$][\w$]*/g) ?? []) {
233
- const named = optionConsts.get(identifier);
234
- if (named) options += `\n${named}`;
233
+ const named = optionConsts.get(identifier)
234
+ if (named) options += `\n${named}`
235
235
  }
236
- const ssrFalse = /\bssr\s*:\s*false\b/.test(options);
236
+ const ssrFalse = /\bssr\s*:\s*false\b/.test(options)
237
237
  const visible =
238
- /\bload\s*:\s*['"]visible['"]/.test(options) && !/\bssr\s*:\s*true\b/.test(options);
239
- if (ssrFalse || visible) deferred.add(target.specifier);
238
+ /\bload\s*:\s*['"]visible['"]/.test(options) && !/\bssr\s*:\s*true\b/.test(options)
239
+ if (ssrFalse || visible) deferred.add(target.specifier)
240
240
  }
241
- return deferred;
241
+ return deferred
242
242
  }
243
243
 
244
244
  function topLevelArgCount(args: string) {
245
- let count = 0;
246
- let depth = 0;
247
- let quote: string | null = null;
248
- let sawArg = false;
245
+ let count = 0
246
+ let depth = 0
247
+ let quote: string | null = null
248
+ let sawArg = false
249
249
 
250
250
  for (let index = 0; index < args.length; index += 1) {
251
- const char = args[index];
251
+ const char = args[index]
252
252
  if (quote) {
253
- if (char === quote && args[index - 1] !== '\\') quote = null;
254
- continue;
253
+ if (char === quote && args[index - 1] !== '\\') quote = null
254
+ continue
255
255
  }
256
256
  if (char === '"' || char === "'" || char === '`') {
257
- quote = char;
258
- sawArg = true;
259
- continue;
257
+ quote = char
258
+ sawArg = true
259
+ continue
260
260
  }
261
- if (char === '(' || char === '[' || char === '{') depth += 1;
262
- if (char === ')' || char === ']' || char === '}') depth -= 1;
261
+ if (char === '(' || char === '[' || char === '{') depth += 1
262
+ if (char === ')' || char === ']' || char === '}') depth -= 1
263
263
  if (char === ',' && depth === 0) {
264
- if (sawArg) count += 1;
265
- sawArg = false;
266
- continue;
264
+ if (sawArg) count += 1
265
+ sawArg = false
266
+ continue
267
267
  }
268
- if (!/\s/.test(char ?? '')) sawArg = true;
268
+ if (!/\s/.test(char ?? '')) sawArg = true
269
269
  }
270
270
 
271
- return sawArg ? count + 1 : count;
271
+ return sawArg ? count + 1 : count
272
272
  }
273
273
 
274
274
  function matchingParen(source: string, open: number) {
275
- let depth = 0;
276
- let quote: string | null = null;
275
+ let depth = 0
276
+ let quote: string | null = null
277
277
 
278
278
  for (let index = open; index < source.length; index += 1) {
279
- const char = source[index];
280
- const previous = source[index - 1];
279
+ const char = source[index]
280
+ const previous = source[index - 1]
281
281
 
282
282
  if (quote) {
283
- if (char === quote && previous !== '\\') quote = null;
284
- continue;
283
+ if (char === quote && previous !== '\\') quote = null
284
+ continue
285
285
  }
286
286
 
287
287
  if (char === '"' || char === "'" || char === '`') {
288
- quote = char;
289
- continue;
288
+ quote = char
289
+ continue
290
290
  }
291
291
 
292
- if (char === '(') depth += 1;
292
+ if (char === '(') depth += 1
293
293
  if (char === ')') {
294
- depth -= 1;
295
- if (depth === 0) return index;
294
+ depth -= 1
295
+ if (depth === 0) return index
296
296
  }
297
297
  }
298
298
 
299
- return -1;
299
+ return -1
300
300
  }
301
301
 
302
302
  function nextDynamicCallIndex(source: string, dynamicNames: Set<string>, fromIndex: number) {
303
- let next = -1;
303
+ let next = -1
304
304
  for (const name of dynamicNames) {
305
- const index = source.indexOf(name, fromIndex);
306
- if (index !== -1 && (next === -1 || index < next)) next = index;
305
+ const index = source.indexOf(name, fromIndex)
306
+ if (index !== -1 && (next === -1 || index < next)) next = index
307
307
  }
308
- return next;
308
+ return next
309
309
  }
310
310
 
311
311
  function dynamicNameAt(source: string, dynamicNames: Set<string>, index: number) {
312
312
  for (const name of dynamicNames) {
313
- if (source.startsWith(name, index)) return name;
313
+ if (source.startsWith(name, index)) return name
314
314
  }
315
- return undefined;
315
+ return undefined
316
316
  }