@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.
- package/README.md +11 -11
- package/bin/pnext +1 -1
- package/config/lint/base.js +7 -7
- package/config/ts/base.json +2 -4
- package/config/ts/react.json +2 -6
- package/package.json +23 -2
- package/reference/compat.md +1 -1
- package/reference/config.md +2 -2
- package/reference/css.md +13 -9
- package/reference/dev.md +1 -1
- package/reference/metadata.md +7 -7
- package/reference/navigation.md +35 -28
- package/reference/performance.md +70 -70
- package/reference/rendering.md +17 -17
- package/reference/routing.md +17 -17
- package/reference/typegen.md +12 -8
- package/src/api/cache.ts +36 -37
- package/src/api/client-cache.ts +2 -2
- package/src/api/client-navigation.ts +113 -109
- package/src/api/dynamic.tsx +58 -55
- package/src/api/link.tsx +49 -52
- package/src/api/navigation.ts +59 -58
- package/src/api/server.ts +152 -144
- package/src/api/suspense.ts +4 -4
- package/src/cli/adapters/vercel-warm.ts +126 -121
- package/src/cli/adapters/vercel.ts +437 -443
- package/src/cli/analyze.ts +333 -144
- package/src/cli/{named-bin.ts → boot/named-bin.ts} +37 -37
- package/src/cli/{boot-trace.ts → boot/trace.ts} +10 -10
- package/src/cli/build.ts +976 -978
- package/src/cli/create.ts +71 -63
- package/src/cli/dev.ts +116 -116
- package/src/cli/index.ts +88 -85
- package/src/cli/migrate/package-json.ts +73 -71
- package/src/cli/migrate/report.ts +32 -33
- package/src/cli/migrate/{index.ts → run.ts} +48 -49
- package/src/cli/migrate/scan.ts +46 -46
- package/src/cli/migrate/spinner.ts +9 -9
- package/src/cli/migrate/tsconfig.ts +35 -35
- package/src/cli/{server-entry.ts → serve/entry.ts} +57 -57
- package/src/cli/{request-pipeline.ts → serve/pipeline.ts} +386 -394
- package/src/cli/{serve-ui.ts → serve/ui.ts} +47 -47
- package/src/cli/start.ts +65 -66
- package/src/{typegen.ts → cli/typegen.ts} +59 -59
- package/src/client/build.ts +794 -768
- package/src/client/chunk-fold.ts +245 -240
- package/src/client/{paths.ts → chunk-name.ts} +6 -6
- package/src/client/entry.ts +162 -147
- package/src/client/prebuilt.ts +231 -223
- package/src/client/profile.ts +29 -29
- package/src/client/react-compiler.ts +20 -15
- package/src/client/{compat-surface.ts → react-tier.ts} +64 -64
- package/src/client/reference-stub.ts +51 -51
- package/src/client/reference.ts +19 -19
- package/src/{api → client}/router/events.ts +17 -17
- package/src/{api → client}/router/history.ts +16 -16
- package/src/{api → client}/router/hub.ts +52 -53
- package/src/{api/router.ts → client/router/index.ts} +61 -60
- package/src/{api → client}/router/policies.ts +24 -24
- package/src/{api → client}/router/runtime.ts +1988 -1961
- package/src/{api → client}/router/types.ts +93 -98
- package/src/compat/actions/client-plugin.ts +42 -43
- package/src/compat/actions/client-stub.ts +14 -14
- package/src/compat/actions/{action-client.ts → client.ts} +194 -193
- package/src/compat/actions/config.ts +63 -64
- package/src/compat/actions/detect.ts +68 -68
- package/src/compat/actions/discovery.ts +105 -105
- package/src/compat/actions/{action-dispatch.ts → dispatch.ts} +277 -274
- package/src/compat/actions/early-submit.ts +1 -1
- package/src/compat/actions/endpoint.ts +198 -198
- package/src/compat/actions/extensions.ts +811 -0
- package/src/compat/actions/flight.ts +23 -23
- package/src/compat/actions/form-state.ts +34 -34
- package/src/compat/actions/hoist.ts +382 -236
- package/src/compat/actions/ids.ts +7 -12
- package/src/compat/actions/index.ts +8 -8
- package/src/compat/actions/instances.ts +46 -46
- package/src/compat/actions/origin.ts +47 -48
- package/src/compat/actions/protocol.ts +22 -22
- package/src/compat/actions/registry.ts +19 -19
- package/src/compat/{misc/action-return.ts → actions/return.ts} +60 -57
- package/src/compat/actions/rewrite.ts +125 -125
- package/src/compat/actions/{action-router.ts → router.ts} +10 -10
- package/src/compat/actions/serve.ts +132 -136
- package/src/compat/actions/server-tag.ts +4 -4
- package/src/compat/actions/{action-shared.ts → shared.ts} +34 -34
- package/src/compat/actions/unrecognized-error.ts +4 -4
- package/src/compat/{index.ts → aliases.ts} +112 -109
- package/src/compat/bundler/bun-externals.ts +18 -18
- package/src/compat/bundler/cjs-exports.ts +271 -223
- package/src/compat/bundler/config.ts +116 -111
- package/src/compat/bundler/externals.ts +12 -12
- package/src/compat/bundler/import-meta-url.ts +19 -19
- package/src/compat/bundler/modularize-imports.ts +36 -33
- package/src/compat/bundler/new-url-asset.ts +22 -24
- package/src/compat/bundler/optimize-package-imports.ts +111 -107
- package/src/compat/bundler/polyfill.ts +28 -28
- package/src/compat/bundler/react-compiler.ts +35 -29
- package/src/compat/bundler/react-profiler.tsx +11 -11
- package/src/compat/bundler/relay-transform.ts +48 -47
- package/src/compat/bundler/require-context.ts +119 -113
- package/src/compat/bundler/resolve-extensions.ts +19 -19
- package/src/compat/bundler/source-cache.ts +25 -25
- package/src/compat/bundler/static-imports.ts +7 -7
- package/src/compat/bundler/symlink-imports.ts +46 -46
- package/src/compat/bundler/tsconfig-paths.ts +13 -15
- package/src/compat/bundler/wasm.ts +58 -60
- package/src/compat/bundler/webpack-loaders.ts +254 -241
- package/src/compat/bundler/worker.ts +101 -104
- package/src/compat/cache/build-flags.ts +29 -29
- package/src/compat/cache/build-prerender-errors.ts +40 -44
- package/src/compat/cache/custom-handler.ts +60 -53
- package/src/compat/cache/fetch-patch.ts +240 -240
- package/src/compat/cache/handler.ts +27 -31
- package/src/compat/cache/modern-handler.ts +148 -126
- package/src/compat/cache/resume-data-cache.ts +47 -45
- package/src/compat/cache/revalidate.ts +233 -232
- package/src/compat/cache/runtime-error.ts +35 -35
- package/src/compat/cache/use-cache-transform.ts +442 -417
- package/src/compat/cache/use-cache.ts +650 -614
- package/src/compat/cache-control.ts +140 -142
- package/src/compat/client/base-path.ts +21 -20
- package/src/compat/client/css-order.ts +18 -18
- package/src/compat/client/errors/bare-boundary.ts +11 -11
- package/src/compat/client/errors/control-flow.ts +23 -23
- package/src/compat/client/errors/error-boundary.ts +61 -61
- package/src/compat/client/errors/global-error.ts +101 -91
- package/src/compat/client/errors/install.ts +71 -72
- package/src/compat/client/errors/lazy.ts +23 -23
- package/src/compat/client/errors/primitive-throw.ts +47 -45
- package/src/compat/client/errors/soft-refresh.ts +4 -4
- package/src/compat/client/link-status.ts +33 -33
- package/src/compat/client/{nav-compat-runtime.ts → nav-runtime.ts} +20 -20
- package/src/compat/client/{nav-compat.ts → nav.ts} +12 -13
- package/src/compat/client/navigation-scroll.ts +63 -63
- package/src/compat/client/optimistic-routing.ts +93 -88
- package/src/compat/client/prefetch-cache.ts +23 -24
- package/src/compat/client/route-announcer.ts +35 -35
- package/src/compat/client/segment-cache-policy.ts +20 -20
- package/src/compat/client/segment-cache.ts +309 -315
- package/src/compat/client/segment-prefetch.ts +127 -132
- package/src/compat/client/trailing-slash.ts +5 -4
- package/src/compat/css/chunking.ts +113 -116
- package/src/compat/css/inline-css.ts +21 -21
- package/src/compat/css/lightningcss.ts +37 -38
- package/src/compat/css/modules.ts +161 -175
- package/src/compat/css/nonce.ts +7 -7
- package/src/compat/css/sass-plugin.ts +18 -21
- package/src/compat/css/sass.ts +150 -152
- package/src/compat/css/styled-jsx-runtime.ts +27 -27
- package/src/compat/css/styled-jsx.ts +21 -21
- package/src/compat/edge-runtime.ts +27 -27
- package/src/compat/{adapter → export}/build-complete.ts +72 -75
- package/src/compat/export/client.ts +29 -31
- package/src/compat/export/{index.ts → emit.ts} +111 -110
- package/src/compat/export/standalone.ts +62 -54
- package/src/compat/image-optimizer/cache.ts +51 -49
- package/src/compat/image-optimizer/detect.ts +52 -52
- package/src/compat/image-optimizer/{index.ts → optimize.ts} +189 -194
- package/src/compat/image-optimizer/source.ts +77 -80
- package/src/compat/lifecycle/after-scope.ts +26 -26
- package/src/compat/lifecycle/after.ts +48 -45
- package/src/compat/lifecycle/error-funnel.ts +98 -102
- package/src/compat/lifecycle/error-serialize.ts +30 -26
- package/src/compat/lifecycle/error-ui.ts +67 -32
- package/src/compat/lifecycle/instrumentation-client.ts +36 -38
- package/src/compat/lifecycle/instrumentation.ts +85 -85
- package/src/compat/lifecycle/node-console.ts +11 -11
- package/src/compat/lifecycle/testmode.ts +160 -132
- package/src/compat/mdx/compile.ts +60 -57
- package/src/compat/mdx/plugin.ts +11 -11
- package/src/compat/mdx/{next-mdx-stub.ts → stub.ts} +5 -5
- package/src/compat/{metadata-route-artifacts.ts → metadata-artifacts.ts} +195 -191
- package/src/compat/metadata.ts +75 -81
- package/src/compat/next/cache.ts +68 -69
- package/src/compat/next/canonical-url.ts +9 -9
- package/src/compat/next/client-cache.ts +19 -19
- package/src/compat/next/client-navigation.ts +112 -116
- package/src/compat/next/client-only.ts +1 -1
- package/src/compat/next/client-script.tsx +99 -93
- package/src/compat/next/client-server.ts +10 -10
- package/src/compat/next/config-loader.ts +176 -173
- package/src/compat/next/config.ts +7 -7
- package/src/compat/next/constants.cjs +6 -6
- package/src/compat/next/constants.ts +6 -6
- package/src/compat/next/custom-server.ts +26 -24
- package/src/compat/next/dist/client/components/app-router-headers.ts +21 -21
- package/src/compat/next/dist/server/app-render/work-unit-async-storage.external.cjs +3 -4
- package/src/compat/next/dist/server/web/spec-extension/revalidate.ts +1 -1
- package/src/compat/next/dist/server/web/spec-extension/unstable-cache.ts +1 -1
- package/src/compat/next/dist/server/web/spec-extension/unstable-no-store.ts +1 -1
- package/src/compat/next/dynamic.tsx +21 -18
- package/src/compat/next/error.tsx +52 -52
- package/src/compat/next/font/cache.ts +74 -74
- package/src/compat/next/font/google.ts +2 -2
- package/src/compat/next/font/index.ts +1 -1
- package/src/compat/next/font/local.ts +3 -3
- package/src/compat/next/font/runtime-client.ts +17 -15
- package/src/compat/next/font/runtime.ts +443 -408
- package/src/compat/next/font/shared.ts +120 -108
- package/src/compat/next/form.tsx +63 -63
- package/src/compat/next/head.tsx +2 -2
- package/src/compat/next/headers.ts +103 -95
- package/src/compat/next/image/client.tsx +220 -0
- package/src/compat/next/image/config.ts +56 -58
- package/src/compat/next/image/optimizer.ts +40 -36
- package/src/compat/next/image/patterns.ts +37 -40
- package/src/compat/next/{image-props.ts → image/props.ts} +208 -202
- package/src/compat/next/image/shared.ts +65 -57
- package/src/compat/next/image/static-metadata.ts +98 -107
- package/src/compat/next/image/validate.ts +79 -88
- package/src/compat/next/image.tsx +19 -23
- package/src/compat/next/index.ts +1 -1
- package/src/compat/next/legacy-image.tsx +59 -60
- package/src/compat/next/{link-validation-transform.ts → link-transform.ts} +95 -96
- package/src/compat/next/link.tsx +158 -158
- package/src/compat/next/navigation.cjs +12 -3
- package/src/compat/next/navigation.ts +48 -50
- package/src/compat/next/offline.ts +27 -27
- package/src/compat/next/og.ts +121 -124
- package/src/compat/next/preferred-region.ts +13 -14
- package/src/compat/next/redirects.ts +58 -56
- package/src/compat/next/resource-hints.ts +73 -76
- package/src/compat/next/rewrites.ts +130 -133
- package/src/compat/next/root-params.ts +45 -45
- package/src/compat/next/{optimistic-route-state.ts → route-state.ts} +52 -52
- package/src/compat/next/router.cjs +4 -2
- package/src/compat/next/router.ts +58 -61
- package/src/compat/next/script.tsx +108 -108
- package/src/compat/next/server-only.ts +1 -1
- package/src/compat/next/server.ts +19 -19
- package/src/compat/next/svgr.ts +18 -17
- package/src/compat/next/telemetry.ts +24 -24
- package/src/compat/next/{image-usage.ts → usage.ts} +70 -39
- package/src/compat/next/user-agent.ts +53 -49
- package/src/compat/next/web-vitals.ts +22 -24
- package/src/compat/otel/api.ts +41 -41
- package/src/compat/otel/client-trace-metadata.ts +25 -27
- package/src/compat/otel/fetch-span.ts +29 -29
- package/src/compat/otel/tracer.ts +331 -331
- package/src/compat/pages/api.ts +456 -0
- package/src/compat/pages/client-plugin.ts +36 -36
- package/src/compat/pages/router-state.ts +34 -34
- package/src/compat/pages/{index.ts → router.ts} +130 -135
- package/src/compat/ppr/io.ts +12 -12
- package/src/compat/ppr/missing-root-params.ts +34 -38
- package/src/compat/ppr/root-params-scan.ts +66 -66
- package/src/compat/ppr/root-params-transform.ts +24 -26
- package/src/compat/ppr/root-params.ts +30 -30
- package/src/compat/ppr/segment-config-incompat.ts +6 -7
- package/src/compat/protocol.ts +71 -70
- package/src/compat/react/action-state.ts +47 -48
- package/src/compat/react/client-lite.ts +15 -15
- package/src/compat/react/client.ts +4 -4
- package/src/compat/react/compiler-runtime.ts +11 -11
- package/src/compat/react/dom-client.ts +44 -44
- package/src/compat/react/dom-react-server.ts +10 -16
- package/src/compat/react/dom-server.ts +10 -10
- package/src/compat/react/dom.ts +52 -52
- package/src/compat/react/hooks-extra.ts +34 -35
- package/src/compat/react/parity.ts +64 -61
- package/src/compat/react/preact.ts +81 -82
- package/src/compat/react/react-server.ts +28 -28
- package/src/compat/react/router-shim.ts +1 -1
- package/src/compat/react/server-component-use.ts +8 -8
- package/src/compat/react/server-inserted-html.ts +30 -31
- package/src/compat/react/server.ts +53 -55
- package/src/compat/react/use.ts +32 -32
- package/src/compat/react/view-transition.ts +20 -20
- package/src/compat/register/actions.ts +35 -824
- package/src/compat/register/boot.ts +41 -41
- package/src/compat/register/build-tier.ts +5 -5
- package/src/compat/register/build.ts +74 -70
- package/src/compat/register/bundler.ts +161 -156
- package/src/compat/register/cache.ts +20 -20
- package/src/compat/register/client-errors.ts +3 -3
- package/src/compat/register/config.ts +6 -6
- package/src/compat/register/css-extras.ts +30 -34
- package/src/compat/register/edge-runtime.ts +3 -3
- package/src/compat/register/errors.ts +10 -12
- package/src/compat/register/export.ts +16 -16
- package/src/compat/register/font.ts +11 -11
- package/src/compat/register/hooks.ts +2 -2
- package/src/compat/register/image.ts +40 -40
- package/src/compat/register/index.ts +59 -62
- package/src/compat/register/instrumentation-client.ts +10 -10
- package/src/compat/register/lifecycle.ts +25 -28
- package/src/compat/register/mdx.ts +10 -10
- package/src/compat/register/middleware.ts +226 -16
- package/src/compat/register/otel.ts +80 -88
- package/src/compat/register/pages-api.ts +10 -463
- package/src/compat/register/ppr.ts +16 -16
- package/src/compat/register/protocol.ts +17 -18
- package/src/compat/register/proxy.ts +49 -51
- package/src/compat/register/render.ts +79 -76
- package/src/compat/register/routing.ts +162 -159
- package/src/compat/register/segment.ts +24 -1887
- package/src/compat/register/static-image.ts +3 -3
- package/src/compat/register/{misc.ts → taint.ts} +9 -9
- package/src/compat/register/typed-routes.ts +14 -14
- package/src/compat/register/{usecache.ts → use-cache.ts} +39 -39
- package/src/compat/register/validation.ts +18 -18
- package/src/compat/segment/loading-boundary.ts +43 -45
- package/src/compat/segment/page-slot.ts +69 -69
- package/src/compat/segment/serve.ts +1884 -0
- package/src/compat/segment/tree.ts +113 -112
- package/src/compat/segment/vary-key.ts +38 -38
- package/src/compat/segment/vary-params.ts +138 -142
- package/src/compat/static-params.ts +14 -12
- package/src/compat/tsconfig-defaults.ts +87 -91
- package/src/compat/typecheck/{index.ts → check.ts} +234 -212
- package/src/compat/typecheck/worker.ts +15 -12
- package/src/compat/typed-routes/{index.ts → generate.ts} +36 -36
- package/src/compat/typed-routes/manifest.ts +174 -170
- package/src/compat/typed-routes/typegen.ts +127 -110
- package/src/compat/validation/errors.ts +16 -19
- package/src/compat/validation/prerender-diagnostics.ts +521 -504
- package/src/compat/validation/{index.ts → validate.ts} +647 -648
- package/src/compat-bootstrap.ts +16 -16
- package/src/config.ts +69 -69
- package/src/css/build.ts +230 -227
- package/src/css/postcss.ts +79 -80
- package/src/css/worker.ts +14 -15
- package/src/dev/client-actions.ts +10 -10
- package/src/dev/client-chunk-store.ts +27 -27
- package/src/dev/{client-key-cache.ts → restart/client-key.ts} +76 -76
- package/src/dev/{restart-cache.ts → restart/enabled.ts} +1 -1
- package/src/dev/{global-css-cache.ts → restart/global-css.ts} +91 -83
- package/src/dev/{node-module-bundle-cache.ts → restart/node-modules.ts} +24 -24
- package/src/dev/{route-bundle-key-cache.ts → restart/route-bundle-key.ts} +53 -53
- package/src/dev/{route-facts-cache.ts → restart/route-facts.ts} +82 -82
- package/src/dev/server.ts +804 -820
- package/src/env.ts +46 -43
- package/src/extensions.ts +491 -478
- package/src/index.ts +8 -8
- package/src/internal.ts +20 -23
- package/src/{islands → render}/boundary-error.ts +3 -3
- package/src/render/hooks.ts +71 -71
- package/src/render/island-context.ts +14 -14
- package/src/render/metadata.ts +310 -310
- package/src/{ppr-postpone.ts → render/postpone.ts} +5 -5
- package/src/{ppr.ts → render/ppr.ts} +244 -245
- package/src/render/renderer.ts +2076 -2082
- package/src/render/resource-hints.ts +16 -17
- package/src/render/slots.tsx +224 -235
- package/src/{islands → render}/static-children.ts +9 -12
- package/src/{islands → render}/static-slots.ts +37 -37
- package/src/{cache/context.ts → request/cache.ts} +20 -20
- package/src/request/context.ts +107 -107
- package/src/{dynamic/source.ts → resolve/dynamic.ts} +152 -143
- package/src/resolve/engine.ts +90 -77
- package/src/resolve/imports.ts +475 -463
- package/src/resolve/scan-facts.ts +442 -186
- package/src/resolve/source-text.ts +37 -37
- package/src/{dynamic → resolve}/tree-shake.ts +132 -128
- package/src/routing/forwarded.ts +19 -19
- package/src/routing/handler.ts +84 -91
- package/src/routing/href.ts +69 -70
- package/src/routing/{metadata.ts → metadata-files.ts} +403 -401
- package/src/{proxy.ts → routing/proxy.ts} +306 -312
- package/src/routing/{request-runtime.ts → request-environment.ts} +10 -10
- package/src/routing/routes.ts +833 -848
- package/src/routing/slots.ts +164 -160
- package/src/runtime/loader.ts +952 -0
- package/src/{dev → runtime}/module-cache.ts +309 -287
- package/src/{dev → runtime}/module-generations.ts +9 -9
- package/src/{dev → runtime}/module-transform.ts +81 -72
- package/src/{dev/imports.ts → runtime/modules.ts} +934 -847
- package/src/runtime/{server.ts → vendor-build.ts} +848 -1696
- package/src/runtime/vendor.ts +425 -404
- package/src/styles.d.ts +9 -0
- package/src/types.ts +320 -335
- package/src/utils/ansi.ts +5 -5
- package/src/utils/{source.ts → code.ts} +15 -12
- package/src/utils/content-type.ts +3 -3
- package/src/utils/decode.ts +2 -2
- package/src/utils/dev-profile.ts +13 -13
- package/src/utils/error-log.ts +6 -6
- package/src/utils/esbuild.ts +18 -18
- package/src/utils/fs-cache.ts +13 -13
- package/src/utils/fs.ts +57 -49
- package/src/utils/html.ts +20 -24
- package/src/utils/native-require.ts +8 -8
- package/src/utils/serialize.ts +139 -146
- package/src/utils/verbose.ts +18 -18
- package/src/cli/analyze-print.ts +0 -181
- package/src/compat/middleware/manifest.ts +0 -210
- package/src/compat/next/image-client.tsx +0 -215
- package/src/compat/next/link-usage.ts +0 -29
- package/src/css/index.ts +0 -2
- package/src/render/index.ts +0 -1
- package/src/style-modules.d.ts +0 -9
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { existsSync } from 'node:fs'
|
|
2
|
-
import { createRequire } from 'node:module'
|
|
3
|
-
import path from 'node:path'
|
|
4
|
-
import { pathToFileHref } from '../../config'
|
|
5
|
-
import { DEFAULT_BODY_LIMIT_BYTES } from './endpoint'
|
|
1
|
+
import { existsSync } from 'node:fs'
|
|
2
|
+
import { createRequire } from 'node:module'
|
|
3
|
+
import path from 'node:path'
|
|
4
|
+
import { pathToFileHref } from '../../config'
|
|
5
|
+
import { DEFAULT_BODY_LIMIT_BYTES } from './endpoint'
|
|
6
6
|
|
|
7
7
|
/**
|
|
8
8
|
* Server-actions options read from the app's next.config in compat mode:
|
|
@@ -11,33 +11,33 @@ import { DEFAULT_BODY_LIMIT_BYTES } from './endpoint';
|
|
|
11
11
|
* message - the size-limit e2e suite asserts the text.
|
|
12
12
|
*/
|
|
13
13
|
export const SIZE_LIMIT_ERROR =
|
|
14
|
-
'Server Actions Size Limit must be a valid number or filesize format larger than 1MB'
|
|
14
|
+
'Server Actions Size Limit must be a valid number or filesize format larger than 1MB'
|
|
15
15
|
|
|
16
16
|
export interface ServerActionsConfig {
|
|
17
|
-
bodySizeLimitBytes: number
|
|
17
|
+
bodySizeLimitBytes: number
|
|
18
18
|
}
|
|
19
19
|
|
|
20
20
|
export interface NextConfigShape {
|
|
21
|
-
serverActions?: { bodySizeLimit?: unknown }
|
|
22
|
-
experimental?: { serverActions?: { bodySizeLimit?: unknown } | boolean }
|
|
23
|
-
rewrites?: () => unknown
|
|
24
|
-
redirects?: () => unknown
|
|
21
|
+
serverActions?: { bodySizeLimit?: unknown }
|
|
22
|
+
experimental?: { serverActions?: { bodySizeLimit?: unknown } | boolean }
|
|
23
|
+
rewrites?: () => unknown
|
|
24
|
+
redirects?: () => unknown
|
|
25
25
|
}
|
|
26
26
|
|
|
27
27
|
export async function loadServerActionsConfig(root: string): Promise<ServerActionsConfig> {
|
|
28
|
-
const config = await loadResolvedNextConfig(root)
|
|
29
|
-
const experimental = config?.experimental
|
|
28
|
+
const config = await loadResolvedNextConfig(root)
|
|
29
|
+
const experimental = config?.experimental
|
|
30
30
|
const limit =
|
|
31
31
|
config?.serverActions?.bodySizeLimit ??
|
|
32
32
|
(experimental && typeof experimental === 'object' && experimental.serverActions
|
|
33
33
|
? (experimental.serverActions as { bodySizeLimit?: unknown }).bodySizeLimit
|
|
34
|
-
: undefined)
|
|
35
|
-
if (limit === undefined) return { bodySizeLimitBytes: DEFAULT_BODY_LIMIT_BYTES }
|
|
36
|
-
return { bodySizeLimitBytes: parseBodySizeLimit(limit) }
|
|
34
|
+
: undefined)
|
|
35
|
+
if (limit === undefined) return { bodySizeLimitBytes: DEFAULT_BODY_LIMIT_BYTES }
|
|
36
|
+
return { bodySizeLimitBytes: parseBodySizeLimit(limit) }
|
|
37
37
|
}
|
|
38
38
|
|
|
39
39
|
export async function loadResolvedNextConfig(root: string): Promise<NextConfigShape | undefined> {
|
|
40
|
-
return (await loadNextConfigFromStore()) ?? (await loadNextConfig(root))
|
|
40
|
+
return (await loadNextConfigFromStore()) ?? (await loadNextConfig(root))
|
|
41
41
|
}
|
|
42
42
|
|
|
43
43
|
/**
|
|
@@ -50,51 +50,51 @@ export async function loadResolvedNextConfig(root: string): Promise<NextConfigSh
|
|
|
50
50
|
*/
|
|
51
51
|
async function loadNextConfigFromStore(): Promise<NextConfigShape | undefined> {
|
|
52
52
|
try {
|
|
53
|
-
const { getNextConfig } = await import('../next/config-loader')
|
|
54
|
-
const store: NextConfigShape = getNextConfig()
|
|
55
|
-
return store && Object.keys(store).length > 0 ? store : undefined
|
|
53
|
+
const { getNextConfig } = await import('../next/config-loader')
|
|
54
|
+
const store: NextConfigShape = getNextConfig()
|
|
55
|
+
return store && Object.keys(store).length > 0 ? store : undefined
|
|
56
56
|
} catch {
|
|
57
|
-
return undefined
|
|
57
|
+
return undefined
|
|
58
58
|
}
|
|
59
59
|
}
|
|
60
60
|
|
|
61
61
|
export async function loadNextConfig(root: string): Promise<NextConfigShape | undefined> {
|
|
62
62
|
for (const name of ['next.config.js', 'next.config.mjs', 'next.config.cjs']) {
|
|
63
|
-
const file = path.join(root, name)
|
|
64
|
-
if (!existsSync(file)) continue
|
|
63
|
+
const file = path.join(root, name)
|
|
64
|
+
if (!existsSync(file)) continue
|
|
65
65
|
try {
|
|
66
66
|
if (name.endsWith('.js') || name.endsWith('.cjs')) {
|
|
67
|
-
const requireFrom = createRequire(path.join(root, 'noop.js'))
|
|
68
|
-
delete requireFrom.cache[requireFrom.resolve(file)]
|
|
69
|
-
const required: unknown = requireFrom(file)
|
|
67
|
+
const requireFrom = createRequire(path.join(root, 'noop.js'))
|
|
68
|
+
delete requireFrom.cache[requireFrom.resolve(file)]
|
|
69
|
+
const required: unknown = requireFrom(file)
|
|
70
70
|
let value =
|
|
71
71
|
required && typeof required === 'object' && 'default' in required
|
|
72
72
|
? required.default
|
|
73
|
-
: required
|
|
73
|
+
: required
|
|
74
74
|
if (typeof value === 'function') {
|
|
75
75
|
value = await (value as (phase: string, ctx: { defaultConfig: object }) => unknown)(
|
|
76
76
|
'phase-production-server',
|
|
77
77
|
{ defaultConfig: {} },
|
|
78
|
-
)
|
|
78
|
+
)
|
|
79
79
|
}
|
|
80
|
-
return value ?? undefined
|
|
80
|
+
return value ?? undefined
|
|
81
81
|
}
|
|
82
82
|
const loaded = (await import(`${pathToFileHref(file)}?v=${Date.now()}`)) as {
|
|
83
|
-
default?: unknown
|
|
84
|
-
}
|
|
85
|
-
let value: unknown = loaded.default ?? loaded
|
|
83
|
+
default?: unknown
|
|
84
|
+
}
|
|
85
|
+
let value: unknown = loaded.default ?? loaded
|
|
86
86
|
if (typeof value === 'function') {
|
|
87
87
|
value = await (value as (phase: string, ctx: { defaultConfig: object }) => unknown)(
|
|
88
88
|
'phase-production-server',
|
|
89
89
|
{ defaultConfig: {} },
|
|
90
|
-
)
|
|
90
|
+
)
|
|
91
91
|
}
|
|
92
|
-
return
|
|
92
|
+
return value ?? undefined
|
|
93
93
|
} catch {
|
|
94
|
-
return undefined
|
|
94
|
+
return undefined
|
|
95
95
|
}
|
|
96
96
|
}
|
|
97
|
-
return undefined
|
|
97
|
+
return undefined
|
|
98
98
|
}
|
|
99
99
|
|
|
100
100
|
/**
|
|
@@ -107,58 +107,57 @@ export async function loadNextConfig(root: string): Promise<NextConfigShape | un
|
|
|
107
107
|
* skipped here - the lazy per-request path still validates.
|
|
108
108
|
*/
|
|
109
109
|
export function validateServerActionsConfigSync(root: string): void {
|
|
110
|
-
let config: NextConfigShape | undefined
|
|
111
|
-
const requireFrom = createRequire(path.join(root, 'noop.js'))
|
|
110
|
+
let config: NextConfigShape | undefined
|
|
111
|
+
const requireFrom = createRequire(path.join(root, 'noop.js'))
|
|
112
112
|
for (const name of ['next.config.js', 'next.config.cjs']) {
|
|
113
|
-
const file = path.join(root, name)
|
|
114
|
-
if (!existsSync(file)) continue
|
|
113
|
+
const file = path.join(root, name)
|
|
114
|
+
if (!existsSync(file)) continue
|
|
115
115
|
try {
|
|
116
|
-
delete requireFrom.cache[requireFrom.resolve(file)]
|
|
117
|
-
let value: unknown = requireFrom(file)
|
|
116
|
+
delete requireFrom.cache[requireFrom.resolve(file)]
|
|
117
|
+
let value: unknown = requireFrom(file)
|
|
118
118
|
if (value && typeof value === 'object' && 'default' in value) {
|
|
119
|
-
value = (value as { default?: unknown }).default
|
|
119
|
+
value = (value as { default?: unknown }).default
|
|
120
120
|
}
|
|
121
121
|
if (typeof value === 'function') {
|
|
122
122
|
value = (value as (phase: string, ctx: { defaultConfig: object }) => unknown)(
|
|
123
123
|
'phase-production-server',
|
|
124
124
|
{ defaultConfig: {} },
|
|
125
|
-
)
|
|
125
|
+
)
|
|
126
126
|
}
|
|
127
|
-
config = value as NextConfigShape | undefined
|
|
127
|
+
config = value as NextConfigShape | undefined
|
|
128
128
|
} catch (error) {
|
|
129
129
|
// A malformed limit surfaced synchronously from require's module eval is
|
|
130
130
|
// unlikely; any load failure means we can't validate here — defer.
|
|
131
|
-
if (error instanceof Error && error.message === SIZE_LIMIT_ERROR) throw error
|
|
132
|
-
return
|
|
131
|
+
if (error instanceof Error && error.message === SIZE_LIMIT_ERROR) throw error
|
|
132
|
+
return
|
|
133
133
|
}
|
|
134
|
-
break
|
|
134
|
+
break
|
|
135
135
|
}
|
|
136
|
-
if (!config) return
|
|
137
|
-
const experimental = config.experimental
|
|
136
|
+
if (!config) return
|
|
137
|
+
const experimental = config.experimental
|
|
138
138
|
const limit =
|
|
139
139
|
config.serverActions?.bodySizeLimit ??
|
|
140
140
|
(experimental && typeof experimental === 'object' && experimental.serverActions
|
|
141
141
|
? (experimental.serverActions as { bodySizeLimit?: unknown }).bodySizeLimit
|
|
142
|
-
: undefined)
|
|
143
|
-
if (limit === undefined) return
|
|
144
|
-
parseBodySizeLimit(limit)
|
|
142
|
+
: undefined)
|
|
143
|
+
if (limit === undefined) return
|
|
144
|
+
parseBodySizeLimit(limit)
|
|
145
145
|
}
|
|
146
146
|
|
|
147
147
|
/** Parse '2mb' / '500kb' / bytes number into bytes; throw SIZE_LIMIT_ERROR. */
|
|
148
148
|
export function parseBodySizeLimit(value: unknown): number {
|
|
149
149
|
if (typeof value === 'number') {
|
|
150
|
-
if (!Number.isFinite(value) || value <= 0) throw new Error(SIZE_LIMIT_ERROR)
|
|
151
|
-
return Math.floor(value)
|
|
150
|
+
if (!Number.isFinite(value) || value <= 0) throw new Error(SIZE_LIMIT_ERROR)
|
|
151
|
+
return Math.floor(value)
|
|
152
152
|
}
|
|
153
153
|
if (typeof value === 'string') {
|
|
154
|
-
const match = /^(\d+(?:\.\d+)?)\s*(b|kb|mb|gb)?$/i.exec(value.trim())
|
|
155
|
-
if (!match) throw new Error(SIZE_LIMIT_ERROR)
|
|
156
|
-
const amount = Number(match[1])
|
|
157
|
-
if (!Number.isFinite(amount) || amount <= 0) throw new Error(SIZE_LIMIT_ERROR)
|
|
158
|
-
const unit = (match[2] ?? 'b').toLowerCase()
|
|
159
|
-
const factor =
|
|
160
|
-
|
|
161
|
-
return Math.floor(amount * factor);
|
|
154
|
+
const match = /^(\d+(?:\.\d+)?)\s*(b|kb|mb|gb)?$/i.exec(value.trim())
|
|
155
|
+
if (!match) throw new Error(SIZE_LIMIT_ERROR)
|
|
156
|
+
const amount = Number(match[1])
|
|
157
|
+
if (!Number.isFinite(amount) || amount <= 0) throw new Error(SIZE_LIMIT_ERROR)
|
|
158
|
+
const unit = (match[2] ?? 'b').toLowerCase()
|
|
159
|
+
const factor = unit === 'gb' ? 1024 ** 3 : unit === 'mb' ? 1024 ** 2 : unit === 'kb' ? 1024 : 1
|
|
160
|
+
return Math.floor(amount * factor)
|
|
162
161
|
}
|
|
163
|
-
throw new Error(SIZE_LIMIT_ERROR)
|
|
162
|
+
throw new Error(SIZE_LIMIT_ERROR)
|
|
164
163
|
}
|
|
@@ -7,10 +7,10 @@
|
|
|
7
7
|
* file with named exports; inline actions inside components are best-effort.
|
|
8
8
|
*/
|
|
9
9
|
|
|
10
|
-
export { actionId, workspaceRelative } from './ids'
|
|
10
|
+
export { actionId, workspaceRelative } from './ids'
|
|
11
11
|
|
|
12
|
-
const DIRECTIVE = /^(['"])use server\1\s
|
|
13
|
-
const CACHE_DIRECTIVE = /^(['"])use cache\1\s
|
|
12
|
+
const DIRECTIVE = /^(['"])use server\1\s*;?$/
|
|
13
|
+
const CACHE_DIRECTIVE = /^(['"])use cache\1\s*;?$/
|
|
14
14
|
|
|
15
15
|
/**
|
|
16
16
|
* True when the file's FIRST statement is a 'use server' directive, marking the
|
|
@@ -20,8 +20,8 @@ const CACHE_DIRECTIVE = /^(['"])use cache\1\s*;?$/;
|
|
|
20
20
|
* a real JS engine would when looking for a directive prologue.
|
|
21
21
|
*/
|
|
22
22
|
export function moduleLevelUseServer(source: string): boolean {
|
|
23
|
-
const first = firstStatementText(stripLeading(source))
|
|
24
|
-
return first !== undefined && DIRECTIVE.test(first.trim())
|
|
23
|
+
const first = firstStatementText(stripLeading(source))
|
|
24
|
+
return first !== undefined && DIRECTIVE.test(first.trim())
|
|
25
25
|
}
|
|
26
26
|
|
|
27
27
|
/**
|
|
@@ -31,19 +31,19 @@ export function moduleLevelUseServer(source: string): boolean {
|
|
|
31
31
|
* variants are function-level only in practice and excluded.
|
|
32
32
|
*/
|
|
33
33
|
export function moduleLevelUseCache(source: string): boolean {
|
|
34
|
-
const first = firstStatementText(stripLeading(source))
|
|
35
|
-
return first !== undefined && CACHE_DIRECTIVE.test(first.trim())
|
|
34
|
+
const first = firstStatementText(stripLeading(source))
|
|
35
|
+
return first !== undefined && CACHE_DIRECTIVE.test(first.trim())
|
|
36
36
|
}
|
|
37
37
|
|
|
38
38
|
export interface InlineAction {
|
|
39
39
|
/** Local (and, when exported, exported) name of the action function. */
|
|
40
|
-
name: string
|
|
40
|
+
name: string
|
|
41
41
|
/** True when the function is a named export (`export ...` / re-exported). */
|
|
42
|
-
exported: boolean
|
|
42
|
+
exported: boolean
|
|
43
43
|
/** Character offset of the start of the matched declaration in `source`. */
|
|
44
|
-
start: number
|
|
44
|
+
start: number
|
|
45
45
|
/** Character offset just past the `"use server"` directive that marked it. */
|
|
46
|
-
directiveEnd: number
|
|
46
|
+
directiveEnd: number
|
|
47
47
|
}
|
|
48
48
|
|
|
49
49
|
/**
|
|
@@ -66,27 +66,27 @@ export interface InlineAction {
|
|
|
66
66
|
* module-level 'use server' file for the reliable wire path.
|
|
67
67
|
*/
|
|
68
68
|
export function inlineUseServerFunctions(source: string): InlineAction[] {
|
|
69
|
-
const found: InlineAction[] = []
|
|
70
|
-
const seen = new Set<string>()
|
|
69
|
+
const found: InlineAction[] = []
|
|
70
|
+
const seen = new Set<string>()
|
|
71
71
|
|
|
72
72
|
// Shape 1: [export] [async] function NAME(...) { "use server"
|
|
73
73
|
const fnDecl =
|
|
74
|
-
/(\bexport\s+)?(?:async\s+)?function\s+([A-Za-z_$][\w$]*)\s*\([^)]*\)\s*\{\s*(['"])use server\3\s*;?/g
|
|
75
|
-
collect(fnDecl, source, found, seen, { nameGroup: 2, exportGroup: 1, dirGroup: 3 })
|
|
74
|
+
/(\bexport\s+)?(?:async\s+)?function\s+([A-Za-z_$][\w$]*)\s*\([^)]*\)\s*\{\s*(['"])use server\3\s*;?/g
|
|
75
|
+
collect(fnDecl, source, found, seen, { nameGroup: 2, exportGroup: 1, dirGroup: 3 })
|
|
76
76
|
|
|
77
77
|
// Shape 2: [export] const NAME = [async] (...) => { "use server"
|
|
78
78
|
// also covers `= async function (...) { "use server"`
|
|
79
79
|
const arrowOrExpr =
|
|
80
|
-
/(\bexport\s+)?(?:const|let|var)\s+([A-Za-z_$][\w$]*)\s*=\s*(?:async\s+)?(?:\([^)]*\)|[A-Za-z_$][\w$]*|function\s*\*?\s*\([^)]*\))\s*(?:=>\s*)?\{\s*(['"])use server\3\s*;?/g
|
|
81
|
-
collect(arrowOrExpr, source, found, seen, { nameGroup: 2, exportGroup: 1, dirGroup: 3 })
|
|
80
|
+
/(\bexport\s+)?(?:const|let|var)\s+([A-Za-z_$][\w$]*)\s*=\s*(?:async\s+)?(?:\([^)]*\)|[A-Za-z_$][\w$]*|function\s*\*?\s*\([^)]*\))\s*(?:=>\s*)?\{\s*(['"])use server\3\s*;?/g
|
|
81
|
+
collect(arrowOrExpr, source, found, seen, { nameGroup: 2, exportGroup: 1, dirGroup: 3 })
|
|
82
82
|
|
|
83
|
-
return found.sort((a, b) => a.start - b.start)
|
|
83
|
+
return found.sort((a, b) => a.start - b.start)
|
|
84
84
|
}
|
|
85
85
|
|
|
86
86
|
interface Groups {
|
|
87
|
-
nameGroup: number
|
|
88
|
-
exportGroup: number
|
|
89
|
-
dirGroup: number
|
|
87
|
+
nameGroup: number
|
|
88
|
+
exportGroup: number
|
|
89
|
+
dirGroup: number
|
|
90
90
|
}
|
|
91
91
|
|
|
92
92
|
function collect(
|
|
@@ -96,17 +96,17 @@ function collect(
|
|
|
96
96
|
seen: Set<string>,
|
|
97
97
|
groups: Groups,
|
|
98
98
|
) {
|
|
99
|
-
let match: RegExpExecArray | null
|
|
99
|
+
let match: RegExpExecArray | null
|
|
100
100
|
while ((match = pattern.exec(source))) {
|
|
101
|
-
const name = match[groups.nameGroup]
|
|
102
|
-
if (!name || seen.has(name)) continue
|
|
103
|
-
seen.add(name)
|
|
101
|
+
const name = match[groups.nameGroup]
|
|
102
|
+
if (!name || seen.has(name)) continue
|
|
103
|
+
seen.add(name)
|
|
104
104
|
out.push({
|
|
105
105
|
name,
|
|
106
106
|
exported: Boolean(match[groups.exportGroup]),
|
|
107
107
|
start: match.index,
|
|
108
108
|
directiveEnd: match.index + match[0].length,
|
|
109
|
-
})
|
|
109
|
+
})
|
|
110
110
|
}
|
|
111
111
|
}
|
|
112
112
|
|
|
@@ -117,39 +117,39 @@ function collect(
|
|
|
117
117
|
* `export { a as b }`, `export default`.
|
|
118
118
|
*/
|
|
119
119
|
export function moduleActionExports(source: string): string[] {
|
|
120
|
-
const names = new Set<string>()
|
|
120
|
+
const names = new Set<string>()
|
|
121
121
|
|
|
122
122
|
// export [async] function NAME / export const|let|var NAME
|
|
123
123
|
const declRe =
|
|
124
|
-
/\bexport\s+(?:async\s+)?(?:function\s*\*?\s+|const\s+|let\s+|var\s+|class\s+)([A-Za-z_$][\w$]*)/g
|
|
125
|
-
for (let m; (m = declRe.exec(source));
|
|
124
|
+
/\bexport\s+(?:async\s+)?(?:function\s*\*?\s+|const\s+|let\s+|var\s+|class\s+)([A-Za-z_$][\w$]*)/g
|
|
125
|
+
for (let m; (m = declRe.exec(source));) if (m[1]) names.add(m[1])
|
|
126
126
|
|
|
127
127
|
// export default ...
|
|
128
|
-
if (/\bexport\s+default\b/.test(source)) names.add('default')
|
|
128
|
+
if (/\bexport\s+default\b/.test(source)) names.add('default')
|
|
129
129
|
|
|
130
130
|
// export { a, b as c } (ignore `export type { ... }`)
|
|
131
|
-
const listRe = /\bexport\s+(?!type\b)\{([^}]*)\}/g
|
|
132
|
-
for (let m; (m = listRe.exec(source));
|
|
131
|
+
const listRe = /\bexport\s+(?!type\b)\{([^}]*)\}/g
|
|
132
|
+
for (let m; (m = listRe.exec(source));) {
|
|
133
133
|
for (const part of (m[1] ?? '').split(',')) {
|
|
134
|
-
const trimmed = part.trim()
|
|
135
|
-
if (!trimmed || trimmed.startsWith('type ')) continue
|
|
136
|
-
const exportedName = /\bas\s+([A-Za-z_$][\w$]*)\s*$/.exec(trimmed)?.[1]
|
|
137
|
-
const name = exportedName ?? trimmed
|
|
138
|
-
if (/^[A-Za-z_$][\w$]*$/.test(name)) names.add(name)
|
|
134
|
+
const trimmed = part.trim()
|
|
135
|
+
if (!trimmed || trimmed.startsWith('type ')) continue
|
|
136
|
+
const exportedName = /\bas\s+([A-Za-z_$][\w$]*)\s*$/.exec(trimmed)?.[1]
|
|
137
|
+
const name = exportedName ?? trimmed
|
|
138
|
+
if (/^[A-Za-z_$][\w$]*$/.test(name)) names.add(name)
|
|
139
139
|
}
|
|
140
140
|
}
|
|
141
141
|
|
|
142
|
-
return [...names]
|
|
142
|
+
return [...names]
|
|
143
143
|
}
|
|
144
144
|
|
|
145
145
|
/** Strip a leading shebang and BOM so directive detection starts at real code. */
|
|
146
146
|
function stripLeading(source: string): string {
|
|
147
|
-
let s = source.replace(/^\uFEFF/, '')
|
|
147
|
+
let s = source.replace(/^\uFEFF/, '')
|
|
148
148
|
if (s.startsWith('#!')) {
|
|
149
|
-
const nl = s.indexOf('\n')
|
|
150
|
-
s = nl === -1 ? '' : s.slice(nl + 1)
|
|
149
|
+
const nl = s.indexOf('\n')
|
|
150
|
+
s = nl === -1 ? '' : s.slice(nl + 1)
|
|
151
151
|
}
|
|
152
|
-
return s
|
|
152
|
+
return s
|
|
153
153
|
}
|
|
154
154
|
|
|
155
155
|
/**
|
|
@@ -158,34 +158,34 @@ function stripLeading(source: string): string {
|
|
|
158
158
|
* `;`-or-newline-terminated token run.
|
|
159
159
|
*/
|
|
160
160
|
function firstStatementText(source: string): string | undefined {
|
|
161
|
-
let i = 0
|
|
162
|
-
const n = source.length
|
|
161
|
+
let i = 0
|
|
162
|
+
const n = source.length
|
|
163
163
|
while (i < n) {
|
|
164
|
-
const ch = source[i]
|
|
164
|
+
const ch = source[i]
|
|
165
165
|
if (ch === ' ' || ch === '\t' || ch === '\r' || ch === '\n') {
|
|
166
|
-
i
|
|
167
|
-
continue
|
|
166
|
+
i++
|
|
167
|
+
continue
|
|
168
168
|
}
|
|
169
169
|
if (ch === '/' && source[i + 1] === '/') {
|
|
170
|
-
const nl = source.indexOf('\n', i)
|
|
171
|
-
if (nl === -1) return undefined
|
|
172
|
-
i = nl + 1
|
|
173
|
-
continue
|
|
170
|
+
const nl = source.indexOf('\n', i)
|
|
171
|
+
if (nl === -1) return undefined
|
|
172
|
+
i = nl + 1
|
|
173
|
+
continue
|
|
174
174
|
}
|
|
175
175
|
if (ch === '/' && source[i + 1] === '*') {
|
|
176
|
-
const end = source.indexOf('*/', i + 2)
|
|
177
|
-
if (end === -1) return undefined
|
|
178
|
-
i = end + 2
|
|
179
|
-
continue
|
|
176
|
+
const end = source.indexOf('*/', i + 2)
|
|
177
|
+
if (end === -1) return undefined
|
|
178
|
+
i = end + 2
|
|
179
|
+
continue
|
|
180
180
|
}
|
|
181
|
-
break
|
|
181
|
+
break
|
|
182
182
|
}
|
|
183
|
-
if (i >= n) return undefined
|
|
183
|
+
if (i >= n) return undefined
|
|
184
184
|
// Read until end of line or a semicolon (directive is a single statement).
|
|
185
|
-
let j = i
|
|
186
|
-
while (j < n && source[j] !== '\n' && source[j] !== ';') j
|
|
187
|
-
const end = source[j] === ';' ? j + 1 : j
|
|
188
|
-
return source.slice(i, end)
|
|
185
|
+
let j = i
|
|
186
|
+
while (j < n && source[j] !== '\n' && source[j] !== ';') j++
|
|
187
|
+
const end = source[j] === ';' ? j + 1 : j
|
|
188
|
+
return source.slice(i, end)
|
|
189
189
|
}
|
|
190
190
|
|
|
191
191
|
/**
|
|
@@ -195,14 +195,14 @@ function firstStatementText(source: string): string | undefined {
|
|
|
195
195
|
* restricted to identified actions.
|
|
196
196
|
*/
|
|
197
197
|
export function opensWithUseServerDirective(fn: unknown): boolean {
|
|
198
|
-
if (typeof fn !== 'function') return false
|
|
199
|
-
let source: string
|
|
198
|
+
if (typeof fn !== 'function') return false
|
|
199
|
+
let source: string
|
|
200
200
|
try {
|
|
201
|
-
source = String(fn)
|
|
201
|
+
source = String(fn)
|
|
202
202
|
} catch {
|
|
203
|
-
return false
|
|
203
|
+
return false
|
|
204
204
|
}
|
|
205
|
-
const body = source.indexOf('{', source.indexOf(')') + 1)
|
|
206
|
-
if (body === -1) return false
|
|
207
|
-
return /^\s*(['"])use server\1/.test(source.slice(body + 1))
|
|
205
|
+
const body = source.indexOf('{', source.indexOf(')') + 1)
|
|
206
|
+
if (body === -1) return false
|
|
207
|
+
return /^\s*(['"])use server\1/.test(source.slice(body + 1))
|
|
208
208
|
}
|