@netlify/plugin-nextjs 4.41.3 → 5.0.0-beta.0
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 +61 -17
- package/dist/build/cache.js +15 -0
- package/dist/build/content/prerendered.js +16 -0
- package/dist/build/content/server.js +18 -0
- package/dist/build/content/static.js +20 -0
- package/dist/build/functions/edge.js +14 -0
- package/dist/build/functions/server.js +16 -0
- package/dist/build/plugin-context.js +17 -0
- package/dist/esm-chunks/chunk-4AJYXTWN.js +17 -0
- package/dist/esm-chunks/chunk-62KDS27E.js +77 -0
- package/dist/esm-chunks/chunk-AVWFCGVE.js +5536 -0
- package/dist/esm-chunks/chunk-B6QMRLBH.js +255 -0
- package/dist/esm-chunks/chunk-G2VRYWGL.js +107 -0
- package/dist/esm-chunks/chunk-G3GM7JNF.js +92 -0
- package/dist/esm-chunks/chunk-GGHAQM5D.js +28 -0
- package/dist/esm-chunks/chunk-HPGTYMVD.js +113 -0
- package/dist/esm-chunks/chunk-PEBUKFKH.js +89 -0
- package/dist/esm-chunks/chunk-R4NHZWGU.js +32 -0
- package/dist/esm-chunks/chunk-RSKIKBZH.js +44 -0
- package/dist/esm-chunks/chunk-XD5TSLZO.js +85 -0
- package/dist/esm-chunks/chunk-ZBX3SNQG.js +561 -0
- package/dist/index.js +66 -0
- package/dist/run/config.js +18 -0
- package/dist/run/constants.js +15 -0
- package/dist/run/handlers/cache.cjs +849 -0
- package/dist/run/handlers/server.js +3289 -0
- package/dist/run/headers.js +19 -0
- package/dist/run/next.cjs +1055 -0
- package/dist/run/revalidate.js +13 -0
- package/edge-runtime/README.md +29 -0
- package/edge-runtime/lib/headers.ts +26 -0
- package/edge-runtime/lib/middleware.ts +60 -0
- package/edge-runtime/lib/next-request.ts +59 -0
- package/edge-runtime/lib/response.ts +145 -0
- package/edge-runtime/lib/util.ts +26 -0
- package/edge-runtime/middleware.ts +40 -0
- package/edge-runtime/shim/index.js +8 -0
- package/{src/templates → edge-runtime}/vendor/deno.land/x/html_rewriter@v0.1.0-pre.17/index.ts +1 -1
- package/edge-runtime/vendor/import_map.json +13 -0
- package/edge-runtime/vendor.ts +18 -0
- package/manifest.yml +1 -1
- package/package.json +23 -60
- package/index.js +0 -1
- package/lib/constants.js +0 -56
- package/lib/helpers/analysis.js +0 -115
- package/lib/helpers/cache.js +0 -46
- package/lib/helpers/compiler.js +0 -119
- package/lib/helpers/config.js +0 -192
- package/lib/helpers/dev.js +0 -20
- package/lib/helpers/edge.js +0 -328
- package/lib/helpers/files.js +0 -335
- package/lib/helpers/flags.js +0 -46
- package/lib/helpers/functions.js +0 -437
- package/lib/helpers/functionsMetaData.js +0 -46
- package/lib/helpers/matchers.js +0 -41
- package/lib/helpers/middlewareWatcher.js +0 -12
- package/lib/helpers/pack.js +0 -41
- package/lib/helpers/redirects.js +0 -246
- package/lib/helpers/types.js +0 -2
- package/lib/helpers/utils.js +0 -226
- package/lib/helpers/verification.js +0 -182
- package/lib/index.js +0 -194
- package/lib/templates/blobStorage.js +0 -30
- package/lib/templates/getApiHandler.js +0 -120
- package/lib/templates/getHandler.js +0 -201
- package/lib/templates/getPageResolver.js +0 -54
- package/lib/templates/handlerUtils.js +0 -268
- package/lib/templates/ipx.js +0 -13
- package/lib/templates/requireHooks.js +0 -105
- package/lib/templates/server.js +0 -159
- package/lib/templates/vendor.js +0 -20
- package/src/templates/edge/bundle.js +0 -8
- package/src/templates/edge/function-runtime.ts +0 -24
- package/src/templates/edge/imageconfig.json +0 -3
- package/src/templates/edge/ipx.ts +0 -5
- package/src/templates/edge/matchers.json +0 -1
- package/src/templates/edge/middleware-runtime.ts +0 -62
- package/src/templates/edge/next-dev.js +0 -104
- package/src/templates/edge/rsc-data.ts +0 -5
- package/src/templates/edge/shims.js +0 -77
- package/src/templates/edge-shared/next-utils.ts +0 -407
- package/src/templates/edge-shared/nextConfig.json +0 -3
- package/src/templates/edge-shared/prerender-manifest.json +0 -7
- package/src/templates/edge-shared/rsc-data.ts +0 -78
- package/src/templates/edge-shared/utils.test.ts +0 -114
- package/src/templates/edge-shared/utils.ts +0 -315
- package/src/templates/vendor/import_map.json +0 -13
- /package/{src/templates → edge-runtime}/vendor/deno.land/std@0.134.0/fmt/colors.ts +0 -0
- /package/{src/templates → edge-runtime}/vendor/deno.land/std@0.134.0/testing/_diff.ts +0 -0
- /package/{src/templates → edge-runtime}/vendor/deno.land/std@0.134.0/testing/asserts.ts +0 -0
- /package/{src/templates → edge-runtime}/vendor/deno.land/std@0.175.0/_util/asserts.ts +0 -0
- /package/{src/templates → edge-runtime}/vendor/deno.land/std@0.175.0/_util/os.ts +0 -0
- /package/{src/templates → edge-runtime}/vendor/deno.land/std@0.175.0/async/abortable.ts +0 -0
- /package/{src/templates → edge-runtime}/vendor/deno.land/std@0.175.0/async/deadline.ts +0 -0
- /package/{src/templates → edge-runtime}/vendor/deno.land/std@0.175.0/async/debounce.ts +0 -0
- /package/{src/templates → edge-runtime}/vendor/deno.land/std@0.175.0/async/deferred.ts +0 -0
- /package/{src/templates → edge-runtime}/vendor/deno.land/std@0.175.0/async/delay.ts +0 -0
- /package/{src/templates → edge-runtime}/vendor/deno.land/std@0.175.0/async/mod.ts +0 -0
- /package/{src/templates → edge-runtime}/vendor/deno.land/std@0.175.0/async/mux_async_iterator.ts +0 -0
- /package/{src/templates → edge-runtime}/vendor/deno.land/std@0.175.0/async/pool.ts +0 -0
- /package/{src/templates → edge-runtime}/vendor/deno.land/std@0.175.0/async/retry.ts +0 -0
- /package/{src/templates → edge-runtime}/vendor/deno.land/std@0.175.0/async/tee.ts +0 -0
- /package/{src/templates → edge-runtime}/vendor/deno.land/std@0.175.0/bytes/index_of_needle.ts +0 -0
- /package/{src/templates → edge-runtime}/vendor/deno.land/std@0.175.0/crypto/timing_safe_equal.ts +0 -0
- /package/{src/templates → edge-runtime}/vendor/deno.land/std@0.175.0/datetime/to_imf.ts +0 -0
- /package/{src/templates → edge-runtime}/vendor/deno.land/std@0.175.0/encoding/base64.ts +0 -0
- /package/{src/templates → edge-runtime}/vendor/deno.land/std@0.175.0/encoding/base64url.ts +0 -0
- /package/{src/templates → edge-runtime}/vendor/deno.land/std@0.175.0/flags/mod.ts +0 -0
- /package/{src/templates → edge-runtime}/vendor/deno.land/std@0.175.0/fmt/colors.ts +0 -0
- /package/{src/templates → edge-runtime}/vendor/deno.land/std@0.175.0/fmt/printf.ts +0 -0
- /package/{src/templates → edge-runtime}/vendor/deno.land/std@0.175.0/http/cookie.ts +0 -0
- /package/{src/templates → edge-runtime}/vendor/deno.land/std@0.175.0/node/_core.ts +0 -0
- /package/{src/templates → edge-runtime}/vendor/deno.land/std@0.175.0/node/_events.d.ts +0 -0
- /package/{src/templates → edge-runtime}/vendor/deno.land/std@0.175.0/node/_events.mjs +0 -0
- /package/{src/templates → edge-runtime}/vendor/deno.land/std@0.175.0/node/_global.d.ts +0 -0
- /package/{src/templates → edge-runtime}/vendor/deno.land/std@0.175.0/node/_next_tick.ts +0 -0
- /package/{src/templates → edge-runtime}/vendor/deno.land/std@0.175.0/node/_process/exiting.ts +0 -0
- /package/{src/templates → edge-runtime}/vendor/deno.land/std@0.175.0/node/_process/process.ts +0 -0
- /package/{src/templates → edge-runtime}/vendor/deno.land/std@0.175.0/node/_process/stdio.mjs +0 -0
- /package/{src/templates → edge-runtime}/vendor/deno.land/std@0.175.0/node/_process/streams.mjs +0 -0
- /package/{src/templates → edge-runtime}/vendor/deno.land/std@0.175.0/node/_stream.d.ts +0 -0
- /package/{src/templates → edge-runtime}/vendor/deno.land/std@0.175.0/node/_stream.mjs +0 -0
- /package/{src/templates → edge-runtime}/vendor/deno.land/std@0.175.0/node/_util/_util_callbackify.ts +0 -0
- /package/{src/templates → edge-runtime}/vendor/deno.land/std@0.175.0/node/_utils.ts +0 -0
- /package/{src/templates → edge-runtime}/vendor/deno.land/std@0.175.0/node/assert.ts +0 -0
- /package/{src/templates → edge-runtime}/vendor/deno.land/std@0.175.0/node/assertion_error.ts +0 -0
- /package/{src/templates → edge-runtime}/vendor/deno.land/std@0.175.0/node/async_hooks.ts +0 -0
- /package/{src/templates → edge-runtime}/vendor/deno.land/std@0.175.0/node/buffer.ts +0 -0
- /package/{src/templates → edge-runtime}/vendor/deno.land/std@0.175.0/node/events.ts +0 -0
- /package/{src/templates → edge-runtime}/vendor/deno.land/std@0.175.0/node/internal/buffer.d.ts +0 -0
- /package/{src/templates → edge-runtime}/vendor/deno.land/std@0.175.0/node/internal/buffer.mjs +0 -0
- /package/{src/templates → edge-runtime}/vendor/deno.land/std@0.175.0/node/internal/crypto/_keys.ts +0 -0
- /package/{src/templates → edge-runtime}/vendor/deno.land/std@0.175.0/node/internal/crypto/constants.ts +0 -0
- /package/{src/templates → edge-runtime}/vendor/deno.land/std@0.175.0/node/internal/error_codes.ts +0 -0
- /package/{src/templates → edge-runtime}/vendor/deno.land/std@0.175.0/node/internal/errors.ts +0 -0
- /package/{src/templates → edge-runtime}/vendor/deno.land/std@0.175.0/node/internal/fixed_queue.ts +0 -0
- /package/{src/templates → edge-runtime}/vendor/deno.land/std@0.175.0/node/internal/hide_stack_frames.ts +0 -0
- /package/{src/templates → edge-runtime}/vendor/deno.land/std@0.175.0/node/internal/net.ts +0 -0
- /package/{src/templates → edge-runtime}/vendor/deno.land/std@0.175.0/node/internal/normalize_encoding.mjs +0 -0
- /package/{src/templates → edge-runtime}/vendor/deno.land/std@0.175.0/node/internal/options.ts +0 -0
- /package/{src/templates → edge-runtime}/vendor/deno.land/std@0.175.0/node/internal/primordials.mjs +0 -0
- /package/{src/templates → edge-runtime}/vendor/deno.land/std@0.175.0/node/internal/process/per_thread.mjs +0 -0
- /package/{src/templates → edge-runtime}/vendor/deno.land/std@0.175.0/node/internal/readline/callbacks.mjs +0 -0
- /package/{src/templates → edge-runtime}/vendor/deno.land/std@0.175.0/node/internal/readline/utils.mjs +0 -0
- /package/{src/templates → edge-runtime}/vendor/deno.land/std@0.175.0/node/internal/streams/destroy.mjs +0 -0
- /package/{src/templates → edge-runtime}/vendor/deno.land/std@0.175.0/node/internal/streams/end-of-stream.mjs +0 -0
- /package/{src/templates → edge-runtime}/vendor/deno.land/std@0.175.0/node/internal/streams/utils.mjs +0 -0
- /package/{src/templates → edge-runtime}/vendor/deno.land/std@0.175.0/node/internal/util/comparisons.ts +0 -0
- /package/{src/templates → edge-runtime}/vendor/deno.land/std@0.175.0/node/internal/util/debuglog.ts +0 -0
- /package/{src/templates → edge-runtime}/vendor/deno.land/std@0.175.0/node/internal/util/inspect.mjs +0 -0
- /package/{src/templates → edge-runtime}/vendor/deno.land/std@0.175.0/node/internal/util/types.ts +0 -0
- /package/{src/templates → edge-runtime}/vendor/deno.land/std@0.175.0/node/internal/util.mjs +0 -0
- /package/{src/templates → edge-runtime}/vendor/deno.land/std@0.175.0/node/internal/validators.mjs +0 -0
- /package/{src/templates → edge-runtime}/vendor/deno.land/std@0.175.0/node/internal_binding/_libuv_winerror.ts +0 -0
- /package/{src/templates → edge-runtime}/vendor/deno.land/std@0.175.0/node/internal_binding/_listen.ts +0 -0
- /package/{src/templates → edge-runtime}/vendor/deno.land/std@0.175.0/node/internal_binding/_node.ts +0 -0
- /package/{src/templates → edge-runtime}/vendor/deno.land/std@0.175.0/node/internal_binding/_timingSafeEqual.ts +0 -0
- /package/{src/templates → edge-runtime}/vendor/deno.land/std@0.175.0/node/internal_binding/_utils.ts +0 -0
- /package/{src/templates → edge-runtime}/vendor/deno.land/std@0.175.0/node/internal_binding/_winerror.ts +0 -0
- /package/{src/templates → edge-runtime}/vendor/deno.land/std@0.175.0/node/internal_binding/ares.ts +0 -0
- /package/{src/templates → edge-runtime}/vendor/deno.land/std@0.175.0/node/internal_binding/async_wrap.ts +0 -0
- /package/{src/templates → edge-runtime}/vendor/deno.land/std@0.175.0/node/internal_binding/buffer.ts +0 -0
- /package/{src/templates → edge-runtime}/vendor/deno.land/std@0.175.0/node/internal_binding/cares_wrap.ts +0 -0
- /package/{src/templates → edge-runtime}/vendor/deno.land/std@0.175.0/node/internal_binding/config.ts +0 -0
- /package/{src/templates → edge-runtime}/vendor/deno.land/std@0.175.0/node/internal_binding/connection_wrap.ts +0 -0
- /package/{src/templates → edge-runtime}/vendor/deno.land/std@0.175.0/node/internal_binding/constants.ts +0 -0
- /package/{src/templates → edge-runtime}/vendor/deno.land/std@0.175.0/node/internal_binding/contextify.ts +0 -0
- /package/{src/templates → edge-runtime}/vendor/deno.land/std@0.175.0/node/internal_binding/credentials.ts +0 -0
- /package/{src/templates → edge-runtime}/vendor/deno.land/std@0.175.0/node/internal_binding/crypto.ts +0 -0
- /package/{src/templates → edge-runtime}/vendor/deno.land/std@0.175.0/node/internal_binding/errors.ts +0 -0
- /package/{src/templates → edge-runtime}/vendor/deno.land/std@0.175.0/node/internal_binding/fs.ts +0 -0
- /package/{src/templates → edge-runtime}/vendor/deno.land/std@0.175.0/node/internal_binding/fs_dir.ts +0 -0
- /package/{src/templates → edge-runtime}/vendor/deno.land/std@0.175.0/node/internal_binding/fs_event_wrap.ts +0 -0
- /package/{src/templates → edge-runtime}/vendor/deno.land/std@0.175.0/node/internal_binding/handle_wrap.ts +0 -0
- /package/{src/templates → edge-runtime}/vendor/deno.land/std@0.175.0/node/internal_binding/heap_utils.ts +0 -0
- /package/{src/templates → edge-runtime}/vendor/deno.land/std@0.175.0/node/internal_binding/http_parser.ts +0 -0
- /package/{src/templates → edge-runtime}/vendor/deno.land/std@0.175.0/node/internal_binding/icu.ts +0 -0
- /package/{src/templates → edge-runtime}/vendor/deno.land/std@0.175.0/node/internal_binding/inspector.ts +0 -0
- /package/{src/templates → edge-runtime}/vendor/deno.land/std@0.175.0/node/internal_binding/js_stream.ts +0 -0
- /package/{src/templates → edge-runtime}/vendor/deno.land/std@0.175.0/node/internal_binding/messaging.ts +0 -0
- /package/{src/templates → edge-runtime}/vendor/deno.land/std@0.175.0/node/internal_binding/mod.ts +0 -0
- /package/{src/templates → edge-runtime}/vendor/deno.land/std@0.175.0/node/internal_binding/module_wrap.ts +0 -0
- /package/{src/templates → edge-runtime}/vendor/deno.land/std@0.175.0/node/internal_binding/native_module.ts +0 -0
- /package/{src/templates → edge-runtime}/vendor/deno.land/std@0.175.0/node/internal_binding/natives.ts +0 -0
- /package/{src/templates → edge-runtime}/vendor/deno.land/std@0.175.0/node/internal_binding/node_file.ts +0 -0
- /package/{src/templates → edge-runtime}/vendor/deno.land/std@0.175.0/node/internal_binding/node_options.ts +0 -0
- /package/{src/templates → edge-runtime}/vendor/deno.land/std@0.175.0/node/internal_binding/options.ts +0 -0
- /package/{src/templates → edge-runtime}/vendor/deno.land/std@0.175.0/node/internal_binding/os.ts +0 -0
- /package/{src/templates → edge-runtime}/vendor/deno.land/std@0.175.0/node/internal_binding/performance.ts +0 -0
- /package/{src/templates → edge-runtime}/vendor/deno.land/std@0.175.0/node/internal_binding/pipe_wrap.ts +0 -0
- /package/{src/templates → edge-runtime}/vendor/deno.land/std@0.175.0/node/internal_binding/process_methods.ts +0 -0
- /package/{src/templates → edge-runtime}/vendor/deno.land/std@0.175.0/node/internal_binding/report.ts +0 -0
- /package/{src/templates → edge-runtime}/vendor/deno.land/std@0.175.0/node/internal_binding/serdes.ts +0 -0
- /package/{src/templates → edge-runtime}/vendor/deno.land/std@0.175.0/node/internal_binding/signal_wrap.ts +0 -0
- /package/{src/templates → edge-runtime}/vendor/deno.land/std@0.175.0/node/internal_binding/spawn_sync.ts +0 -0
- /package/{src/templates → edge-runtime}/vendor/deno.land/std@0.175.0/node/internal_binding/stream_wrap.ts +0 -0
- /package/{src/templates → edge-runtime}/vendor/deno.land/std@0.175.0/node/internal_binding/string_decoder.ts +0 -0
- /package/{src/templates → edge-runtime}/vendor/deno.land/std@0.175.0/node/internal_binding/symbols.ts +0 -0
- /package/{src/templates → edge-runtime}/vendor/deno.land/std@0.175.0/node/internal_binding/task_queue.ts +0 -0
- /package/{src/templates → edge-runtime}/vendor/deno.land/std@0.175.0/node/internal_binding/tcp_wrap.ts +0 -0
- /package/{src/templates → edge-runtime}/vendor/deno.land/std@0.175.0/node/internal_binding/timers.ts +0 -0
- /package/{src/templates → edge-runtime}/vendor/deno.land/std@0.175.0/node/internal_binding/tls_wrap.ts +0 -0
- /package/{src/templates → edge-runtime}/vendor/deno.land/std@0.175.0/node/internal_binding/trace_events.ts +0 -0
- /package/{src/templates → edge-runtime}/vendor/deno.land/std@0.175.0/node/internal_binding/tty_wrap.ts +0 -0
- /package/{src/templates → edge-runtime}/vendor/deno.land/std@0.175.0/node/internal_binding/types.ts +0 -0
- /package/{src/templates → edge-runtime}/vendor/deno.land/std@0.175.0/node/internal_binding/udp_wrap.ts +0 -0
- /package/{src/templates → edge-runtime}/vendor/deno.land/std@0.175.0/node/internal_binding/url.ts +0 -0
- /package/{src/templates → edge-runtime}/vendor/deno.land/std@0.175.0/node/internal_binding/util.ts +0 -0
- /package/{src/templates → edge-runtime}/vendor/deno.land/std@0.175.0/node/internal_binding/uv.ts +0 -0
- /package/{src/templates → edge-runtime}/vendor/deno.land/std@0.175.0/node/internal_binding/v8.ts +0 -0
- /package/{src/templates → edge-runtime}/vendor/deno.land/std@0.175.0/node/internal_binding/worker.ts +0 -0
- /package/{src/templates → edge-runtime}/vendor/deno.land/std@0.175.0/node/internal_binding/zlib.ts +0 -0
- /package/{src/templates → edge-runtime}/vendor/deno.land/std@0.175.0/node/process.ts +0 -0
- /package/{src/templates → edge-runtime}/vendor/deno.land/std@0.175.0/node/stream.ts +0 -0
- /package/{src/templates → edge-runtime}/vendor/deno.land/std@0.175.0/node/string_decoder.ts +0 -0
- /package/{src/templates → edge-runtime}/vendor/deno.land/std@0.175.0/node/util/types.ts +0 -0
- /package/{src/templates → edge-runtime}/vendor/deno.land/std@0.175.0/node/util.ts +0 -0
- /package/{src/templates → edge-runtime}/vendor/deno.land/std@0.175.0/path/_constants.ts +0 -0
- /package/{src/templates → edge-runtime}/vendor/deno.land/std@0.175.0/path/_interface.ts +0 -0
- /package/{src/templates → edge-runtime}/vendor/deno.land/std@0.175.0/path/_util.ts +0 -0
- /package/{src/templates → edge-runtime}/vendor/deno.land/std@0.175.0/path/common.ts +0 -0
- /package/{src/templates → edge-runtime}/vendor/deno.land/std@0.175.0/path/glob.ts +0 -0
- /package/{src/templates → edge-runtime}/vendor/deno.land/std@0.175.0/path/mod.ts +0 -0
- /package/{src/templates → edge-runtime}/vendor/deno.land/std@0.175.0/path/posix.ts +0 -0
- /package/{src/templates → edge-runtime}/vendor/deno.land/std@0.175.0/path/separator.ts +0 -0
- /package/{src/templates → edge-runtime}/vendor/deno.land/std@0.175.0/path/win32.ts +0 -0
- /package/{src/templates → edge-runtime}/vendor/deno.land/std@0.175.0/streams/write_all.ts +0 -0
- /package/{src/templates → edge-runtime}/vendor/deno.land/std@0.175.0/testing/_diff.ts +0 -0
- /package/{src/templates → edge-runtime}/vendor/deno.land/std@0.175.0/testing/_format.ts +0 -0
- /package/{src/templates → edge-runtime}/vendor/deno.land/std@0.175.0/testing/asserts.ts +0 -0
- /package/{src/templates → edge-runtime}/vendor/deno.land/std@0.175.0/types.d.ts +0 -0
- /package/{src/templates → edge-runtime}/vendor/deno.land/x/html_rewriter@v0.1.0-pre.17/vendor/asyncify.js +0 -0
- /package/{src/templates → edge-runtime}/vendor/deno.land/x/html_rewriter@v0.1.0-pre.17/vendor/html_rewriter.d.ts +0 -0
- /package/{src/templates → edge-runtime}/vendor/deno.land/x/html_rewriter@v0.1.0-pre.17/vendor/html_rewriter.js +0 -0
- /package/{src/templates → edge-runtime}/vendor/deno.land/x/path_to_regexp@v6.2.1/index.ts +0 -0
- /package/{src/templates → edge-runtime}/vendor/esm.sh/v91/next@12.2.5/deno/dist/compiled/cookie.js +0 -0
- /package/{src/templates → edge-runtime}/vendor/esm.sh/v91/next@12.2.5/deno/dist/server/web/spec-extension/request.js +0 -0
- /package/{src/templates → edge-runtime}/vendor/esm.sh/v91/next@12.2.5/deno/dist/server/web/spec-extension/response.js +0 -0
- /package/{src/templates → edge-runtime}/vendor/raw.githubusercontent.com/worker-tools/resolvable-promise/master/index.ts +0 -0
|
@@ -1,78 +0,0 @@
|
|
|
1
|
-
import type { EdgeFunction } from 'https://edge.netlify.com'
|
|
2
|
-
|
|
3
|
-
// These are copied from next/dist/build. This file gets copied as part of the next
|
|
4
|
-
// runtime build and can't reference the next package directly.
|
|
5
|
-
//
|
|
6
|
-
// Latest types at https://github.com/vercel/next.js/blob/4a2df3c3752aeddc50fd5ab053440eccf71ae50b/packages/next/src/build/index.ts#L140
|
|
7
|
-
export declare type SsgRoute = {
|
|
8
|
-
initialRevalidateSeconds: number | false
|
|
9
|
-
srcRoute: string | null
|
|
10
|
-
dataRoute: string | null
|
|
11
|
-
}
|
|
12
|
-
export declare type DynamicSsgRoute = {
|
|
13
|
-
routeRegex: string
|
|
14
|
-
fallback: string | null | false
|
|
15
|
-
dataRoute: string | null
|
|
16
|
-
dataRouteRegex: string
|
|
17
|
-
}
|
|
18
|
-
export declare type PrerenderManifest = {
|
|
19
|
-
version: 3
|
|
20
|
-
routes: {
|
|
21
|
-
[route: string]: SsgRoute
|
|
22
|
-
}
|
|
23
|
-
dynamicRoutes: {
|
|
24
|
-
[route: string]: DynamicSsgRoute
|
|
25
|
-
}
|
|
26
|
-
notFoundRoutes: string[]
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
const noop = () => {}
|
|
30
|
-
|
|
31
|
-
// Ensure that routes with and without a trailing slash map to different ODB paths
|
|
32
|
-
const rscifyPath = (route: string) => {
|
|
33
|
-
if (route.endsWith('/')) {
|
|
34
|
-
return route.slice(0, -1) + '.rsc/'
|
|
35
|
-
}
|
|
36
|
-
return route + '.rsc'
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
export const getRscDataRouter = ({ routes: staticRoutes, dynamicRoutes }: PrerenderManifest): EdgeFunction => {
|
|
40
|
-
const staticRouteSet = new Set(
|
|
41
|
-
Object.entries(staticRoutes)
|
|
42
|
-
.filter(([, { dataRoute }]) => dataRoute?.endsWith('.rsc'))
|
|
43
|
-
.map(([route]) => route),
|
|
44
|
-
)
|
|
45
|
-
|
|
46
|
-
const dynamicRouteMatcher = Object.values(dynamicRoutes)
|
|
47
|
-
.filter(({ dataRoute }) => dataRoute?.endsWith('.rsc'))
|
|
48
|
-
.map(({ routeRegex }) => new RegExp(routeRegex))
|
|
49
|
-
|
|
50
|
-
const matchesDynamicRscDataRoute = (pathname: string) => {
|
|
51
|
-
return dynamicRouteMatcher.some((matcher) => matcher.test(pathname))
|
|
52
|
-
}
|
|
53
|
-
|
|
54
|
-
const matchesStaticRscDataRoute = (pathname: string) => {
|
|
55
|
-
const key = pathname.endsWith('/') ? pathname.slice(0, -1) : pathname
|
|
56
|
-
return staticRouteSet.has(key)
|
|
57
|
-
}
|
|
58
|
-
|
|
59
|
-
const matchesRscRoute = (pathname: string) => {
|
|
60
|
-
return matchesStaticRscDataRoute(pathname) || matchesDynamicRscDataRoute(pathname)
|
|
61
|
-
}
|
|
62
|
-
|
|
63
|
-
return (request, context) => {
|
|
64
|
-
const debug = request.headers.has('x-next-debug-logging')
|
|
65
|
-
const log = debug ? (...args: unknown[]) => console.log(...args) : noop
|
|
66
|
-
const url = new URL(request.url)
|
|
67
|
-
// If this is a static RSC request, rewrite to the data route
|
|
68
|
-
if (request.headers.get('rsc') === '1') {
|
|
69
|
-
log('Is rsc request')
|
|
70
|
-
if (matchesRscRoute(url.pathname)) {
|
|
71
|
-
request.headers.set('x-rsc-route', url.pathname)
|
|
72
|
-
const target = rscifyPath(url.pathname)
|
|
73
|
-
log('Rewriting to', target)
|
|
74
|
-
return context.rewrite(target)
|
|
75
|
-
}
|
|
76
|
-
}
|
|
77
|
-
}
|
|
78
|
-
}
|
|
@@ -1,114 +0,0 @@
|
|
|
1
|
-
import { assertEquals } from 'https://deno.land/std@0.167.0/testing/asserts.ts'
|
|
2
|
-
import { beforeEach, describe, it } from 'https://deno.land/std@0.167.0/testing/bdd.ts'
|
|
3
|
-
import { redirectTrailingSlash, updateModifiedHeaders } from './utils.ts'
|
|
4
|
-
|
|
5
|
-
describe('updateModifiedHeaders', () => {
|
|
6
|
-
it("does not modify the headers if 'x-middleware-override-headers' is not found", () => {
|
|
7
|
-
const mockHeaders = new Headers()
|
|
8
|
-
// There shouldn't be a case where x-middleware-override-headers is not set and a header has
|
|
9
|
-
// been modified with 'x-middleware-request' added to it, this is more to confirm the test case
|
|
10
|
-
mockHeaders.set('x-middleware-request-foo', 'bar')
|
|
11
|
-
|
|
12
|
-
const mockResponse = {
|
|
13
|
-
headers: mockHeaders,
|
|
14
|
-
}
|
|
15
|
-
|
|
16
|
-
const mockRequest = {
|
|
17
|
-
headers: new Headers(),
|
|
18
|
-
}
|
|
19
|
-
|
|
20
|
-
updateModifiedHeaders(mockRequest.headers, mockResponse.headers)
|
|
21
|
-
|
|
22
|
-
assertEquals(mockRequest.headers.get('x-middleware-request-foo'), null)
|
|
23
|
-
})
|
|
24
|
-
|
|
25
|
-
describe("when the 'x-middleware-override-headers' headers is present", () => {
|
|
26
|
-
let mockHeaders
|
|
27
|
-
let mockRequest: { headers: Headers }
|
|
28
|
-
let mockResponse: { headers: Headers }
|
|
29
|
-
|
|
30
|
-
beforeEach(() => {
|
|
31
|
-
mockHeaders = new Headers()
|
|
32
|
-
mockHeaders.set('foo', 'bar')
|
|
33
|
-
mockHeaders.set('x-middleware-request-hello', 'world')
|
|
34
|
-
mockHeaders.set('x-middleware-request-test', '123')
|
|
35
|
-
mockHeaders.set('x-middleware-override-headers', 'hello,test')
|
|
36
|
-
|
|
37
|
-
mockRequest = {
|
|
38
|
-
headers: new Headers(),
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
mockResponse = {
|
|
42
|
-
headers: mockHeaders,
|
|
43
|
-
}
|
|
44
|
-
|
|
45
|
-
updateModifiedHeaders(mockRequest.headers, mockResponse.headers)
|
|
46
|
-
})
|
|
47
|
-
|
|
48
|
-
it("does not modify or add headers that are missing 'x-middleware-request' in the name", () => {
|
|
49
|
-
assertEquals(mockRequest.headers.get('foo'), null)
|
|
50
|
-
})
|
|
51
|
-
|
|
52
|
-
it("removes 'x-middleware-request-' from headers", () => {
|
|
53
|
-
assertEquals(mockRequest.headers.get('x-middleware-request-hello'), null)
|
|
54
|
-
assertEquals(mockRequest.headers.get('x-middleware-request-test'), null)
|
|
55
|
-
|
|
56
|
-
assertEquals(mockRequest.headers.get('hello'), 'world')
|
|
57
|
-
assertEquals(mockRequest.headers.get('test'), '123')
|
|
58
|
-
})
|
|
59
|
-
|
|
60
|
-
it("removes 'x-middleware-override-headers' after cleaning headers", () => {
|
|
61
|
-
assertEquals(mockRequest.headers.get('x-middleware-override-headers'), null)
|
|
62
|
-
})
|
|
63
|
-
})
|
|
64
|
-
})
|
|
65
|
-
|
|
66
|
-
describe('trailing slash redirects', () => {
|
|
67
|
-
it('adds a trailing slash to the pathn if trailingSlash is enabled', () => {
|
|
68
|
-
const url = new URL('https://example.com/foo')
|
|
69
|
-
const result = redirectTrailingSlash(url, true)
|
|
70
|
-
assertEquals(result?.status, 308)
|
|
71
|
-
assertEquals(result?.headers.get('location'), 'https://example.com/foo/')
|
|
72
|
-
})
|
|
73
|
-
|
|
74
|
-
it("doesn't add a trailing slash if trailingSlash is false", () => {
|
|
75
|
-
const url = new URL('https://example.com/foo')
|
|
76
|
-
const result = redirectTrailingSlash(url, false)
|
|
77
|
-
assertEquals(result, undefined)
|
|
78
|
-
})
|
|
79
|
-
|
|
80
|
-
it("doesn't add a trailing slash if the path is a file", () => {
|
|
81
|
-
const url = new URL('https://example.com/foo.txt')
|
|
82
|
-
const result = redirectTrailingSlash(url, true)
|
|
83
|
-
assertEquals(result, undefined)
|
|
84
|
-
})
|
|
85
|
-
it('adds a trailing slash if there is a dot in the path', () => {
|
|
86
|
-
const url = new URL('https://example.com/foo.bar/baz')
|
|
87
|
-
const result = redirectTrailingSlash(url, true)
|
|
88
|
-
assertEquals(result?.status, 308)
|
|
89
|
-
assertEquals(result?.headers.get('location'), 'https://example.com/foo.bar/baz/')
|
|
90
|
-
})
|
|
91
|
-
it("doesn't add a trailing slash if the path is /", () => {
|
|
92
|
-
const url = new URL('https://example.com/')
|
|
93
|
-
const result = redirectTrailingSlash(url, true)
|
|
94
|
-
assertEquals(result, undefined)
|
|
95
|
-
})
|
|
96
|
-
it('removes a trailing slash from the path if trailingSlash is false', () => {
|
|
97
|
-
const url = new URL('https://example.com/foo/')
|
|
98
|
-
const result = redirectTrailingSlash(url, false)
|
|
99
|
-
assertEquals(result?.status, 308)
|
|
100
|
-
assertEquals(result?.headers.get('location'), 'https://example.com/foo')
|
|
101
|
-
})
|
|
102
|
-
it("doesn't remove a trailing slash if trailingSlash is true", () => {
|
|
103
|
-
const url = new URL('https://example.com/foo/')
|
|
104
|
-
const result = redirectTrailingSlash(url, true)
|
|
105
|
-
assertEquals(result, undefined)
|
|
106
|
-
})
|
|
107
|
-
|
|
108
|
-
it('removes a trailing slash from the path if the path is a file', () => {
|
|
109
|
-
const url = new URL('https://example.com/foo.txt/')
|
|
110
|
-
const result = redirectTrailingSlash(url, false)
|
|
111
|
-
assertEquals(result?.status, 308)
|
|
112
|
-
assertEquals(result?.headers.get('location'), 'https://example.com/foo.txt')
|
|
113
|
-
})
|
|
114
|
-
})
|
|
@@ -1,315 +0,0 @@
|
|
|
1
|
-
import type { Context } from 'https://edge.netlify.com'
|
|
2
|
-
import { ElementHandlers, HTMLRewriter } from '../vendor/deno.land/x/html_rewriter@v0.1.0-pre.17/index.ts'
|
|
3
|
-
|
|
4
|
-
export interface FetchEventResult {
|
|
5
|
-
response: Response
|
|
6
|
-
waitUntil: Promise<any>
|
|
7
|
-
}
|
|
8
|
-
|
|
9
|
-
type NextDataTransform = <T>(data: T) => T
|
|
10
|
-
|
|
11
|
-
function normalizeDataUrl(redirect: string) {
|
|
12
|
-
// If the redirect is a data URL, we need to normalize it.
|
|
13
|
-
// next.js code reference: https://github.com/vercel/next.js/blob/canary/packages/next/src/shared/lib/router/utils/get-next-pathname-info.ts#L46
|
|
14
|
-
if (redirect.startsWith('/_next/data/') && redirect.includes('.json')) {
|
|
15
|
-
const paths = redirect
|
|
16
|
-
.replace(/^\/_next\/data\//, '')
|
|
17
|
-
.replace(/\.json/, '')
|
|
18
|
-
.split('/')
|
|
19
|
-
|
|
20
|
-
const buildId = paths[0]
|
|
21
|
-
redirect = paths[1] !== 'index' ? `/${paths.slice(1).join('/')}` : '/'
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
return redirect
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
/**
|
|
28
|
-
* This is how Next handles rewritten URLs.
|
|
29
|
-
*/
|
|
30
|
-
export function relativizeURL(url: string | string, base: string | URL) {
|
|
31
|
-
const baseURL = typeof base === 'string' ? new URL(base) : base
|
|
32
|
-
const relative = new URL(url, base)
|
|
33
|
-
const origin = `${baseURL.protocol}//${baseURL.host}`
|
|
34
|
-
return `${relative.protocol}//${relative.host}` === origin
|
|
35
|
-
? relative.toString().replace(origin, '')
|
|
36
|
-
: relative.toString()
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
export const addMiddlewareHeaders = async (
|
|
40
|
-
originResponse: Promise<Response> | Response,
|
|
41
|
-
middlewareResponse: Response,
|
|
42
|
-
) => {
|
|
43
|
-
// If there are extra headers, we need to add them to the response.
|
|
44
|
-
if ([...middlewareResponse.headers.keys()].length === 0) {
|
|
45
|
-
return originResponse
|
|
46
|
-
}
|
|
47
|
-
// We need to await the response to get the origin headers, then we can add the ones from middleware.
|
|
48
|
-
const res = await originResponse
|
|
49
|
-
const response = new Response(res.body, res)
|
|
50
|
-
middlewareResponse.headers.forEach((value, key) => {
|
|
51
|
-
if (key === 'set-cookie') {
|
|
52
|
-
response.headers.append(key, value)
|
|
53
|
-
} else {
|
|
54
|
-
response.headers.set(key, value)
|
|
55
|
-
}
|
|
56
|
-
})
|
|
57
|
-
return response
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
interface ResponseCookies {
|
|
61
|
-
// This is non-standard that Next.js adds.
|
|
62
|
-
// See github.com/vercel/next.js/blob/de08f8b3d31ef45131dad97a7d0e95fa01001167/packages/next/src/compiled/@edge-runtime/cookies/index.js#L158
|
|
63
|
-
readonly _headers: Headers
|
|
64
|
-
}
|
|
65
|
-
|
|
66
|
-
interface MiddlewareResponse extends Response {
|
|
67
|
-
originResponse: Response
|
|
68
|
-
dataTransforms: NextDataTransform[]
|
|
69
|
-
elementHandlers: Array<[selector: string, handlers: ElementHandlers]>
|
|
70
|
-
get cookies(): ResponseCookies
|
|
71
|
-
}
|
|
72
|
-
|
|
73
|
-
interface MiddlewareRequest {
|
|
74
|
-
request: Request
|
|
75
|
-
context: Context
|
|
76
|
-
originalRequest: Request
|
|
77
|
-
next(): Promise<MiddlewareResponse>
|
|
78
|
-
rewrite(destination: string | URL, init?: ResponseInit): Response
|
|
79
|
-
}
|
|
80
|
-
|
|
81
|
-
export interface I18NConfig {
|
|
82
|
-
defaultLocale: string
|
|
83
|
-
localeDetection?: false
|
|
84
|
-
locales: string[]
|
|
85
|
-
}
|
|
86
|
-
|
|
87
|
-
export interface RequestData {
|
|
88
|
-
geo?: {
|
|
89
|
-
city?: string
|
|
90
|
-
country?: string
|
|
91
|
-
region?: string
|
|
92
|
-
latitude?: string
|
|
93
|
-
longitude?: string
|
|
94
|
-
timezone?: string
|
|
95
|
-
}
|
|
96
|
-
headers: Record<string, string>
|
|
97
|
-
ip?: string
|
|
98
|
-
method: string
|
|
99
|
-
nextConfig?: {
|
|
100
|
-
basePath?: string
|
|
101
|
-
i18n?: I18NConfig | null
|
|
102
|
-
trailingSlash?: boolean
|
|
103
|
-
}
|
|
104
|
-
page?: {
|
|
105
|
-
name?: string
|
|
106
|
-
params?: { [key: string]: string }
|
|
107
|
-
}
|
|
108
|
-
url: string
|
|
109
|
-
body?: ReadableStream<Uint8Array>
|
|
110
|
-
}
|
|
111
|
-
|
|
112
|
-
function isMiddlewareRequest(response: Response | MiddlewareRequest): response is MiddlewareRequest {
|
|
113
|
-
return 'originalRequest' in response
|
|
114
|
-
}
|
|
115
|
-
|
|
116
|
-
function isMiddlewareResponse(response: Response | MiddlewareResponse): response is MiddlewareResponse {
|
|
117
|
-
return 'dataTransforms' in response
|
|
118
|
-
}
|
|
119
|
-
|
|
120
|
-
// Next 13 supports request header mutations and has the side effect of prepending header values with 'x-middleware-request'
|
|
121
|
-
// as part of invoking NextResponse.next() in the middleware. We need to remove that before sending the response the user
|
|
122
|
-
// as the code that removes it in Next isn't run based on how we handle the middleware
|
|
123
|
-
//
|
|
124
|
-
// Related Next.js code:
|
|
125
|
-
// * https://github.com/vercel/next.js/blob/68d06fe015b28d8f81da52ca107a5f4bd72ab37c/packages/next/server/next-server.ts#L1918-L1928
|
|
126
|
-
// * https://github.com/vercel/next.js/blob/43c9d8940dc42337dd2f7d66aa90e6abf952278e/packages/next/server/web/spec-extension/response.ts#L10-L27
|
|
127
|
-
export function updateModifiedHeaders(requestHeaders: Headers, responseHeaders: Headers) {
|
|
128
|
-
const overriddenHeaders = responseHeaders.get('x-middleware-override-headers')
|
|
129
|
-
|
|
130
|
-
if (!overriddenHeaders) {
|
|
131
|
-
return
|
|
132
|
-
}
|
|
133
|
-
|
|
134
|
-
const headersToUpdate = overriddenHeaders.split(',').map((header) => header.trim())
|
|
135
|
-
|
|
136
|
-
for (const header of headersToUpdate) {
|
|
137
|
-
const oldHeaderKey = 'x-middleware-request-' + header
|
|
138
|
-
const headerValue = responseHeaders.get(oldHeaderKey) || ''
|
|
139
|
-
|
|
140
|
-
requestHeaders.set(header, headerValue)
|
|
141
|
-
responseHeaders.delete(oldHeaderKey)
|
|
142
|
-
}
|
|
143
|
-
responseHeaders.delete('x-middleware-override-headers')
|
|
144
|
-
}
|
|
145
|
-
|
|
146
|
-
export const buildNextRequest = (
|
|
147
|
-
request: Request,
|
|
148
|
-
context: Context,
|
|
149
|
-
nextConfig?: RequestData['nextConfig'],
|
|
150
|
-
): RequestData => {
|
|
151
|
-
const { url, method, body, headers } = request
|
|
152
|
-
|
|
153
|
-
const { country, subdivision, city, latitude, longitude, timezone } = context.geo
|
|
154
|
-
|
|
155
|
-
const geo: RequestData['geo'] = {
|
|
156
|
-
country: country?.code,
|
|
157
|
-
region: subdivision?.code,
|
|
158
|
-
city,
|
|
159
|
-
latitude: latitude?.toString(),
|
|
160
|
-
longitude: longitude?.toString(),
|
|
161
|
-
timezone,
|
|
162
|
-
}
|
|
163
|
-
|
|
164
|
-
return {
|
|
165
|
-
headers: Object.fromEntries(headers.entries()),
|
|
166
|
-
geo,
|
|
167
|
-
url,
|
|
168
|
-
method,
|
|
169
|
-
ip: context.ip,
|
|
170
|
-
body: body ?? undefined,
|
|
171
|
-
nextConfig,
|
|
172
|
-
}
|
|
173
|
-
}
|
|
174
|
-
export const buildResponse = async ({
|
|
175
|
-
result,
|
|
176
|
-
request,
|
|
177
|
-
context,
|
|
178
|
-
}: {
|
|
179
|
-
result: FetchEventResult
|
|
180
|
-
request: Request
|
|
181
|
-
context: Context
|
|
182
|
-
}) => {
|
|
183
|
-
updateModifiedHeaders(request.headers, result.response.headers)
|
|
184
|
-
|
|
185
|
-
// They've returned the MiddlewareRequest directly, so we'll call `next()` for them.
|
|
186
|
-
if (isMiddlewareRequest(result.response)) {
|
|
187
|
-
result.response = await result.response.next()
|
|
188
|
-
}
|
|
189
|
-
if (isMiddlewareResponse(result.response)) {
|
|
190
|
-
const { response } = result
|
|
191
|
-
if (request.method === 'HEAD' || request.method === 'OPTIONS') {
|
|
192
|
-
return response.originResponse
|
|
193
|
-
}
|
|
194
|
-
|
|
195
|
-
// NextResponse doesn't set cookies onto the originResponse, so we need to copy them over
|
|
196
|
-
// In some cases, it's possible there are no headers set. See https://github.com/netlify/pod-ecosystem-frameworks/issues/475
|
|
197
|
-
if (response.cookies._headers?.has('set-cookie')) {
|
|
198
|
-
response.originResponse.headers.set('set-cookie', response.cookies._headers.get('set-cookie')!)
|
|
199
|
-
}
|
|
200
|
-
|
|
201
|
-
// If it's JSON we don't need to use the rewriter, we can just parse it
|
|
202
|
-
if (response.originResponse.headers.get('content-type')?.includes('application/json')) {
|
|
203
|
-
const props = await response.originResponse.json()
|
|
204
|
-
const transformed = response.dataTransforms.reduce((prev, transform) => {
|
|
205
|
-
return transform(prev)
|
|
206
|
-
}, props)
|
|
207
|
-
const body = JSON.stringify(transformed)
|
|
208
|
-
const headers = new Headers(response.headers)
|
|
209
|
-
headers.set('content-length', String(body.length))
|
|
210
|
-
return new Response(body, { ...response, headers })
|
|
211
|
-
}
|
|
212
|
-
// This var will hold the contents of the script tag
|
|
213
|
-
let buffer = ''
|
|
214
|
-
// Create an HTMLRewriter that matches the Next data script tag
|
|
215
|
-
const rewriter = new HTMLRewriter()
|
|
216
|
-
|
|
217
|
-
if (response.dataTransforms.length > 0) {
|
|
218
|
-
rewriter.on('script[id="__NEXT_DATA__"]', {
|
|
219
|
-
text(textChunk) {
|
|
220
|
-
// Grab all the chunks in the Next data script tag
|
|
221
|
-
buffer += textChunk.text
|
|
222
|
-
if (textChunk.lastInTextNode) {
|
|
223
|
-
try {
|
|
224
|
-
// When we have all the data, try to parse it as JSON
|
|
225
|
-
const data = JSON.parse(buffer.trim())
|
|
226
|
-
// Apply all of the transforms to the props
|
|
227
|
-
const props = response.dataTransforms.reduce((prev, transform) => transform(prev), data.props)
|
|
228
|
-
// Replace the data with the transformed props
|
|
229
|
-
// With `html: true` the input is treated as raw HTML
|
|
230
|
-
// @see https://developers.cloudflare.com/workers/runtime-apis/html-rewriter/#global-types
|
|
231
|
-
textChunk.replace(JSON.stringify({ ...data, props }), { html: true })
|
|
232
|
-
} catch (err) {
|
|
233
|
-
console.log('Could not parse', err)
|
|
234
|
-
}
|
|
235
|
-
} else {
|
|
236
|
-
// Remove the chunk after we've appended it to the buffer
|
|
237
|
-
textChunk.remove()
|
|
238
|
-
}
|
|
239
|
-
},
|
|
240
|
-
})
|
|
241
|
-
}
|
|
242
|
-
|
|
243
|
-
if (response.elementHandlers.length > 0) {
|
|
244
|
-
response.elementHandlers.forEach(([selector, handlers]) => rewriter.on(selector, handlers))
|
|
245
|
-
}
|
|
246
|
-
return rewriter.transform(response.originResponse)
|
|
247
|
-
}
|
|
248
|
-
const res = new Response(result.response.body, result.response)
|
|
249
|
-
request.headers.set('x-nf-next-middleware', 'skip')
|
|
250
|
-
|
|
251
|
-
const rewrite = res.headers.get('x-middleware-rewrite')
|
|
252
|
-
|
|
253
|
-
// Data requests (i.e. requests for /_next/data ) need special handling
|
|
254
|
-
const isDataReq = request.headers.get('x-nextjs-data')
|
|
255
|
-
|
|
256
|
-
if (rewrite) {
|
|
257
|
-
const rewriteUrl = new URL(rewrite, request.url)
|
|
258
|
-
const baseUrl = new URL(request.url)
|
|
259
|
-
const relativeUrl = relativizeURL(rewrite, request.url)
|
|
260
|
-
|
|
261
|
-
// Data requests might be rewritten to an external URL
|
|
262
|
-
// This header tells the client router the redirect target, and if it's external then it will do a full navigation
|
|
263
|
-
if (isDataReq) {
|
|
264
|
-
res.headers.set('x-nextjs-rewrite', relativeUrl)
|
|
265
|
-
}
|
|
266
|
-
if (rewriteUrl.hostname !== baseUrl.hostname) {
|
|
267
|
-
// Netlify Edge Functions don't support proxying to external domains, but Next middleware does
|
|
268
|
-
const proxied = fetch(new Request(rewriteUrl.toString(), request))
|
|
269
|
-
return addMiddlewareHeaders(proxied, res)
|
|
270
|
-
}
|
|
271
|
-
res.headers.set('x-middleware-rewrite', relativeUrl)
|
|
272
|
-
|
|
273
|
-
request.headers.set('x-original-path', new URL(request.url, `http://n`).pathname)
|
|
274
|
-
request.headers.set('x-middleware-rewrite', rewrite)
|
|
275
|
-
|
|
276
|
-
return addMiddlewareHeaders(context.rewrite(rewrite), res)
|
|
277
|
-
}
|
|
278
|
-
|
|
279
|
-
const redirect = res.headers.get('Location')
|
|
280
|
-
|
|
281
|
-
// Data requests shouldn;t automatically redirect in the browser (they might be HTML pages): they're handled by the router
|
|
282
|
-
if (redirect && isDataReq) {
|
|
283
|
-
res.headers.delete('location')
|
|
284
|
-
res.headers.set('x-nextjs-redirect', relativizeURL(redirect, request.url))
|
|
285
|
-
}
|
|
286
|
-
|
|
287
|
-
const nextRedirect = res.headers.get('x-nextjs-redirect')
|
|
288
|
-
|
|
289
|
-
if (nextRedirect && isDataReq) {
|
|
290
|
-
res.headers.set('x-nextjs-redirect', normalizeDataUrl(nextRedirect))
|
|
291
|
-
}
|
|
292
|
-
|
|
293
|
-
if (res.headers.get('x-middleware-next') === '1') {
|
|
294
|
-
return addMiddlewareHeaders(context.next(), res)
|
|
295
|
-
}
|
|
296
|
-
return res
|
|
297
|
-
}
|
|
298
|
-
|
|
299
|
-
export const redirectTrailingSlash = (url: URL, trailingSlash: boolean): Response | undefined => {
|
|
300
|
-
const { pathname } = url
|
|
301
|
-
if (pathname === '/') {
|
|
302
|
-
return
|
|
303
|
-
}
|
|
304
|
-
if (!trailingSlash && pathname.endsWith('/')) {
|
|
305
|
-
url.pathname = pathname.slice(0, -1)
|
|
306
|
-
return Response.redirect(url, 308)
|
|
307
|
-
}
|
|
308
|
-
// Add a slash, unless there's a file extension
|
|
309
|
-
if (trailingSlash && !pathname.endsWith('/') && !pathname.split('/').pop()?.includes('.')) {
|
|
310
|
-
url.pathname = `${pathname}/`
|
|
311
|
-
return Response.redirect(url, 308)
|
|
312
|
-
}
|
|
313
|
-
}
|
|
314
|
-
|
|
315
|
-
export const isFunction = (f: unknown) => Boolean(f) && typeof f === 'function'
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"scopes": {
|
|
3
|
-
"../": {
|
|
4
|
-
"https://ghuc.cc/worker-tools/resolvable-promise/index.ts": "./raw.githubusercontent.com/worker-tools/resolvable-promise/master/index.ts",
|
|
5
|
-
"https://deno.land/": "./deno.land/",
|
|
6
|
-
"https://esm.sh/": "./esm.sh/",
|
|
7
|
-
"https://raw.githubusercontent.com/": "./raw.githubusercontent.com/"
|
|
8
|
-
},
|
|
9
|
-
"./esm.sh/": {
|
|
10
|
-
"/v91/next@12.2.5/deno/dist/compiled/cookie.js": "./esm.sh/v91/next@12.2.5/deno/dist/compiled/cookie.js"
|
|
11
|
-
}
|
|
12
|
-
}
|
|
13
|
-
}
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
/package/{src/templates → edge-runtime}/vendor/deno.land/std@0.175.0/async/mux_async_iterator.ts
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
/package/{src/templates → edge-runtime}/vendor/deno.land/std@0.175.0/bytes/index_of_needle.ts
RENAMED
|
File without changes
|
/package/{src/templates → edge-runtime}/vendor/deno.land/std@0.175.0/crypto/timing_safe_equal.ts
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
/package/{src/templates → edge-runtime}/vendor/deno.land/std@0.175.0/node/_process/exiting.ts
RENAMED
|
File without changes
|
/package/{src/templates → edge-runtime}/vendor/deno.land/std@0.175.0/node/_process/process.ts
RENAMED
|
File without changes
|
/package/{src/templates → edge-runtime}/vendor/deno.land/std@0.175.0/node/_process/stdio.mjs
RENAMED
|
File without changes
|
/package/{src/templates → edge-runtime}/vendor/deno.land/std@0.175.0/node/_process/streams.mjs
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
/package/{src/templates → edge-runtime}/vendor/deno.land/std@0.175.0/node/_util/_util_callbackify.ts
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
/package/{src/templates → edge-runtime}/vendor/deno.land/std@0.175.0/node/assertion_error.ts
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
/package/{src/templates → edge-runtime}/vendor/deno.land/std@0.175.0/node/internal/buffer.d.ts
RENAMED
|
File without changes
|
/package/{src/templates → edge-runtime}/vendor/deno.land/std@0.175.0/node/internal/buffer.mjs
RENAMED
|
File without changes
|
/package/{src/templates → edge-runtime}/vendor/deno.land/std@0.175.0/node/internal/crypto/_keys.ts
RENAMED
|
File without changes
|
|
File without changes
|
/package/{src/templates → edge-runtime}/vendor/deno.land/std@0.175.0/node/internal/error_codes.ts
RENAMED
|
File without changes
|
/package/{src/templates → edge-runtime}/vendor/deno.land/std@0.175.0/node/internal/errors.ts
RENAMED
|
File without changes
|
/package/{src/templates → edge-runtime}/vendor/deno.land/std@0.175.0/node/internal/fixed_queue.ts
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
/package/{src/templates → edge-runtime}/vendor/deno.land/std@0.175.0/node/internal/options.ts
RENAMED
|
File without changes
|
/package/{src/templates → edge-runtime}/vendor/deno.land/std@0.175.0/node/internal/primordials.mjs
RENAMED
|
File without changes
|
|
File without changes
|