next-intlayer 8.9.4 → 8.9.5

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.
@@ -6,8 +6,11 @@ let next_server = require("next/server");
6
6
  /**
7
7
  * Utility to combine multiple Next.js proxies into one.
8
8
  *
9
- * It executes proxies in order, merges headers, and correctly handles
10
- * redirects and rewrites.
9
+ * It executes proxies in order, passing each result as the `response` argument
10
+ * to the next proxy. Routing instructions (redirects / rewrites) and custom
11
+ * response headers are merged across the entire chain, so a later proxy that
12
+ * returns `NextResponse.next()` does not accidentally discard a rewrite set by
13
+ * an earlier proxy.
11
14
  *
12
15
  * @example
13
16
  * import { multipleProxies, intlayerProxy } from "next-intlayer/proxy";
@@ -29,29 +32,43 @@ let next_server = require("next/server");
29
32
  * @returns A single proxy function that runs all provided proxies.
30
33
  */
31
34
  const multipleProxies = (proxies) => async (req, event, response) => {
32
- const proxyHeader = [];
35
+ const proxyHeaders = [];
36
+ let finalStatus = 200;
37
+ let redirectLocation = null;
38
+ let currentResponse = response ?? next_server.NextResponse.next();
33
39
  for (const proxy of proxies) {
34
- const result = await proxy(req, event, response);
35
- if (!result.ok) return result;
36
- proxyHeader.push(result.headers);
40
+ const result = await proxy(req, event, currentResponse);
41
+ if (result.status >= 500) return result;
42
+ if (result.status >= 300 && result.status < 400) {
43
+ finalStatus = result.status;
44
+ const location = result.headers.get("location");
45
+ if (location) redirectLocation = location;
46
+ }
47
+ proxyHeaders.push(new Headers(result.headers));
48
+ currentResponse = result;
37
49
  }
38
50
  const mergedHeaders = new Headers();
39
51
  const transmittedHeaders = new Headers(req.headers);
40
- proxyHeader.forEach((header) => {
41
- for (const [key, value] of header.entries()) {
52
+ proxyHeaders.forEach((headers) => {
53
+ for (const [key, value] of headers.entries()) {
42
54
  if (key === "x-middleware-rewrite" || key === "x-middleware-request-redirect") mergedHeaders.set(key, value);
43
55
  else mergedHeaders.append(key, value);
44
56
  if (key.startsWith("x-middleware-request-")) {
45
- const fixedKey = key.replace("x-middleware-request-", "");
46
- transmittedHeaders.set(fixedKey, value);
57
+ const stripped = key.slice(21);
58
+ transmittedHeaders.set(stripped, value);
47
59
  }
48
60
  }
49
61
  });
50
- const redirect = mergedHeaders.get("x-middleware-request-redirect");
51
- if (redirect) return next_server.NextResponse.redirect(new URL(redirect, req.url), { status: 307 });
52
- const rewrite = mergedHeaders.get("x-middleware-rewrite");
53
- if (rewrite) return next_server.NextResponse.rewrite(new URL(rewrite, req.url), { request: { headers: transmittedHeaders } });
54
- return next_server.NextResponse.next({ request: { headers: transmittedHeaders } });
62
+ const redirectHeader = mergedHeaders.get("x-middleware-request-redirect");
63
+ const rewriteHeader = mergedHeaders.get("x-middleware-rewrite");
64
+ let finalResponse;
65
+ if (redirectHeader || redirectLocation) finalResponse = next_server.NextResponse.redirect(new URL(redirectHeader ?? redirectLocation, req.url), { status: finalStatus >= 300 ? finalStatus : 307 });
66
+ else if (rewriteHeader) finalResponse = next_server.NextResponse.rewrite(new URL(rewriteHeader, req.url), { request: { headers: transmittedHeaders } });
67
+ else finalResponse = next_server.NextResponse.next({ request: { headers: transmittedHeaders } });
68
+ mergedHeaders.forEach((value, key) => {
69
+ if (key !== "x-middleware-rewrite" && key !== "x-middleware-request-redirect" && !key.startsWith("x-middleware-request-") && key !== "location") finalResponse.headers.set(key, value);
70
+ });
71
+ return finalResponse;
55
72
  };
56
73
 
57
74
  //#endregion
@@ -1 +1 @@
1
- {"version":3,"file":"multipleProxies.cjs","names":["NextResponse"],"sources":["../../../src/proxy/multipleProxies.ts"],"sourcesContent":["import {\n type NextFetchEvent,\n type NextRequest,\n NextResponse,\n} from 'next/server';\n\n/**\n * Utility to combine multiple Next.js proxies into one.\n *\n * It executes proxies in order, merges headers, and correctly handles\n * redirects and rewrites.\n *\n * @example\n * import { multipleProxies, intlayerProxy } from \"next-intlayer/proxy\";\n * import { NextResponse } from \"next/server\";\n *\n * const authMiddleware = (req: NextRequest) => {\n * if (!req.cookies.get(\"token\")) {\n * return NextResponse.redirect(new URL(\"/login\", req.url));\n * }\n * return NextResponse.next();\n * };\n *\n * export default multipleProxies([\n * intlayerProxy,\n * authMiddleware,\n * ]);\n *\n * @param proxies - An array of proxy functions to execute in order.\n * @returns A single proxy function that runs all provided proxies.\n */\nexport const multipleProxies =\n (\n proxies: ((\n req: NextRequest,\n event?: NextFetchEvent,\n response?: NextResponse\n ) => NextResponse | Promise<NextResponse>)[]\n ) =>\n async (req: NextRequest, event?: NextFetchEvent, response?: NextResponse) => {\n // Array to store proxy headers\n const proxyHeader: Headers[] = [];\n\n // Loop through proxy functions\n for (const proxy of proxies) {\n // Execute proxy function and await the result\n const result = await proxy(req, event, response);\n\n // Check if the result is not okay and return it\n if (!result.ok) {\n return result;\n }\n\n // Push proxy headers to the array\n proxyHeader.push(result.headers);\n }\n\n // Merge all the headers to check if there is a redirection or rewrite\n const mergedHeaders = new Headers();\n\n // Merge all the custom headers added by the proxies\n const transmittedHeaders = new Headers(req.headers);\n\n // Merge headers\n proxyHeader.forEach((header) => {\n for (const [key, value] of header.entries()) {\n // Prevent routing headers from concatenating and forming invalid URLs\n if (\n key === 'x-middleware-rewrite' ||\n key === 'x-middleware-request-redirect'\n ) {\n mergedHeaders.set(key, value);\n } else {\n mergedHeaders.append(key, value);\n }\n\n // check if it's a custom header added by one of the proxies\n if (key.startsWith('x-middleware-request-')) {\n // remove the prefix to get the original key\n const fixedKey = key.replace('x-middleware-request-', '');\n\n // add the original key to the transmitted headers using set() to prevent duplication\n transmittedHeaders.set(fixedKey, value);\n }\n }\n });\n\n // Look for the 'x-middleware-request-redirect' header\n const redirect = mergedHeaders.get('x-middleware-request-redirect');\n\n // If a redirection is required based on the proxy headers\n if (redirect) {\n // Perform the redirection\n return NextResponse.redirect(new URL(redirect, req.url), {\n status: 307, // Temporary redirect\n });\n }\n\n // Look for the 'x-middleware-rewrite' header\n const rewrite = mergedHeaders.get('x-middleware-rewrite');\n if (rewrite) {\n // Perform the rewrite\n return NextResponse.rewrite(new URL(rewrite, req.url), {\n request: {\n headers: transmittedHeaders,\n },\n });\n }\n\n // Default: continue to next proxy\n return NextResponse.next({\n request: {\n headers: transmittedHeaders,\n },\n });\n };\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA+BA,MAAa,mBAET,YAMF,OAAO,KAAkB,OAAwB,aAA4B;CAE3E,MAAM,cAAyB,EAAE;CAGjC,KAAK,MAAM,SAAS,SAAS;EAE3B,MAAM,SAAS,MAAM,MAAM,KAAK,OAAO,SAAS;EAGhD,IAAI,CAAC,OAAO,IACV,OAAO;EAIT,YAAY,KAAK,OAAO,QAAQ;;CAIlC,MAAM,gBAAgB,IAAI,SAAS;CAGnC,MAAM,qBAAqB,IAAI,QAAQ,IAAI,QAAQ;CAGnD,YAAY,SAAS,WAAW;EAC9B,KAAK,MAAM,CAAC,KAAK,UAAU,OAAO,SAAS,EAAE;GAE3C,IACE,QAAQ,0BACR,QAAQ,iCAER,cAAc,IAAI,KAAK,MAAM;QAE7B,cAAc,OAAO,KAAK,MAAM;GAIlC,IAAI,IAAI,WAAW,wBAAwB,EAAE;IAE3C,MAAM,WAAW,IAAI,QAAQ,yBAAyB,GAAG;IAGzD,mBAAmB,IAAI,UAAU,MAAM;;;GAG3C;CAGF,MAAM,WAAW,cAAc,IAAI,gCAAgC;CAGnE,IAAI,UAEF,OAAOA,yBAAa,SAAS,IAAI,IAAI,UAAU,IAAI,IAAI,EAAE,EACvD,QAAQ,KACT,CAAC;CAIJ,MAAM,UAAU,cAAc,IAAI,uBAAuB;CACzD,IAAI,SAEF,OAAOA,yBAAa,QAAQ,IAAI,IAAI,SAAS,IAAI,IAAI,EAAE,EACrD,SAAS,EACP,SAAS,oBACV,EACF,CAAC;CAIJ,OAAOA,yBAAa,KAAK,EACvB,SAAS,EACP,SAAS,oBACV,EACF,CAAC"}
1
+ {"version":3,"file":"multipleProxies.cjs","names":["NextResponse"],"sources":["../../../src/proxy/multipleProxies.ts"],"sourcesContent":["import {\n type NextFetchEvent,\n type NextRequest,\n NextResponse,\n} from 'next/server';\n\n/**\n * Utility to combine multiple Next.js proxies into one.\n *\n * It executes proxies in order, passing each result as the `response` argument\n * to the next proxy. Routing instructions (redirects / rewrites) and custom\n * response headers are merged across the entire chain, so a later proxy that\n * returns `NextResponse.next()` does not accidentally discard a rewrite set by\n * an earlier proxy.\n *\n * @example\n * import { multipleProxies, intlayerProxy } from \"next-intlayer/proxy\";\n * import { NextResponse } from \"next/server\";\n *\n * const authMiddleware = (req: NextRequest) => {\n * if (!req.cookies.get(\"token\")) {\n * return NextResponse.redirect(new URL(\"/login\", req.url));\n * }\n * return NextResponse.next();\n * };\n *\n * export default multipleProxies([\n * intlayerProxy,\n * authMiddleware,\n * ]);\n *\n * @param proxies - An array of proxy functions to execute in order.\n * @returns A single proxy function that runs all provided proxies.\n */\nexport const multipleProxies =\n (\n proxies: ((\n req: NextRequest,\n event?: NextFetchEvent,\n response?: NextResponse\n ) => NextResponse | Promise<NextResponse>)[]\n ) =>\n async (req: NextRequest, event?: NextFetchEvent, response?: NextResponse) => {\n // Snapshots of each proxy's response headers, collected in order.\n const proxyHeaders: Headers[] = [];\n let finalStatus = 200;\n let redirectLocation: string | null = null;\n\n // Each proxy receives the previous proxy's result so it can inspect or\n // augment it. Start with the caller-supplied response (or a plain next()).\n let currentResponse: NextResponse = response ?? NextResponse.next();\n\n for (const proxy of proxies) {\n const result = await proxy(req, event, currentResponse);\n\n // Bail immediately on server errors.\n if (result.status >= 500) {\n return result;\n }\n\n // Track the strongest redirect in the chain.\n if (result.status >= 300 && result.status < 400) {\n finalStatus = result.status;\n const location = result.headers.get('location');\n if (location) redirectLocation = location;\n }\n\n // Snapshot headers *now* to avoid later mutations to the same object\n // corrupting already-recorded entries from earlier proxies.\n proxyHeaders.push(new Headers(result.headers));\n currentResponse = result;\n }\n\n // ── Merge all collected headers ───────────────────────────────────────────\n\n // mergedHeaders: response headers visible to the browser / Next.js routing.\n const mergedHeaders = new Headers();\n // transmittedHeaders: request headers forwarded to the next route handler.\n const transmittedHeaders = new Headers(req.headers);\n\n proxyHeaders.forEach((headers) => {\n for (const [key, value] of headers.entries()) {\n // Routing headers must not be concatenated last writer wins.\n if (\n key === 'x-middleware-rewrite' ||\n key === 'x-middleware-request-redirect'\n ) {\n mergedHeaders.set(key, value);\n } else {\n mergedHeaders.append(key, value);\n }\n\n // x-middleware-request-<name> forwarded as <name> to route handlers.\n if (key.startsWith('x-middleware-request-')) {\n const stripped = key.slice('x-middleware-request-'.length);\n transmittedHeaders.set(stripped, value);\n }\n }\n });\n\n // ── Construct the final response ──────────────────────────────────────────\n\n const redirectHeader = mergedHeaders.get('x-middleware-request-redirect');\n const rewriteHeader = mergedHeaders.get('x-middleware-rewrite');\n\n let finalResponse: NextResponse;\n\n if (redirectHeader || redirectLocation) {\n finalResponse = NextResponse.redirect(\n new URL((redirectHeader ?? redirectLocation) as string, req.url),\n { status: finalStatus >= 300 ? finalStatus : 307 }\n );\n } else if (rewriteHeader) {\n finalResponse = NextResponse.rewrite(new URL(rewriteHeader, req.url), {\n request: { headers: transmittedHeaders },\n });\n } else {\n finalResponse = NextResponse.next({\n request: { headers: transmittedHeaders },\n });\n }\n\n // Copy all accumulated custom response headers onto the final response,\n // skipping internal Next.js routing headers (already handled above).\n mergedHeaders.forEach((value, key) => {\n if (\n key !== 'x-middleware-rewrite' &&\n key !== 'x-middleware-request-redirect' &&\n !key.startsWith('x-middleware-request-') &&\n key !== 'location'\n ) {\n finalResponse.headers.set(key, value);\n }\n });\n\n return finalResponse;\n };\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAkCA,MAAa,mBAET,YAMF,OAAO,KAAkB,OAAwB,aAA4B;CAE3E,MAAM,eAA0B,EAAE;CAClC,IAAI,cAAc;CAClB,IAAI,mBAAkC;CAItC,IAAI,kBAAgC,YAAYA,yBAAa,MAAM;CAEnE,KAAK,MAAM,SAAS,SAAS;EAC3B,MAAM,SAAS,MAAM,MAAM,KAAK,OAAO,gBAAgB;EAGvD,IAAI,OAAO,UAAU,KACnB,OAAO;EAIT,IAAI,OAAO,UAAU,OAAO,OAAO,SAAS,KAAK;GAC/C,cAAc,OAAO;GACrB,MAAM,WAAW,OAAO,QAAQ,IAAI,WAAW;GAC/C,IAAI,UAAU,mBAAmB;;EAKnC,aAAa,KAAK,IAAI,QAAQ,OAAO,QAAQ,CAAC;EAC9C,kBAAkB;;CAMpB,MAAM,gBAAgB,IAAI,SAAS;CAEnC,MAAM,qBAAqB,IAAI,QAAQ,IAAI,QAAQ;CAEnD,aAAa,SAAS,YAAY;EAChC,KAAK,MAAM,CAAC,KAAK,UAAU,QAAQ,SAAS,EAAE;GAE5C,IACE,QAAQ,0BACR,QAAQ,iCAER,cAAc,IAAI,KAAK,MAAM;QAE7B,cAAc,OAAO,KAAK,MAAM;GAIlC,IAAI,IAAI,WAAW,wBAAwB,EAAE;IAC3C,MAAM,WAAW,IAAI,MAAM,GAA+B;IAC1D,mBAAmB,IAAI,UAAU,MAAM;;;GAG3C;CAIF,MAAM,iBAAiB,cAAc,IAAI,gCAAgC;CACzE,MAAM,gBAAgB,cAAc,IAAI,uBAAuB;CAE/D,IAAI;CAEJ,IAAI,kBAAkB,kBACpB,gBAAgBA,yBAAa,SAC3B,IAAI,IAAK,kBAAkB,kBAA6B,IAAI,IAAI,EAChE,EAAE,QAAQ,eAAe,MAAM,cAAc,KAAK,CACnD;MACI,IAAI,eACT,gBAAgBA,yBAAa,QAAQ,IAAI,IAAI,eAAe,IAAI,IAAI,EAAE,EACpE,SAAS,EAAE,SAAS,oBAAoB,EACzC,CAAC;MAEF,gBAAgBA,yBAAa,KAAK,EAChC,SAAS,EAAE,SAAS,oBAAoB,EACzC,CAAC;CAKJ,cAAc,SAAS,OAAO,QAAQ;EACpC,IACE,QAAQ,0BACR,QAAQ,mCACR,CAAC,IAAI,WAAW,wBAAwB,IACxC,QAAQ,YAER,cAAc,QAAQ,IAAI,KAAK,MAAM;GAEvC;CAEF,OAAO"}
@@ -4,8 +4,11 @@ import { NextResponse } from "next/server";
4
4
  /**
5
5
  * Utility to combine multiple Next.js proxies into one.
6
6
  *
7
- * It executes proxies in order, merges headers, and correctly handles
8
- * redirects and rewrites.
7
+ * It executes proxies in order, passing each result as the `response` argument
8
+ * to the next proxy. Routing instructions (redirects / rewrites) and custom
9
+ * response headers are merged across the entire chain, so a later proxy that
10
+ * returns `NextResponse.next()` does not accidentally discard a rewrite set by
11
+ * an earlier proxy.
9
12
  *
10
13
  * @example
11
14
  * import { multipleProxies, intlayerProxy } from "next-intlayer/proxy";
@@ -27,29 +30,43 @@ import { NextResponse } from "next/server";
27
30
  * @returns A single proxy function that runs all provided proxies.
28
31
  */
29
32
  const multipleProxies = (proxies) => async (req, event, response) => {
30
- const proxyHeader = [];
33
+ const proxyHeaders = [];
34
+ let finalStatus = 200;
35
+ let redirectLocation = null;
36
+ let currentResponse = response ?? NextResponse.next();
31
37
  for (const proxy of proxies) {
32
- const result = await proxy(req, event, response);
33
- if (!result.ok) return result;
34
- proxyHeader.push(result.headers);
38
+ const result = await proxy(req, event, currentResponse);
39
+ if (result.status >= 500) return result;
40
+ if (result.status >= 300 && result.status < 400) {
41
+ finalStatus = result.status;
42
+ const location = result.headers.get("location");
43
+ if (location) redirectLocation = location;
44
+ }
45
+ proxyHeaders.push(new Headers(result.headers));
46
+ currentResponse = result;
35
47
  }
36
48
  const mergedHeaders = new Headers();
37
49
  const transmittedHeaders = new Headers(req.headers);
38
- proxyHeader.forEach((header) => {
39
- for (const [key, value] of header.entries()) {
50
+ proxyHeaders.forEach((headers) => {
51
+ for (const [key, value] of headers.entries()) {
40
52
  if (key === "x-middleware-rewrite" || key === "x-middleware-request-redirect") mergedHeaders.set(key, value);
41
53
  else mergedHeaders.append(key, value);
42
54
  if (key.startsWith("x-middleware-request-")) {
43
- const fixedKey = key.replace("x-middleware-request-", "");
44
- transmittedHeaders.set(fixedKey, value);
55
+ const stripped = key.slice(21);
56
+ transmittedHeaders.set(stripped, value);
45
57
  }
46
58
  }
47
59
  });
48
- const redirect = mergedHeaders.get("x-middleware-request-redirect");
49
- if (redirect) return NextResponse.redirect(new URL(redirect, req.url), { status: 307 });
50
- const rewrite = mergedHeaders.get("x-middleware-rewrite");
51
- if (rewrite) return NextResponse.rewrite(new URL(rewrite, req.url), { request: { headers: transmittedHeaders } });
52
- return NextResponse.next({ request: { headers: transmittedHeaders } });
60
+ const redirectHeader = mergedHeaders.get("x-middleware-request-redirect");
61
+ const rewriteHeader = mergedHeaders.get("x-middleware-rewrite");
62
+ let finalResponse;
63
+ if (redirectHeader || redirectLocation) finalResponse = NextResponse.redirect(new URL(redirectHeader ?? redirectLocation, req.url), { status: finalStatus >= 300 ? finalStatus : 307 });
64
+ else if (rewriteHeader) finalResponse = NextResponse.rewrite(new URL(rewriteHeader, req.url), { request: { headers: transmittedHeaders } });
65
+ else finalResponse = NextResponse.next({ request: { headers: transmittedHeaders } });
66
+ mergedHeaders.forEach((value, key) => {
67
+ if (key !== "x-middleware-rewrite" && key !== "x-middleware-request-redirect" && !key.startsWith("x-middleware-request-") && key !== "location") finalResponse.headers.set(key, value);
68
+ });
69
+ return finalResponse;
53
70
  };
54
71
 
55
72
  //#endregion
@@ -1 +1 @@
1
- {"version":3,"file":"multipleProxies.mjs","names":[],"sources":["../../../src/proxy/multipleProxies.ts"],"sourcesContent":["import {\n type NextFetchEvent,\n type NextRequest,\n NextResponse,\n} from 'next/server';\n\n/**\n * Utility to combine multiple Next.js proxies into one.\n *\n * It executes proxies in order, merges headers, and correctly handles\n * redirects and rewrites.\n *\n * @example\n * import { multipleProxies, intlayerProxy } from \"next-intlayer/proxy\";\n * import { NextResponse } from \"next/server\";\n *\n * const authMiddleware = (req: NextRequest) => {\n * if (!req.cookies.get(\"token\")) {\n * return NextResponse.redirect(new URL(\"/login\", req.url));\n * }\n * return NextResponse.next();\n * };\n *\n * export default multipleProxies([\n * intlayerProxy,\n * authMiddleware,\n * ]);\n *\n * @param proxies - An array of proxy functions to execute in order.\n * @returns A single proxy function that runs all provided proxies.\n */\nexport const multipleProxies =\n (\n proxies: ((\n req: NextRequest,\n event?: NextFetchEvent,\n response?: NextResponse\n ) => NextResponse | Promise<NextResponse>)[]\n ) =>\n async (req: NextRequest, event?: NextFetchEvent, response?: NextResponse) => {\n // Array to store proxy headers\n const proxyHeader: Headers[] = [];\n\n // Loop through proxy functions\n for (const proxy of proxies) {\n // Execute proxy function and await the result\n const result = await proxy(req, event, response);\n\n // Check if the result is not okay and return it\n if (!result.ok) {\n return result;\n }\n\n // Push proxy headers to the array\n proxyHeader.push(result.headers);\n }\n\n // Merge all the headers to check if there is a redirection or rewrite\n const mergedHeaders = new Headers();\n\n // Merge all the custom headers added by the proxies\n const transmittedHeaders = new Headers(req.headers);\n\n // Merge headers\n proxyHeader.forEach((header) => {\n for (const [key, value] of header.entries()) {\n // Prevent routing headers from concatenating and forming invalid URLs\n if (\n key === 'x-middleware-rewrite' ||\n key === 'x-middleware-request-redirect'\n ) {\n mergedHeaders.set(key, value);\n } else {\n mergedHeaders.append(key, value);\n }\n\n // check if it's a custom header added by one of the proxies\n if (key.startsWith('x-middleware-request-')) {\n // remove the prefix to get the original key\n const fixedKey = key.replace('x-middleware-request-', '');\n\n // add the original key to the transmitted headers using set() to prevent duplication\n transmittedHeaders.set(fixedKey, value);\n }\n }\n });\n\n // Look for the 'x-middleware-request-redirect' header\n const redirect = mergedHeaders.get('x-middleware-request-redirect');\n\n // If a redirection is required based on the proxy headers\n if (redirect) {\n // Perform the redirection\n return NextResponse.redirect(new URL(redirect, req.url), {\n status: 307, // Temporary redirect\n });\n }\n\n // Look for the 'x-middleware-rewrite' header\n const rewrite = mergedHeaders.get('x-middleware-rewrite');\n if (rewrite) {\n // Perform the rewrite\n return NextResponse.rewrite(new URL(rewrite, req.url), {\n request: {\n headers: transmittedHeaders,\n },\n });\n }\n\n // Default: continue to next proxy\n return NextResponse.next({\n request: {\n headers: transmittedHeaders,\n },\n });\n };\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AA+BA,MAAa,mBAET,YAMF,OAAO,KAAkB,OAAwB,aAA4B;CAE3E,MAAM,cAAyB,EAAE;CAGjC,KAAK,MAAM,SAAS,SAAS;EAE3B,MAAM,SAAS,MAAM,MAAM,KAAK,OAAO,SAAS;EAGhD,IAAI,CAAC,OAAO,IACV,OAAO;EAIT,YAAY,KAAK,OAAO,QAAQ;;CAIlC,MAAM,gBAAgB,IAAI,SAAS;CAGnC,MAAM,qBAAqB,IAAI,QAAQ,IAAI,QAAQ;CAGnD,YAAY,SAAS,WAAW;EAC9B,KAAK,MAAM,CAAC,KAAK,UAAU,OAAO,SAAS,EAAE;GAE3C,IACE,QAAQ,0BACR,QAAQ,iCAER,cAAc,IAAI,KAAK,MAAM;QAE7B,cAAc,OAAO,KAAK,MAAM;GAIlC,IAAI,IAAI,WAAW,wBAAwB,EAAE;IAE3C,MAAM,WAAW,IAAI,QAAQ,yBAAyB,GAAG;IAGzD,mBAAmB,IAAI,UAAU,MAAM;;;GAG3C;CAGF,MAAM,WAAW,cAAc,IAAI,gCAAgC;CAGnE,IAAI,UAEF,OAAO,aAAa,SAAS,IAAI,IAAI,UAAU,IAAI,IAAI,EAAE,EACvD,QAAQ,KACT,CAAC;CAIJ,MAAM,UAAU,cAAc,IAAI,uBAAuB;CACzD,IAAI,SAEF,OAAO,aAAa,QAAQ,IAAI,IAAI,SAAS,IAAI,IAAI,EAAE,EACrD,SAAS,EACP,SAAS,oBACV,EACF,CAAC;CAIJ,OAAO,aAAa,KAAK,EACvB,SAAS,EACP,SAAS,oBACV,EACF,CAAC"}
1
+ {"version":3,"file":"multipleProxies.mjs","names":[],"sources":["../../../src/proxy/multipleProxies.ts"],"sourcesContent":["import {\n type NextFetchEvent,\n type NextRequest,\n NextResponse,\n} from 'next/server';\n\n/**\n * Utility to combine multiple Next.js proxies into one.\n *\n * It executes proxies in order, passing each result as the `response` argument\n * to the next proxy. Routing instructions (redirects / rewrites) and custom\n * response headers are merged across the entire chain, so a later proxy that\n * returns `NextResponse.next()` does not accidentally discard a rewrite set by\n * an earlier proxy.\n *\n * @example\n * import { multipleProxies, intlayerProxy } from \"next-intlayer/proxy\";\n * import { NextResponse } from \"next/server\";\n *\n * const authMiddleware = (req: NextRequest) => {\n * if (!req.cookies.get(\"token\")) {\n * return NextResponse.redirect(new URL(\"/login\", req.url));\n * }\n * return NextResponse.next();\n * };\n *\n * export default multipleProxies([\n * intlayerProxy,\n * authMiddleware,\n * ]);\n *\n * @param proxies - An array of proxy functions to execute in order.\n * @returns A single proxy function that runs all provided proxies.\n */\nexport const multipleProxies =\n (\n proxies: ((\n req: NextRequest,\n event?: NextFetchEvent,\n response?: NextResponse\n ) => NextResponse | Promise<NextResponse>)[]\n ) =>\n async (req: NextRequest, event?: NextFetchEvent, response?: NextResponse) => {\n // Snapshots of each proxy's response headers, collected in order.\n const proxyHeaders: Headers[] = [];\n let finalStatus = 200;\n let redirectLocation: string | null = null;\n\n // Each proxy receives the previous proxy's result so it can inspect or\n // augment it. Start with the caller-supplied response (or a plain next()).\n let currentResponse: NextResponse = response ?? NextResponse.next();\n\n for (const proxy of proxies) {\n const result = await proxy(req, event, currentResponse);\n\n // Bail immediately on server errors.\n if (result.status >= 500) {\n return result;\n }\n\n // Track the strongest redirect in the chain.\n if (result.status >= 300 && result.status < 400) {\n finalStatus = result.status;\n const location = result.headers.get('location');\n if (location) redirectLocation = location;\n }\n\n // Snapshot headers *now* to avoid later mutations to the same object\n // corrupting already-recorded entries from earlier proxies.\n proxyHeaders.push(new Headers(result.headers));\n currentResponse = result;\n }\n\n // ── Merge all collected headers ───────────────────────────────────────────\n\n // mergedHeaders: response headers visible to the browser / Next.js routing.\n const mergedHeaders = new Headers();\n // transmittedHeaders: request headers forwarded to the next route handler.\n const transmittedHeaders = new Headers(req.headers);\n\n proxyHeaders.forEach((headers) => {\n for (const [key, value] of headers.entries()) {\n // Routing headers must not be concatenated last writer wins.\n if (\n key === 'x-middleware-rewrite' ||\n key === 'x-middleware-request-redirect'\n ) {\n mergedHeaders.set(key, value);\n } else {\n mergedHeaders.append(key, value);\n }\n\n // x-middleware-request-<name> forwarded as <name> to route handlers.\n if (key.startsWith('x-middleware-request-')) {\n const stripped = key.slice('x-middleware-request-'.length);\n transmittedHeaders.set(stripped, value);\n }\n }\n });\n\n // ── Construct the final response ──────────────────────────────────────────\n\n const redirectHeader = mergedHeaders.get('x-middleware-request-redirect');\n const rewriteHeader = mergedHeaders.get('x-middleware-rewrite');\n\n let finalResponse: NextResponse;\n\n if (redirectHeader || redirectLocation) {\n finalResponse = NextResponse.redirect(\n new URL((redirectHeader ?? redirectLocation) as string, req.url),\n { status: finalStatus >= 300 ? finalStatus : 307 }\n );\n } else if (rewriteHeader) {\n finalResponse = NextResponse.rewrite(new URL(rewriteHeader, req.url), {\n request: { headers: transmittedHeaders },\n });\n } else {\n finalResponse = NextResponse.next({\n request: { headers: transmittedHeaders },\n });\n }\n\n // Copy all accumulated custom response headers onto the final response,\n // skipping internal Next.js routing headers (already handled above).\n mergedHeaders.forEach((value, key) => {\n if (\n key !== 'x-middleware-rewrite' &&\n key !== 'x-middleware-request-redirect' &&\n !key.startsWith('x-middleware-request-') &&\n key !== 'location'\n ) {\n finalResponse.headers.set(key, value);\n }\n });\n\n return finalResponse;\n };\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAkCA,MAAa,mBAET,YAMF,OAAO,KAAkB,OAAwB,aAA4B;CAE3E,MAAM,eAA0B,EAAE;CAClC,IAAI,cAAc;CAClB,IAAI,mBAAkC;CAItC,IAAI,kBAAgC,YAAY,aAAa,MAAM;CAEnE,KAAK,MAAM,SAAS,SAAS;EAC3B,MAAM,SAAS,MAAM,MAAM,KAAK,OAAO,gBAAgB;EAGvD,IAAI,OAAO,UAAU,KACnB,OAAO;EAIT,IAAI,OAAO,UAAU,OAAO,OAAO,SAAS,KAAK;GAC/C,cAAc,OAAO;GACrB,MAAM,WAAW,OAAO,QAAQ,IAAI,WAAW;GAC/C,IAAI,UAAU,mBAAmB;;EAKnC,aAAa,KAAK,IAAI,QAAQ,OAAO,QAAQ,CAAC;EAC9C,kBAAkB;;CAMpB,MAAM,gBAAgB,IAAI,SAAS;CAEnC,MAAM,qBAAqB,IAAI,QAAQ,IAAI,QAAQ;CAEnD,aAAa,SAAS,YAAY;EAChC,KAAK,MAAM,CAAC,KAAK,UAAU,QAAQ,SAAS,EAAE;GAE5C,IACE,QAAQ,0BACR,QAAQ,iCAER,cAAc,IAAI,KAAK,MAAM;QAE7B,cAAc,OAAO,KAAK,MAAM;GAIlC,IAAI,IAAI,WAAW,wBAAwB,EAAE;IAC3C,MAAM,WAAW,IAAI,MAAM,GAA+B;IAC1D,mBAAmB,IAAI,UAAU,MAAM;;;GAG3C;CAIF,MAAM,iBAAiB,cAAc,IAAI,gCAAgC;CACzE,MAAM,gBAAgB,cAAc,IAAI,uBAAuB;CAE/D,IAAI;CAEJ,IAAI,kBAAkB,kBACpB,gBAAgB,aAAa,SAC3B,IAAI,IAAK,kBAAkB,kBAA6B,IAAI,IAAI,EAChE,EAAE,QAAQ,eAAe,MAAM,cAAc,KAAK,CACnD;MACI,IAAI,eACT,gBAAgB,aAAa,QAAQ,IAAI,IAAI,eAAe,IAAI,IAAI,EAAE,EACpE,SAAS,EAAE,SAAS,oBAAoB,EACzC,CAAC;MAEF,gBAAgB,aAAa,KAAK,EAChC,SAAS,EAAE,SAAS,oBAAoB,EACzC,CAAC;CAKJ,cAAc,SAAS,OAAO,QAAQ;EACpC,IACE,QAAQ,0BACR,QAAQ,mCACR,CAAC,IAAI,WAAW,wBAAwB,IACxC,QAAQ,YAER,cAAc,QAAQ,IAAI,KAAK,MAAM;GAEvC;CAEF,OAAO"}
@@ -18,6 +18,7 @@ declare const MarkdownProvider: _$react.FC<index_d_exports.MarkdownProviderOptio
18
18
  hr?: _$react.FC<_$react.DetailedHTMLProps<_$react.HTMLAttributes<HTMLHRElement>, HTMLHRElement>>;
19
19
  th?: _$react.FC<_$react.DetailedHTMLProps<_$react.ThHTMLAttributes<HTMLTableHeaderCellElement>, HTMLTableHeaderCellElement>>;
20
20
  tr?: _$react.FC<_$react.DetailedHTMLProps<_$react.HTMLAttributes<HTMLTableRowElement>, HTMLTableRowElement>>;
21
+ output?: _$react.FC<_$react.DetailedHTMLProps<_$react.OutputHTMLAttributes<HTMLOutputElement>, HTMLOutputElement>>;
21
22
  html?: _$react.FC<_$react.DetailedHTMLProps<_$react.HtmlHTMLAttributes<HTMLHtmlElement>, HTMLHtmlElement>>;
22
23
  head?: _$react.FC<_$react.DetailedHTMLProps<_$react.HTMLAttributes<HTMLHeadElement>, HTMLHeadElement>>;
23
24
  body?: _$react.FC<_$react.DetailedHTMLProps<_$react.HTMLAttributes<HTMLBodyElement>, HTMLBodyElement>>;
@@ -86,7 +87,6 @@ declare const MarkdownProvider: _$react.FC<index_d_exports.MarkdownProviderOptio
86
87
  fieldset?: _$react.FC<_$react.DetailedHTMLProps<_$react.FieldsetHTMLAttributes<HTMLFieldSetElement>, HTMLFieldSetElement>>;
87
88
  legend?: _$react.FC<_$react.DetailedHTMLProps<_$react.HTMLAttributes<HTMLLegendElement>, HTMLLegendElement>>;
88
89
  datalist?: _$react.FC<_$react.DetailedHTMLProps<_$react.HTMLAttributes<HTMLDataListElement>, HTMLDataListElement>>;
89
- output?: _$react.FC<_$react.DetailedHTMLProps<_$react.OutputHTMLAttributes<HTMLOutputElement>, HTMLOutputElement>>;
90
90
  progress?: _$react.FC<_$react.DetailedHTMLProps<_$react.ProgressHTMLAttributes<HTMLProgressElement>, HTMLProgressElement>>;
91
91
  meter?: _$react.FC<_$react.DetailedHTMLProps<_$react.MeterHTMLAttributes<HTMLMeterElement>, HTMLMeterElement>>;
92
92
  img?: _$react.FC<_$react.DetailedHTMLProps<_$react.ImgHTMLAttributes<HTMLImageElement>, HTMLImageElement>>;
@@ -123,6 +123,7 @@ declare const MarkdownProvider: _$react.FC<index_d_exports.MarkdownProviderOptio
123
123
  hr?: _$react.FC<_$react.DetailedHTMLProps<_$react.HTMLAttributes<HTMLHRElement>, HTMLHRElement>>;
124
124
  th?: _$react.FC<_$react.DetailedHTMLProps<_$react.ThHTMLAttributes<HTMLTableHeaderCellElement>, HTMLTableHeaderCellElement>>;
125
125
  tr?: _$react.FC<_$react.DetailedHTMLProps<_$react.HTMLAttributes<HTMLTableRowElement>, HTMLTableRowElement>>;
126
+ output?: _$react.FC<_$react.DetailedHTMLProps<_$react.OutputHTMLAttributes<HTMLOutputElement>, HTMLOutputElement>>;
126
127
  html?: _$react.FC<_$react.DetailedHTMLProps<_$react.HtmlHTMLAttributes<HTMLHtmlElement>, HTMLHtmlElement>>;
127
128
  head?: _$react.FC<_$react.DetailedHTMLProps<_$react.HTMLAttributes<HTMLHeadElement>, HTMLHeadElement>>;
128
129
  body?: _$react.FC<_$react.DetailedHTMLProps<_$react.HTMLAttributes<HTMLBodyElement>, HTMLBodyElement>>;
@@ -191,7 +192,6 @@ declare const MarkdownProvider: _$react.FC<index_d_exports.MarkdownProviderOptio
191
192
  fieldset?: _$react.FC<_$react.DetailedHTMLProps<_$react.FieldsetHTMLAttributes<HTMLFieldSetElement>, HTMLFieldSetElement>>;
192
193
  legend?: _$react.FC<_$react.DetailedHTMLProps<_$react.HTMLAttributes<HTMLLegendElement>, HTMLLegendElement>>;
193
194
  datalist?: _$react.FC<_$react.DetailedHTMLProps<_$react.HTMLAttributes<HTMLDataListElement>, HTMLDataListElement>>;
194
- output?: _$react.FC<_$react.DetailedHTMLProps<_$react.OutputHTMLAttributes<HTMLOutputElement>, HTMLOutputElement>>;
195
195
  progress?: _$react.FC<_$react.DetailedHTMLProps<_$react.ProgressHTMLAttributes<HTMLProgressElement>, HTMLProgressElement>>;
196
196
  meter?: _$react.FC<_$react.DetailedHTMLProps<_$react.MeterHTMLAttributes<HTMLMeterElement>, HTMLMeterElement>>;
197
197
  img?: _$react.FC<_$react.DetailedHTMLProps<_$react.ImgHTMLAttributes<HTMLImageElement>, HTMLImageElement>>;
@@ -234,6 +234,7 @@ declare const useMarkdownContext: () => {
234
234
  hr?: _$react.FC<_$react.DetailedHTMLProps<_$react.HTMLAttributes<HTMLHRElement>, HTMLHRElement>>;
235
235
  th?: _$react.FC<_$react.DetailedHTMLProps<_$react.ThHTMLAttributes<HTMLTableHeaderCellElement>, HTMLTableHeaderCellElement>>;
236
236
  tr?: _$react.FC<_$react.DetailedHTMLProps<_$react.HTMLAttributes<HTMLTableRowElement>, HTMLTableRowElement>>;
237
+ output?: _$react.FC<_$react.DetailedHTMLProps<_$react.OutputHTMLAttributes<HTMLOutputElement>, HTMLOutputElement>>;
237
238
  html?: _$react.FC<_$react.DetailedHTMLProps<_$react.HtmlHTMLAttributes<HTMLHtmlElement>, HTMLHtmlElement>>;
238
239
  head?: _$react.FC<_$react.DetailedHTMLProps<_$react.HTMLAttributes<HTMLHeadElement>, HTMLHeadElement>>;
239
240
  body?: _$react.FC<_$react.DetailedHTMLProps<_$react.HTMLAttributes<HTMLBodyElement>, HTMLBodyElement>>;
@@ -302,7 +303,6 @@ declare const useMarkdownContext: () => {
302
303
  fieldset?: _$react.FC<_$react.DetailedHTMLProps<_$react.FieldsetHTMLAttributes<HTMLFieldSetElement>, HTMLFieldSetElement>>;
303
304
  legend?: _$react.FC<_$react.DetailedHTMLProps<_$react.HTMLAttributes<HTMLLegendElement>, HTMLLegendElement>>;
304
305
  datalist?: _$react.FC<_$react.DetailedHTMLProps<_$react.HTMLAttributes<HTMLDataListElement>, HTMLDataListElement>>;
305
- output?: _$react.FC<_$react.DetailedHTMLProps<_$react.OutputHTMLAttributes<HTMLOutputElement>, HTMLOutputElement>>;
306
306
  progress?: _$react.FC<_$react.DetailedHTMLProps<_$react.ProgressHTMLAttributes<HTMLProgressElement>, HTMLProgressElement>>;
307
307
  meter?: _$react.FC<_$react.DetailedHTMLProps<_$react.MeterHTMLAttributes<HTMLMeterElement>, HTMLMeterElement>>;
308
308
  img?: _$react.FC<_$react.DetailedHTMLProps<_$react.ImgHTMLAttributes<HTMLImageElement>, HTMLImageElement>>;
@@ -338,6 +338,7 @@ declare const useMarkdownContext: () => {
338
338
  hr?: _$react.FC<_$react.DetailedHTMLProps<_$react.HTMLAttributes<HTMLHRElement>, HTMLHRElement>>;
339
339
  th?: _$react.FC<_$react.DetailedHTMLProps<_$react.ThHTMLAttributes<HTMLTableHeaderCellElement>, HTMLTableHeaderCellElement>>;
340
340
  tr?: _$react.FC<_$react.DetailedHTMLProps<_$react.HTMLAttributes<HTMLTableRowElement>, HTMLTableRowElement>>;
341
+ output?: _$react.FC<_$react.DetailedHTMLProps<_$react.OutputHTMLAttributes<HTMLOutputElement>, HTMLOutputElement>>;
341
342
  html?: _$react.FC<_$react.DetailedHTMLProps<_$react.HtmlHTMLAttributes<HTMLHtmlElement>, HTMLHtmlElement>>;
342
343
  head?: _$react.FC<_$react.DetailedHTMLProps<_$react.HTMLAttributes<HTMLHeadElement>, HTMLHeadElement>>;
343
344
  body?: _$react.FC<_$react.DetailedHTMLProps<_$react.HTMLAttributes<HTMLBodyElement>, HTMLBodyElement>>;
@@ -406,7 +407,6 @@ declare const useMarkdownContext: () => {
406
407
  fieldset?: _$react.FC<_$react.DetailedHTMLProps<_$react.FieldsetHTMLAttributes<HTMLFieldSetElement>, HTMLFieldSetElement>>;
407
408
  legend?: _$react.FC<_$react.DetailedHTMLProps<_$react.HTMLAttributes<HTMLLegendElement>, HTMLLegendElement>>;
408
409
  datalist?: _$react.FC<_$react.DetailedHTMLProps<_$react.HTMLAttributes<HTMLDataListElement>, HTMLDataListElement>>;
409
- output?: _$react.FC<_$react.DetailedHTMLProps<_$react.OutputHTMLAttributes<HTMLOutputElement>, HTMLOutputElement>>;
410
410
  progress?: _$react.FC<_$react.DetailedHTMLProps<_$react.ProgressHTMLAttributes<HTMLProgressElement>, HTMLProgressElement>>;
411
411
  meter?: _$react.FC<_$react.DetailedHTMLProps<_$react.MeterHTMLAttributes<HTMLMeterElement>, HTMLMeterElement>>;
412
412
  img?: _$react.FC<_$react.DetailedHTMLProps<_$react.ImgHTMLAttributes<HTMLImageElement>, HTMLImageElement>>;
@@ -1 +1 @@
1
- {"version":3,"file":"middleware.d.ts","names":[],"sources":["../../../src/proxy/middleware.ts"],"mappings":";;;;;;AA8BA;;;;;;;;;;;;;;;;;;AAEA;;;;;AAFA,cAAa,kBAAA,GAAkB,OAAA,EAAgB,cAAA,CAAhB,WAAA,EAAA,MAAA,GAAA,cAAA,CAAA,cAAA,EAAA,SAAA,GAAA,cAAA,CAAA,YAAA,KAAA,cAAA,CAAA,YAAA;AAAA,cAElB,mBAAA,GAAmB,OAAA,IAAA,GAAA,EAAkB,cAAA,CAAlB,WAAA,EAAA,KAAA,GAAA,cAAA,CACxB,cAAA,EAAA,QAAA,GAAA,cAAA,CAAiC,YAAA,KAAA,cAAA,CAAA,YAAA,GAAA,OAAA,CAAA,cAAA,CAAA,YAAA,UAAgF,GAAA,EAAhF,cAAA,CAAgF,WAAA,EAAiB,KAAA,GAAD,cAAA,CAAC,cAAA,EAAwB,QAAA,GAAD,cAAA,CAAC,YAAA,KAAwB,OAAA,CAAA,cAAA,CAAA,YAAA"}
1
+ {"version":3,"file":"middleware.d.ts","names":[],"sources":["../../../src/proxy/middleware.ts"],"mappings":";;;;;;AA8BA;;;;;;;;;;;;;;;;;;AAEA;;;;;AAFA,cAAa,kBAAA,GAAkB,OAAA,EAAgB,cAAA,CAAhB,WAAA,EAAA,MAAA,GAAA,cAAA,CAAA,cAAA,EAAA,SAAA,GAAA,cAAA,CAAA,YAAA,KAAA,cAAA,CAAA,YAAA;AAAA,cAElB,mBAAA,GAAmB,OAAA,IAAA,GAAA,EAAkB,cAAA,CAAlB,WAAA,EAAA,KAAA,GAAA,cAAA,CACsN,cAAA,EAAA,QAAA,GAAA,cAAA,CAAiC,YAAA,KAAA,cAAA,CAAA,YAAA,GAAA,OAAA,CAAA,cAAA,CAAA,YAAA,UAAgF,GAAA,EAAhF,cAAA,CAAgF,WAAA,EAAiB,KAAA,GAAD,cAAA,CAAC,cAAA,EAAwB,QAAA,GAAD,cAAA,CAAC,YAAA,KAAwB,OAAA,CAAA,cAAA,CAAA,YAAA"}
@@ -4,8 +4,11 @@ import { NextFetchEvent, NextRequest, NextResponse } from "next/server";
4
4
  /**
5
5
  * Utility to combine multiple Next.js proxies into one.
6
6
  *
7
- * It executes proxies in order, merges headers, and correctly handles
8
- * redirects and rewrites.
7
+ * It executes proxies in order, passing each result as the `response` argument
8
+ * to the next proxy. Routing instructions (redirects / rewrites) and custom
9
+ * response headers are merged across the entire chain, so a later proxy that
10
+ * returns `NextResponse.next()` does not accidentally discard a rewrite set by
11
+ * an earlier proxy.
9
12
  *
10
13
  * @example
11
14
  * import { multipleProxies, intlayerProxy } from "next-intlayer/proxy";
@@ -1 +1 @@
1
- {"version":3,"file":"multipleProxies.d.ts","names":[],"sources":["../../../src/proxy/multipleProxies.ts"],"mappings":";;;;;AA+BA;;;;;;;;;;;;;;;;;;;;;;;cAAa,eAAA,GAET,OAAA,IACE,GAAA,EAAK,WAAA,EACL,KAAA,GAAQ,cAAA,EACR,QAAA,GAAW,YAAA,KACR,YAAA,GAAe,OAAA,CAAQ,YAAA,UAEvB,GAAA,EAAK,WAAA,EAAa,KAAA,GAAQ,cAAA,EAAgB,QAAA,GAAW,YAAA,KAAY,OAAA,CAAA,YAAA"}
1
+ {"version":3,"file":"multipleProxies.d.ts","names":[],"sources":["../../../src/proxy/multipleProxies.ts"],"mappings":";;;;;AAkCA;;;;;;;;;;;;;;;;;;;;;;;;;;cAAa,eAAA,GAET,OAAA,IACE,GAAA,EAAK,WAAA,EACL,KAAA,GAAQ,cAAA,EACR,QAAA,GAAW,YAAA,KACR,YAAA,GAAe,OAAA,CAAQ,YAAA,UAEvB,GAAA,EAAK,WAAA,EAAa,KAAA,GAAQ,cAAA,EAAgB,QAAA,GAAW,YAAA,KAAY,OAAA,CAAA,YAAA"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "next-intlayer",
3
- "version": "8.9.4",
3
+ "version": "8.9.5",
4
4
  "private": false,
5
5
  "description": "Simplify internationalization i18n in Next.js with context providers, hooks, locale detection, and multilingual content integration.",
6
6
  "keywords": [
@@ -128,18 +128,18 @@
128
128
  "typecheck": "tsc --noEmit --project tsconfig.types.json"
129
129
  },
130
130
  "dependencies": {
131
- "@intlayer/chokidar": "8.9.4",
132
- "@intlayer/config": "8.9.4",
133
- "@intlayer/core": "8.9.4",
134
- "@intlayer/dictionaries-entry": "8.9.4",
135
- "@intlayer/types": "8.9.4",
136
- "@intlayer/webpack": "8.9.4",
131
+ "@intlayer/chokidar": "8.9.5",
132
+ "@intlayer/config": "8.9.5",
133
+ "@intlayer/core": "8.9.5",
134
+ "@intlayer/dictionaries-entry": "8.9.5",
135
+ "@intlayer/types": "8.9.5",
136
+ "@intlayer/webpack": "8.9.5",
137
137
  "defu": "6.1.7",
138
138
  "node-loader": "2.1.0",
139
- "react-intlayer": "8.9.4"
139
+ "react-intlayer": "8.9.5"
140
140
  },
141
141
  "devDependencies": {
142
- "@types/node": "25.6.2",
142
+ "@types/node": "25.7.0",
143
143
  "@types/react": ">=16.0.0",
144
144
  "@types/react-dom": ">=16.0.0",
145
145
  "@utils/ts-config": "1.0.4",
@@ -148,7 +148,7 @@
148
148
  "rimraf": "6.1.3",
149
149
  "tsdown": "0.22.00",
150
150
  "typescript": "6.0.3",
151
- "vitest": "4.1.5"
151
+ "vitest": "4.1.6"
152
152
  },
153
153
  "peerDependencies": {
154
154
  "next": ">=14.0.0",