@payloadcms/tanstack-start 4.0.0-internal.a6582c6 → 4.0.0-internal.aa277b8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (83) hide show
  1. package/dist/auth/login.d.ts +3 -16
  2. package/dist/auth/login.d.ts.map +1 -1
  3. package/dist/auth/login.js +6 -46
  4. package/dist/auth/login.js.map +1 -1
  5. package/dist/auth/logout.d.ts +2 -5
  6. package/dist/auth/logout.d.ts.map +1 -1
  7. package/dist/auth/logout.js +6 -47
  8. package/dist/auth/logout.js.map +1 -1
  9. package/dist/auth/refresh.d.ts +2 -4
  10. package/dist/auth/refresh.d.ts.map +1 -1
  11. package/dist/auth/refresh.js +6 -49
  12. package/dist/auth/refresh.js.map +1 -1
  13. package/dist/elements/RouterAdapter/index.d.ts.map +1 -1
  14. package/dist/elements/RouterAdapter/index.js +17 -3
  15. package/dist/elements/RouterAdapter/index.js.map +1 -1
  16. package/dist/exports/client.d.ts +0 -1
  17. package/dist/exports/client.d.ts.map +1 -1
  18. package/dist/exports/client.js +0 -1
  19. package/dist/exports/client.js.map +1 -1
  20. package/dist/exports/layouts.d.ts +1 -1
  21. package/dist/exports/layouts.d.ts.map +1 -1
  22. package/dist/exports/layouts.js.map +1 -1
  23. package/dist/exports/server.d.ts +1 -1
  24. package/dist/exports/server.d.ts.map +1 -1
  25. package/dist/exports/server.js.map +1 -1
  26. package/dist/routes/adminRoutes.d.ts +8 -12
  27. package/dist/routes/adminRoutes.d.ts.map +1 -1
  28. package/dist/routes/adminRoutes.js +33 -16
  29. package/dist/routes/adminRoutes.js.map +1 -1
  30. package/dist/routes/layoutRoute.d.ts +4 -3
  31. package/dist/routes/layoutRoute.d.ts.map +1 -1
  32. package/dist/routes/layoutRoute.js.map +1 -1
  33. package/dist/utilities/devConfigReload.server.d.ts +2 -0
  34. package/dist/utilities/devConfigReload.server.d.ts.map +1 -0
  35. package/dist/utilities/devConfigReload.server.js +38 -0
  36. package/dist/utilities/devConfigReload.server.js.map +1 -0
  37. package/dist/utilities/devConfigReloadEvent.d.ts +9 -0
  38. package/dist/utilities/devConfigReloadEvent.d.ts.map +1 -0
  39. package/dist/utilities/devConfigReloadEvent.js +9 -0
  40. package/dist/utilities/devConfigReloadEvent.js.map +1 -0
  41. package/dist/utilities/initReq.server.d.ts +1 -0
  42. package/dist/utilities/initReq.server.d.ts.map +1 -1
  43. package/dist/utilities/initReq.server.js +3 -0
  44. package/dist/utilities/initReq.server.js.map +1 -1
  45. package/dist/utilities/loadAdminPage.d.ts +5 -2
  46. package/dist/utilities/loadAdminPage.d.ts.map +1 -1
  47. package/dist/utilities/loadAdminPage.js.map +1 -1
  48. package/dist/utilities/loadLayoutData.d.ts +3 -1
  49. package/dist/utilities/loadLayoutData.d.ts.map +1 -1
  50. package/dist/utilities/loadLayoutData.js +2 -3
  51. package/dist/utilities/loadLayoutData.js.map +1 -1
  52. package/dist/utilities/toSerializable.d.ts +9 -0
  53. package/dist/utilities/toSerializable.d.ts.map +1 -1
  54. package/dist/utilities/toSerializable.js +13 -2
  55. package/dist/utilities/toSerializable.js.map +1 -1
  56. package/dist/withPayload/config/external.d.ts +16 -8
  57. package/dist/withPayload/config/external.d.ts.map +1 -1
  58. package/dist/withPayload/config/external.js +23 -9
  59. package/dist/withPayload/config/external.js.map +1 -1
  60. package/dist/withPayload/config/optimizeDeps.d.ts.map +1 -1
  61. package/dist/withPayload/config/optimizeDeps.js +7 -3
  62. package/dist/withPayload/config/optimizeDeps.js.map +1 -1
  63. package/dist/withPayload/devConfigReload.d.ts +14 -0
  64. package/dist/withPayload/devConfigReload.d.ts.map +1 -0
  65. package/dist/withPayload/devConfigReload.js +84 -0
  66. package/dist/withPayload/devConfigReload.js.map +1 -0
  67. package/dist/withPayload/index.d.ts +13 -0
  68. package/dist/withPayload/index.d.ts.map +1 -1
  69. package/dist/withPayload/index.js +28 -3
  70. package/dist/withPayload/index.js.map +1 -1
  71. package/package.json +8 -7
  72. package/dist/utilities/devReloadStrategy.d.ts +0 -10
  73. package/dist/utilities/devReloadStrategy.d.ts.map +0 -1
  74. package/dist/utilities/devReloadStrategy.js +0 -27
  75. package/dist/utilities/devReloadStrategy.js.map +0 -1
  76. package/dist/utilities/getExistingAuthToken.d.ts +0 -7
  77. package/dist/utilities/getExistingAuthToken.d.ts.map +0 -1
  78. package/dist/utilities/getExistingAuthToken.js +0 -18
  79. package/dist/utilities/getExistingAuthToken.js.map +0 -1
  80. package/dist/utilities/setPayloadAuthCookie.d.ts +0 -9
  81. package/dist/utilities/setPayloadAuthCookie.d.ts.map +0 -1
  82. package/dist/utilities/setPayloadAuthCookie.js +0 -31
  83. package/dist/utilities/setPayloadAuthCookie.js.map +0 -1
@@ -1,17 +1,4 @@
1
- import type { AuthCollectionSlug, LoginResult, MaybePromise, SanitizedConfig } from 'payload';
2
- type LoginWithEmail = {
3
- email: string;
4
- username?: never;
5
- };
6
- type LoginWithUsername = {
7
- email?: never;
8
- username: string;
9
- };
10
- type LoginArgs = {
11
- collection: AuthCollectionSlug;
12
- config: MaybePromise<SanitizedConfig>;
13
- password: string;
14
- } & (LoginWithEmail | LoginWithUsername);
15
- export declare function login<TSlug extends AuthCollectionSlug>({ collection, config, email, password, username, }: LoginArgs): Promise<LoginResult<TSlug>>;
16
- export {};
1
+ import type { AuthCollectionSlug, LoginResult } from 'payload';
2
+ import { type LoginArgsWithoutServerAdapter } from 'payload/auth';
3
+ export declare function login<TSlug extends AuthCollectionSlug>(args: LoginArgsWithoutServerAdapter<TSlug>): Promise<LoginResult<TSlug>>;
17
4
  //# sourceMappingURL=login.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"login.d.ts","sourceRoot":"","sources":["../../src/auth/login.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,WAAW,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,SAAS,CAAA;AAM7F,KAAK,cAAc,GAAG;IACpB,KAAK,EAAE,MAAM,CAAA;IACb,QAAQ,CAAC,EAAE,KAAK,CAAA;CACjB,CAAA;AAED,KAAK,iBAAiB,GAAG;IACvB,KAAK,CAAC,EAAE,KAAK,CAAA;IACb,QAAQ,EAAE,MAAM,CAAA;CACjB,CAAA;AAED,KAAK,SAAS,GAAG;IACf,UAAU,EAAE,kBAAkB,CAAA;IAC9B,MAAM,EAAE,YAAY,CAAC,eAAe,CAAC,CAAA;IACrC,QAAQ,EAAE,MAAM,CAAA;CACjB,GAAG,CAAC,cAAc,GAAG,iBAAiB,CAAC,CAAA;AAExC,wBAAsB,KAAK,CAAC,KAAK,SAAS,kBAAkB,EAAE,EAC5D,UAAU,EACV,MAAM,EACN,KAAK,EACL,QAAQ,EACR,QAAQ,GACT,EAAE,SAAS,GAAG,OAAO,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CA6CzC"}
1
+ {"version":3,"file":"login.d.ts","sourceRoot":"","sources":["../../src/auth/login.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,WAAW,EAAE,MAAM,SAAS,CAAA;AAE9D,OAAO,EAAkB,KAAK,6BAA6B,EAAoB,MAAM,cAAc,CAAA;AAInG,wBAAsB,KAAK,CAAC,KAAK,SAAS,kBAAkB,EAC1D,IAAI,EAAE,6BAA6B,CAAC,KAAK,CAAC,GACzC,OAAO,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAE7B"}
@@ -1,50 +1,10 @@
1
- import { getPayload } from 'payload';
2
- import { setPayloadAuthCookie } from '../utilities/setPayloadAuthCookie.js';
3
- export async function login({ collection, config, email, password, username }) {
4
- const payload = await getPayload({
5
- config
1
+ import { login as loginFn } from 'payload/auth';
2
+ import { tanstackServerAdapter } from '../utilities/serverAdapter.server.js';
3
+ export async function login(args) {
4
+ return loginFn({
5
+ ...args,
6
+ serverAdapter: tanstackServerAdapter
6
7
  });
7
- const authConfig = payload.collections[collection]?.config.auth;
8
- if (!authConfig) {
9
- throw new Error(`No auth config found for collection: ${collection}`);
10
- }
11
- const loginWithUsername = authConfig?.loginWithUsername ?? false;
12
- if (loginWithUsername) {
13
- if (loginWithUsername.allowEmailLogin) {
14
- if (!email && !username) {
15
- throw new Error('Email or username is required.');
16
- }
17
- } else {
18
- if (!username) {
19
- throw new Error('Username is required.');
20
- }
21
- }
22
- } else {
23
- if (!email) {
24
- throw new Error('Email is required.');
25
- }
26
- }
27
- const result = await payload.login({
28
- collection,
29
- data: loginWithUsername ? username ? {
30
- password,
31
- username
32
- } : {
33
- email,
34
- password
35
- } : {
36
- email,
37
- password
38
- }
39
- });
40
- if (result.token) {
41
- setPayloadAuthCookie({
42
- authConfig,
43
- cookiePrefix: payload.config.cookiePrefix,
44
- token: result.token
45
- });
46
- }
47
- return result;
48
8
  }
49
9
 
50
10
  //# sourceMappingURL=login.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/auth/login.ts"],"sourcesContent":["import type { AuthCollectionSlug, LoginResult, MaybePromise, SanitizedConfig } from 'payload'\n\nimport { getPayload } from 'payload'\n\nimport { setPayloadAuthCookie } from '../utilities/setPayloadAuthCookie.js'\n\ntype LoginWithEmail = {\n email: string\n username?: never\n}\n\ntype LoginWithUsername = {\n email?: never\n username: string\n}\n\ntype LoginArgs = {\n collection: AuthCollectionSlug\n config: MaybePromise<SanitizedConfig>\n password: string\n} & (LoginWithEmail | LoginWithUsername)\n\nexport async function login<TSlug extends AuthCollectionSlug>({\n collection,\n config,\n email,\n password,\n username,\n}: LoginArgs): Promise<LoginResult<TSlug>> {\n const payload = await getPayload({ config })\n\n const authConfig = payload.collections[collection]?.config.auth\n\n if (!authConfig) {\n throw new Error(`No auth config found for collection: ${collection}`)\n }\n\n const loginWithUsername = authConfig?.loginWithUsername ?? false\n\n if (loginWithUsername) {\n if (loginWithUsername.allowEmailLogin) {\n if (!email && !username) {\n throw new Error('Email or username is required.')\n }\n } else {\n if (!username) {\n throw new Error('Username is required.')\n }\n }\n } else {\n if (!email) {\n throw new Error('Email is required.')\n }\n }\n\n const result = await payload.login({\n collection,\n data: (loginWithUsername\n ? username\n ? { password, username }\n : { email, password }\n : { email, password }) as { email: string; password: string },\n })\n\n if (result.token) {\n setPayloadAuthCookie({\n authConfig,\n cookiePrefix: payload.config.cookiePrefix,\n token: result.token,\n })\n }\n\n return result as LoginResult<TSlug>\n}\n"],"names":["getPayload","setPayloadAuthCookie","login","collection","config","email","password","username","payload","authConfig","collections","auth","Error","loginWithUsername","allowEmailLogin","result","data","token","cookiePrefix"],"mappings":"AAEA,SAASA,UAAU,QAAQ,UAAS;AAEpC,SAASC,oBAAoB,QAAQ,uCAAsC;AAkB3E,OAAO,eAAeC,MAAwC,EAC5DC,UAAU,EACVC,MAAM,EACNC,KAAK,EACLC,QAAQ,EACRC,QAAQ,EACE;IACV,MAAMC,UAAU,MAAMR,WAAW;QAAEI;IAAO;IAE1C,MAAMK,aAAaD,QAAQE,WAAW,CAACP,WAAW,EAAEC,OAAOO;IAE3D,IAAI,CAACF,YAAY;QACf,MAAM,IAAIG,MAAM,CAAC,qCAAqC,EAAET,YAAY;IACtE;IAEA,MAAMU,oBAAoBJ,YAAYI,qBAAqB;IAE3D,IAAIA,mBAAmB;QACrB,IAAIA,kBAAkBC,eAAe,EAAE;YACrC,IAAI,CAACT,SAAS,CAACE,UAAU;gBACvB,MAAM,IAAIK,MAAM;YAClB;QACF,OAAO;YACL,IAAI,CAACL,UAAU;gBACb,MAAM,IAAIK,MAAM;YAClB;QACF;IACF,OAAO;QACL,IAAI,CAACP,OAAO;YACV,MAAM,IAAIO,MAAM;QAClB;IACF;IAEA,MAAMG,SAAS,MAAMP,QAAQN,KAAK,CAAC;QACjCC;QACAa,MAAOH,oBACHN,WACE;YAAED;YAAUC;QAAS,IACrB;YAAEF;YAAOC;QAAS,IACpB;YAAED;YAAOC;QAAS;IACxB;IAEA,IAAIS,OAAOE,KAAK,EAAE;QAChBhB,qBAAqB;YACnBQ;YACAS,cAAcV,QAAQJ,MAAM,CAACc,YAAY;YACzCD,OAAOF,OAAOE,KAAK;QACrB;IACF;IAEA,OAAOF;AACT"}
1
+ {"version":3,"sources":["../../src/auth/login.ts"],"sourcesContent":["import type { AuthCollectionSlug, LoginResult } from 'payload'\n\nimport { type LoginArgs, type LoginArgsWithoutServerAdapter, login as loginFn } from 'payload/auth'\n\nimport { tanstackServerAdapter } from '../utilities/serverAdapter.server.js'\n\nexport async function login<TSlug extends AuthCollectionSlug>(\n args: LoginArgsWithoutServerAdapter<TSlug>,\n): Promise<LoginResult<TSlug>> {\n return loginFn({ ...args, serverAdapter: tanstackServerAdapter } as LoginArgs<TSlug>)\n}\n"],"names":["login","loginFn","tanstackServerAdapter","args","serverAdapter"],"mappings":"AAEA,SAA6DA,SAASC,OAAO,QAAQ,eAAc;AAEnG,SAASC,qBAAqB,QAAQ,uCAAsC;AAE5E,OAAO,eAAeF,MACpBG,IAA0C;IAE1C,OAAOF,QAAQ;QAAE,GAAGE,IAAI;QAAEC,eAAeF;IAAsB;AACjE"}
@@ -1,8 +1,5 @@
1
- import type { MaybePromise, SanitizedConfig } from 'payload';
2
- export declare function logout({ allSessions, config, }: {
3
- allSessions?: boolean;
4
- config: MaybePromise<SanitizedConfig>;
5
- }): Promise<{
1
+ import type { LogoutArgs } from 'payload/auth';
2
+ export declare function logout(args: Omit<LogoutArgs, 'serverAdapter'>): Promise<{
6
3
  message: string;
7
4
  success: boolean;
8
5
  }>;
@@ -1 +1 @@
1
- {"version":3,"file":"logout.d.ts","sourceRoot":"","sources":["../../src/auth/logout.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,SAAS,CAAA;AAO5D,wBAAsB,MAAM,CAAC,EAC3B,WAAmB,EACnB,MAAM,GACP,EAAE;IACD,WAAW,CAAC,EAAE,OAAO,CAAA;IACrB,MAAM,EAAE,YAAY,CAAC,eAAe,CAAC,CAAA;CACtC;;;GAqCA"}
1
+ {"version":3,"file":"logout.d.ts","sourceRoot":"","sources":["../../src/auth/logout.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AAM9C,wBAAsB,MAAM,CAC1B,IAAI,EAAE,IAAI,CAAC,UAAU,EAAE,eAAe,CAAC,GACtC,OAAO,CAAC;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,OAAO,CAAA;CAAE,CAAC,CAEhD"}
@@ -1,51 +1,10 @@
1
- import { getRequest, setResponseHeader } from '@tanstack/react-start/server';
2
- import { createLocalReq, getPayload, logoutOperation } from 'payload';
3
- import { getExistingAuthToken } from '../utilities/getExistingAuthToken.js';
4
- export async function logout({ allSessions = false, config }) {
5
- const payload = await getPayload({
6
- config
1
+ import { logout as logoutFn } from 'payload/auth';
2
+ import { tanstackServerAdapter } from '../utilities/serverAdapter.server.js';
3
+ export async function logout(args) {
4
+ return logoutFn({
5
+ ...args,
6
+ serverAdapter: tanstackServerAdapter
7
7
  });
8
- const request = getRequest();
9
- const headers = new Headers(request.headers);
10
- const authResult = await payload.auth({
11
- headers
12
- });
13
- if (!authResult.user) {
14
- return {
15
- message: 'User already logged out',
16
- success: true
17
- };
18
- }
19
- const { user } = authResult;
20
- const req = await createLocalReq({
21
- user
22
- }, payload);
23
- const collection = payload.collections[user.collection];
24
- if (!collection) {
25
- return {
26
- message: 'Collection not found',
27
- success: false
28
- };
29
- }
30
- const logoutResult = await logoutOperation({
31
- allSessions,
32
- collection,
33
- req
34
- });
35
- if (!logoutResult) {
36
- return {
37
- message: 'Logout failed',
38
- success: false
39
- };
40
- }
41
- const existingCookie = getExistingAuthToken(payload.config.cookiePrefix);
42
- if (existingCookie) {
43
- setResponseHeader('Set-Cookie', `${encodeURIComponent(existingCookie.name)}=; Path=/; Expires=Thu, 01 Jan 1970 00:00:00 GMT; HttpOnly`);
44
- }
45
- return {
46
- message: 'User logged out successfully',
47
- success: true
48
- };
49
8
  }
50
9
 
51
10
  //# sourceMappingURL=logout.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/auth/logout.ts"],"sourcesContent":["import type { MaybePromise, SanitizedConfig } from 'payload'\n\nimport { getRequest, setResponseHeader } from '@tanstack/react-start/server'\nimport { createLocalReq, getPayload, logoutOperation } from 'payload'\n\nimport { getExistingAuthToken } from '../utilities/getExistingAuthToken.js'\n\nexport async function logout({\n allSessions = false,\n config,\n}: {\n allSessions?: boolean\n config: MaybePromise<SanitizedConfig>\n}) {\n const payload = await getPayload({ config })\n const request = getRequest()\n const headers = new Headers(request.headers)\n const authResult = await payload.auth({ headers })\n\n if (!authResult.user) {\n return { message: 'User already logged out', success: true }\n }\n\n const { user } = authResult\n const req = await createLocalReq({ user }, payload)\n const collection = payload.collections[user.collection]\n\n if (!collection) {\n return { message: 'Collection not found', success: false }\n }\n\n const logoutResult = await logoutOperation({\n allSessions,\n collection,\n req,\n })\n\n if (!logoutResult) {\n return { message: 'Logout failed', success: false }\n }\n\n const existingCookie = getExistingAuthToken(payload.config.cookiePrefix)\n if (existingCookie) {\n setResponseHeader(\n 'Set-Cookie',\n `${encodeURIComponent(existingCookie.name)}=; Path=/; Expires=Thu, 01 Jan 1970 00:00:00 GMT; HttpOnly`,\n )\n }\n\n return { message: 'User logged out successfully', success: true }\n}\n"],"names":["getRequest","setResponseHeader","createLocalReq","getPayload","logoutOperation","getExistingAuthToken","logout","allSessions","config","payload","request","headers","Headers","authResult","auth","user","message","success","req","collection","collections","logoutResult","existingCookie","cookiePrefix","encodeURIComponent","name"],"mappings":"AAEA,SAASA,UAAU,EAAEC,iBAAiB,QAAQ,+BAA8B;AAC5E,SAASC,cAAc,EAAEC,UAAU,EAAEC,eAAe,QAAQ,UAAS;AAErE,SAASC,oBAAoB,QAAQ,uCAAsC;AAE3E,OAAO,eAAeC,OAAO,EAC3BC,cAAc,KAAK,EACnBC,MAAM,EAIP;IACC,MAAMC,UAAU,MAAMN,WAAW;QAAEK;IAAO;IAC1C,MAAME,UAAUV;IAChB,MAAMW,UAAU,IAAIC,QAAQF,QAAQC,OAAO;IAC3C,MAAME,aAAa,MAAMJ,QAAQK,IAAI,CAAC;QAAEH;IAAQ;IAEhD,IAAI,CAACE,WAAWE,IAAI,EAAE;QACpB,OAAO;YAAEC,SAAS;YAA2BC,SAAS;QAAK;IAC7D;IAEA,MAAM,EAAEF,IAAI,EAAE,GAAGF;IACjB,MAAMK,MAAM,MAAMhB,eAAe;QAAEa;IAAK,GAAGN;IAC3C,MAAMU,aAAaV,QAAQW,WAAW,CAACL,KAAKI,UAAU,CAAC;IAEvD,IAAI,CAACA,YAAY;QACf,OAAO;YAAEH,SAAS;YAAwBC,SAAS;QAAM;IAC3D;IAEA,MAAMI,eAAe,MAAMjB,gBAAgB;QACzCG;QACAY;QACAD;IACF;IAEA,IAAI,CAACG,cAAc;QACjB,OAAO;YAAEL,SAAS;YAAiBC,SAAS;QAAM;IACpD;IAEA,MAAMK,iBAAiBjB,qBAAqBI,QAAQD,MAAM,CAACe,YAAY;IACvE,IAAID,gBAAgB;QAClBrB,kBACE,cACA,GAAGuB,mBAAmBF,eAAeG,IAAI,EAAE,0DAA0D,CAAC;IAE1G;IAEA,OAAO;QAAET,SAAS;QAAgCC,SAAS;IAAK;AAClE"}
1
+ {"version":3,"sources":["../../src/auth/logout.ts"],"sourcesContent":["import type { LogoutArgs } from 'payload/auth'\n\nimport { logout as logoutFn } from 'payload/auth'\n\nimport { tanstackServerAdapter } from '../utilities/serverAdapter.server.js'\n\nexport async function logout(\n args: Omit<LogoutArgs, 'serverAdapter'>,\n): Promise<{ message: string; success: boolean }> {\n return logoutFn({ ...args, serverAdapter: tanstackServerAdapter })\n}\n"],"names":["logout","logoutFn","tanstackServerAdapter","args","serverAdapter"],"mappings":"AAEA,SAASA,UAAUC,QAAQ,QAAQ,eAAc;AAEjD,SAASC,qBAAqB,QAAQ,uCAAsC;AAE5E,OAAO,eAAeF,OACpBG,IAAuC;IAEvC,OAAOF,SAAS;QAAE,GAAGE,IAAI;QAAEC,eAAeF;IAAsB;AAClE"}
@@ -1,7 +1,5 @@
1
- import type { MaybePromise, SanitizedConfig } from 'payload';
2
- export declare function refresh({ config }: {
3
- config: MaybePromise<SanitizedConfig>;
4
- }): Promise<{
1
+ import type { RefreshArgs } from 'payload/auth';
2
+ export declare function refresh(args: Omit<RefreshArgs, 'serverAdapter'>): Promise<{
5
3
  message: string;
6
4
  success: boolean;
7
5
  }>;
@@ -1 +1 @@
1
- {"version":3,"file":"refresh.d.ts","sourceRoot":"","sources":["../../src/auth/refresh.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAkB,YAAY,EAAE,eAAe,EAAE,MAAM,SAAS,CAAA;AAQ5E,wBAAsB,OAAO,CAAC,EAAE,MAAM,EAAE,EAAE;IAAE,MAAM,EAAE,YAAY,CAAC,eAAe,CAAC,CAAA;CAAE;;;GAwClF"}
1
+ {"version":3,"file":"refresh.d.ts","sourceRoot":"","sources":["../../src/auth/refresh.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAA;AAM/C,wBAAsB,OAAO,CAC3B,IAAI,EAAE,IAAI,CAAC,WAAW,EAAE,eAAe,CAAC,GACvC,OAAO,CAAC;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,OAAO,CAAA;CAAE,CAAC,CAEhD"}
@@ -1,53 +1,10 @@
1
- import { getRequest } from '@tanstack/react-start/server';
2
- import { createLocalReq, getPayload, refreshOperation } from 'payload';
3
- import { getExistingAuthToken } from '../utilities/getExistingAuthToken.js';
4
- import { setPayloadAuthCookie } from '../utilities/setPayloadAuthCookie.js';
5
- export async function refresh({ config }) {
6
- const payload = await getPayload({
7
- config
1
+ import { refresh as refreshFn } from 'payload/auth';
2
+ import { tanstackServerAdapter } from '../utilities/serverAdapter.server.js';
3
+ export async function refresh(args) {
4
+ return refreshFn({
5
+ ...args,
6
+ serverAdapter: tanstackServerAdapter
8
7
  });
9
- const request = getRequest();
10
- const headers = new Headers(request.headers);
11
- const result = await payload.auth({
12
- headers
13
- });
14
- if (!result.user) {
15
- throw new Error('Cannot refresh token: user not authenticated');
16
- }
17
- const existingCookie = getExistingAuthToken(payload.config.cookiePrefix);
18
- if (!existingCookie) {
19
- return {
20
- message: 'No valid token found to refresh',
21
- success: false
22
- };
23
- }
24
- const collection = result.user.collection;
25
- const collectionConfig = payload.collections[collection];
26
- if (!collectionConfig?.config.auth) {
27
- throw new Error(`No auth config found for collection: ${collection}`);
28
- }
29
- const req = await createLocalReq({
30
- user: result.user
31
- }, payload);
32
- const refreshResult = await refreshOperation({
33
- collection: collectionConfig,
34
- req
35
- });
36
- if (!refreshResult) {
37
- return {
38
- message: 'Token refresh failed',
39
- success: false
40
- };
41
- }
42
- setPayloadAuthCookie({
43
- authConfig: collectionConfig.config.auth,
44
- cookiePrefix: payload.config.cookiePrefix,
45
- token: refreshResult.refreshedToken
46
- });
47
- return {
48
- message: 'Token refreshed successfully',
49
- success: true
50
- };
51
8
  }
52
9
 
53
10
  //# sourceMappingURL=refresh.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/auth/refresh.ts"],"sourcesContent":["import type { CollectionSlug, MaybePromise, SanitizedConfig } from 'payload'\n\nimport { getRequest } from '@tanstack/react-start/server'\nimport { createLocalReq, getPayload, refreshOperation } from 'payload'\n\nimport { getExistingAuthToken } from '../utilities/getExistingAuthToken.js'\nimport { setPayloadAuthCookie } from '../utilities/setPayloadAuthCookie.js'\n\nexport async function refresh({ config }: { config: MaybePromise<SanitizedConfig> }) {\n const payload = await getPayload({ config })\n const request = getRequest()\n const headers = new Headers(request.headers)\n const result = await payload.auth({ headers })\n\n if (!result.user) {\n throw new Error('Cannot refresh token: user not authenticated')\n }\n\n const existingCookie = getExistingAuthToken(payload.config.cookiePrefix)\n if (!existingCookie) {\n return { message: 'No valid token found to refresh', success: false }\n }\n\n const collection: CollectionSlug | undefined = result.user.collection\n const collectionConfig = payload.collections[collection]\n\n if (!collectionConfig?.config.auth) {\n throw new Error(`No auth config found for collection: ${collection}`)\n }\n\n const req = await createLocalReq({ user: result.user }, payload)\n\n const refreshResult = await refreshOperation({\n collection: collectionConfig,\n req,\n })\n\n if (!refreshResult) {\n return { message: 'Token refresh failed', success: false }\n }\n\n setPayloadAuthCookie({\n authConfig: collectionConfig.config.auth,\n cookiePrefix: payload.config.cookiePrefix,\n token: refreshResult.refreshedToken,\n })\n\n return { message: 'Token refreshed successfully', success: true }\n}\n"],"names":["getRequest","createLocalReq","getPayload","refreshOperation","getExistingAuthToken","setPayloadAuthCookie","refresh","config","payload","request","headers","Headers","result","auth","user","Error","existingCookie","cookiePrefix","message","success","collection","collectionConfig","collections","req","refreshResult","authConfig","token","refreshedToken"],"mappings":"AAEA,SAASA,UAAU,QAAQ,+BAA8B;AACzD,SAASC,cAAc,EAAEC,UAAU,EAAEC,gBAAgB,QAAQ,UAAS;AAEtE,SAASC,oBAAoB,QAAQ,uCAAsC;AAC3E,SAASC,oBAAoB,QAAQ,uCAAsC;AAE3E,OAAO,eAAeC,QAAQ,EAAEC,MAAM,EAA6C;IACjF,MAAMC,UAAU,MAAMN,WAAW;QAAEK;IAAO;IAC1C,MAAME,UAAUT;IAChB,MAAMU,UAAU,IAAIC,QAAQF,QAAQC,OAAO;IAC3C,MAAME,SAAS,MAAMJ,QAAQK,IAAI,CAAC;QAAEH;IAAQ;IAE5C,IAAI,CAACE,OAAOE,IAAI,EAAE;QAChB,MAAM,IAAIC,MAAM;IAClB;IAEA,MAAMC,iBAAiBZ,qBAAqBI,QAAQD,MAAM,CAACU,YAAY;IACvE,IAAI,CAACD,gBAAgB;QACnB,OAAO;YAAEE,SAAS;YAAmCC,SAAS;QAAM;IACtE;IAEA,MAAMC,aAAyCR,OAAOE,IAAI,CAACM,UAAU;IACrE,MAAMC,mBAAmBb,QAAQc,WAAW,CAACF,WAAW;IAExD,IAAI,CAACC,kBAAkBd,OAAOM,MAAM;QAClC,MAAM,IAAIE,MAAM,CAAC,qCAAqC,EAAEK,YAAY;IACtE;IAEA,MAAMG,MAAM,MAAMtB,eAAe;QAAEa,MAAMF,OAAOE,IAAI;IAAC,GAAGN;IAExD,MAAMgB,gBAAgB,MAAMrB,iBAAiB;QAC3CiB,YAAYC;QACZE;IACF;IAEA,IAAI,CAACC,eAAe;QAClB,OAAO;YAAEN,SAAS;YAAwBC,SAAS;QAAM;IAC3D;IAEAd,qBAAqB;QACnBoB,YAAYJ,iBAAiBd,MAAM,CAACM,IAAI;QACxCI,cAAcT,QAAQD,MAAM,CAACU,YAAY;QACzCS,OAAOF,cAAcG,cAAc;IACrC;IAEA,OAAO;QAAET,SAAS;QAAgCC,SAAS;IAAK;AAClE"}
1
+ {"version":3,"sources":["../../src/auth/refresh.ts"],"sourcesContent":["import type { RefreshArgs } from 'payload/auth'\n\nimport { refresh as refreshFn } from 'payload/auth'\n\nimport { tanstackServerAdapter } from '../utilities/serverAdapter.server.js'\n\nexport async function refresh(\n args: Omit<RefreshArgs, 'serverAdapter'>,\n): Promise<{ message: string; success: boolean }> {\n return refreshFn({ ...args, serverAdapter: tanstackServerAdapter })\n}\n"],"names":["refresh","refreshFn","tanstackServerAdapter","args","serverAdapter"],"mappings":"AAEA,SAASA,WAAWC,SAAS,QAAQ,eAAc;AAEnD,SAASC,qBAAqB,QAAQ,uCAAsC;AAE5E,OAAO,eAAeF,QACpBG,IAAwC;IAExC,OAAOF,UAAU;QAAE,GAAGE,IAAI;QAAEC,eAAeF;IAAsB;AACnE"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/elements/RouterAdapter/index.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAoB,sBAAsB,EAAE,MAAM,SAAS,CAAA;AAuDvE,eAAO,MAAM,qBAAqB,EAAE,sBAyGnC,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/elements/RouterAdapter/index.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAoB,sBAAsB,EAAE,MAAM,SAAS,CAAA;AA6DvE,eAAO,MAAM,qBAAqB,EAAE,sBAqHnC,CAAA"}
@@ -1,9 +1,9 @@
1
1
  'use client';
2
2
  import { jsx as _jsx } from "react/jsx-runtime";
3
- import { RouterAdapterContext } from '@payloadcms/ui';
4
- import { Link as TanStackLink, useLocation, useParams, useRouter } from '@tanstack/react-router';
3
+ import { RouterAdapterContext, useRouteTransition } from '@payloadcms/ui';
4
+ import { Link as TanStackLink, useLocation, useParams, useRouter, useRouterState } from '@tanstack/react-router';
5
5
  import * as qs from 'qs-esm';
6
- import React, { useCallback, useMemo } from 'react';
6
+ import React, { useCallback, useEffect, useMemo } from 'react';
7
7
  const normalizeNavigationTarget = ({ path, pathname, search })=>{
8
8
  if (path.startsWith('http')) {
9
9
  const url = new URL(path);
@@ -34,6 +34,20 @@ export const TanStackRouterAdapter = ({ children })=>{
34
34
  const params = useParams({
35
35
  strict: false
36
36
  });
37
+ const isRouterLoading = useRouterState({
38
+ select: (state)=>state.isLoading
39
+ });
40
+ const { holdRouteTransition } = useRouteTransition();
41
+ useEffect(()=>{
42
+ if (!isRouterLoading) {
43
+ return;
44
+ }
45
+ const releaseRouteTransition = holdRouteTransition();
46
+ return ()=>releaseRouteTransition();
47
+ }, [
48
+ holdRouteTransition,
49
+ isRouterLoading
50
+ ]);
37
51
  const adaptedParams = useMemo(()=>{
38
52
  const adapted = {
39
53
  ...params
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/elements/RouterAdapter/index.tsx"],"sourcesContent":["'use client'\n\nimport type { RouterAdapterContextValue } from '@payloadcms/ui'\nimport type { LinkAdapterProps, RouterAdapterComponent } from 'payload'\n\nimport { RouterAdapterContext } from '@payloadcms/ui'\nimport { Link as TanStackLink, useLocation, useParams, useRouter } from '@tanstack/react-router'\nimport * as qs from 'qs-esm'\nimport React, { useCallback, useMemo } from 'react'\n\nconst normalizeNavigationTarget = ({\n path,\n pathname,\n search,\n}: {\n path: string\n pathname: string\n search: string\n}) => {\n if (path.startsWith('http')) {\n const url = new URL(path)\n return `${url.pathname}${url.search}${url.hash}`\n }\n\n if (path.startsWith('?')) {\n return `${pathname}${path}`\n }\n\n if (path.startsWith('#')) {\n return `${pathname}${search}${path}`\n }\n\n return path\n}\n\nconst TanStackLinkAdapter: React.FC<LinkAdapterProps> = ({\n children,\n href,\n prefetch,\n ref,\n replace,\n scroll,\n ...rest\n}) => {\n return (\n <TanStackLink\n preload={prefetch === false ? false : 'intent'}\n ref={ref}\n replace={replace}\n resetScroll={scroll}\n to={href}\n {...rest}\n >\n {children}\n </TanStackLink>\n )\n}\n\nexport const TanStackRouterAdapter: RouterAdapterComponent = ({ children }) => {\n const router = useRouter()\n const location = useLocation()\n const params = useParams({ strict: false })\n\n const adaptedParams = useMemo(() => {\n const adapted: Record<string, string | string[]> = { ...params }\n\n if ('_splat' in params && typeof params._splat === 'string') {\n adapted.segments = params._splat.split('/').filter(Boolean)\n }\n\n return adapted\n }, [params])\n\n // Split a target into `to` (pathname) + a parsed `search` object, so the\n // router serializes the query via its `stringifySearch` (qs, bracket-encoded)\n // rather than embedding the raw string in `to`. Navigating with a string `to`\n // leaves the search *unencoded* in `window.location.search`\n // (e.g. `where[or][0]…`), which then never matches Payload's `qs.stringify`\n // output (`where%5Bor%5D…`) — breaking the list-view `syncPropsToURL` guard,\n // which compares the two and would otherwise clobber optimistic query state\n // (e.g. an in-progress filter condition) on every navigation.\n const toNavOptions = useCallback((path: string) => {\n const relativePath = normalizeNavigationTarget({\n path,\n pathname: window.location.pathname,\n search: window.location.search,\n })\n\n const queryIndex = relativePath.indexOf('?')\n\n if (queryIndex === -1) {\n return { to: relativePath }\n }\n\n const searchObject = qs.parse(relativePath.slice(queryIndex + 1), {\n depth: 10,\n ignoreQueryPrefix: true,\n })\n\n // Function form replaces the search entirely (no merge with current search).\n return { search: () => searchObject, to: relativePath.slice(0, queryIndex) }\n }, [])\n\n const back = useCallback(() => router.history.back(), [router])\n\n const push = useCallback(\n (path: string, options?: { scroll?: boolean }) => {\n void router.navigate({ ...toNavOptions(path), resetScroll: options?.scroll })\n },\n [router, toNavOptions],\n )\n\n const refresh = useCallback(() => {\n void router.invalidate()\n }, [router])\n\n const replace = useCallback(\n (path: string, options?: { scroll?: boolean }) => {\n void router.navigate({ ...toNavOptions(path), replace: true, resetScroll: options?.scroll })\n },\n [router, toNavOptions],\n )\n\n // Mirror Next.js' router behavior to allow syncing client state to the URL without triggering a second server load.\n // TanStack's browser history monkeypatches `window.history.replaceState` and notifies `router.load` on every call.\n // Use `_ignoreSubscribers` to suppresses that notification — the same flag TanStack uses internally when flushing history.\n const replaceState = useCallback(\n (url: string) => {\n const { history } = router\n history._ignoreSubscribers = true\n\n try {\n window.history.replaceState(null, '', url)\n } finally {\n history._ignoreSubscribers = false\n }\n },\n [router],\n )\n\n const adaptedRouter = useMemo(\n () => ({ back, push, refresh, replace, replaceState }),\n [back, push, refresh, replace, replaceState],\n )\n\n // `location.searchStr` is the serialized query string; `location.search` is\n // the parsed object (a nested structure once the router uses `qs` for search\n // serialization), which `URLSearchParams` cannot consume. Build from the\n // string so Payload's `parseSearchParams` re-parses the bracket notation.\n const searchParams = useMemo(() => new URLSearchParams(location.searchStr), [location.searchStr])\n\n const value: RouterAdapterContextValue = useMemo(\n () => ({\n Link: TanStackLinkAdapter,\n params: adaptedParams,\n pathname: location.pathname,\n router: adaptedRouter,\n searchParams,\n }),\n [adaptedParams, location.pathname, adaptedRouter, searchParams],\n )\n\n return <RouterAdapterContext value={value}>{children}</RouterAdapterContext>\n}\n"],"names":["RouterAdapterContext","Link","TanStackLink","useLocation","useParams","useRouter","qs","React","useCallback","useMemo","normalizeNavigationTarget","path","pathname","search","startsWith","url","URL","hash","TanStackLinkAdapter","children","href","prefetch","ref","replace","scroll","rest","preload","resetScroll","to","TanStackRouterAdapter","router","location","params","strict","adaptedParams","adapted","_splat","segments","split","filter","Boolean","toNavOptions","relativePath","window","queryIndex","indexOf","searchObject","parse","slice","depth","ignoreQueryPrefix","back","history","push","options","navigate","refresh","invalidate","replaceState","_ignoreSubscribers","adaptedRouter","searchParams","URLSearchParams","searchStr","value"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../src/elements/RouterAdapter/index.tsx"],"sourcesContent":["'use client'\n\nimport type { RouterAdapterContextValue } from '@payloadcms/ui'\nimport type { LinkAdapterProps, RouterAdapterComponent } from 'payload'\n\nimport { RouterAdapterContext, useRouteTransition } from '@payloadcms/ui'\nimport {\n Link as TanStackLink,\n useLocation,\n useParams,\n useRouter,\n useRouterState,\n} from '@tanstack/react-router'\nimport * as qs from 'qs-esm'\nimport React, { useCallback, useEffect, useMemo } from 'react'\n\nconst normalizeNavigationTarget = ({\n path,\n pathname,\n search,\n}: {\n path: string\n pathname: string\n search: string\n}) => {\n if (path.startsWith('http')) {\n const url = new URL(path)\n return `${url.pathname}${url.search}${url.hash}`\n }\n\n if (path.startsWith('?')) {\n return `${pathname}${path}`\n }\n\n if (path.startsWith('#')) {\n return `${pathname}${search}${path}`\n }\n\n return path\n}\n\nconst TanStackLinkAdapter: React.FC<LinkAdapterProps> = ({\n children,\n href,\n prefetch,\n ref,\n replace,\n scroll,\n ...rest\n}) => {\n return (\n <TanStackLink\n preload={prefetch === false ? false : 'intent'}\n ref={ref}\n replace={replace}\n resetScroll={scroll}\n to={href}\n {...rest}\n >\n {children}\n </TanStackLink>\n )\n}\n\nexport const TanStackRouterAdapter: RouterAdapterComponent = ({ children }) => {\n const router = useRouter()\n const location = useLocation()\n const params = useParams({ strict: false })\n const isRouterLoading = useRouterState({ select: (state) => state.isLoading })\n const { holdRouteTransition } = useRouteTransition()\n\n useEffect(() => {\n if (!isRouterLoading) {\n return\n }\n\n const releaseRouteTransition = holdRouteTransition()\n\n return () => releaseRouteTransition()\n }, [holdRouteTransition, isRouterLoading])\n\n const adaptedParams = useMemo(() => {\n const adapted: Record<string, string | string[]> = { ...params }\n\n if ('_splat' in params && typeof params._splat === 'string') {\n adapted.segments = params._splat.split('/').filter(Boolean)\n }\n\n return adapted\n }, [params])\n\n // Split a target into `to` (pathname) + a parsed `search` object, so the\n // router serializes the query via its `stringifySearch` (qs, bracket-encoded)\n // rather than embedding the raw string in `to`. Navigating with a string `to`\n // leaves the search *unencoded* in `window.location.search`\n // (e.g. `where[or][0]…`), which then never matches Payload's `qs.stringify`\n // output (`where%5Bor%5D…`) — breaking the list-view `syncPropsToURL` guard,\n // which compares the two and would otherwise clobber optimistic query state\n // (e.g. an in-progress filter condition) on every navigation.\n const toNavOptions = useCallback((path: string) => {\n const relativePath = normalizeNavigationTarget({\n path,\n pathname: window.location.pathname,\n search: window.location.search,\n })\n\n const queryIndex = relativePath.indexOf('?')\n\n if (queryIndex === -1) {\n return { to: relativePath }\n }\n\n const searchObject = qs.parse(relativePath.slice(queryIndex + 1), {\n depth: 10,\n ignoreQueryPrefix: true,\n })\n\n // Function form replaces the search entirely (no merge with current search).\n return { search: () => searchObject, to: relativePath.slice(0, queryIndex) }\n }, [])\n\n const back = useCallback(() => router.history.back(), [router])\n\n const push = useCallback(\n (path: string, options?: { scroll?: boolean }) => {\n void router.navigate({ ...toNavOptions(path), resetScroll: options?.scroll })\n },\n [router, toNavOptions],\n )\n\n const refresh = useCallback(() => {\n void router.invalidate()\n }, [router])\n\n const replace = useCallback(\n (path: string, options?: { scroll?: boolean }) => {\n void router.navigate({ ...toNavOptions(path), replace: true, resetScroll: options?.scroll })\n },\n [router, toNavOptions],\n )\n\n // Mirror Next.js' router behavior to allow syncing client state to the URL without triggering a second server load.\n // TanStack's browser history monkeypatches `window.history.replaceState` and notifies `router.load` on every call.\n // Use `_ignoreSubscribers` to suppresses that notification — the same flag TanStack uses internally when flushing history.\n const replaceState = useCallback(\n (url: string) => {\n const { history } = router\n history._ignoreSubscribers = true\n\n try {\n window.history.replaceState(null, '', url)\n } finally {\n history._ignoreSubscribers = false\n }\n },\n [router],\n )\n\n const adaptedRouter = useMemo(\n () => ({ back, push, refresh, replace, replaceState }),\n [back, push, refresh, replace, replaceState],\n )\n\n // `location.searchStr` is the serialized query string; `location.search` is\n // the parsed object (a nested structure once the router uses `qs` for search\n // serialization), which `URLSearchParams` cannot consume. Build from the\n // string so Payload's `parseSearchParams` re-parses the bracket notation.\n const searchParams = useMemo(() => new URLSearchParams(location.searchStr), [location.searchStr])\n\n const value: RouterAdapterContextValue = useMemo(\n () => ({\n Link: TanStackLinkAdapter,\n params: adaptedParams,\n pathname: location.pathname,\n router: adaptedRouter,\n searchParams,\n }),\n [adaptedParams, location.pathname, adaptedRouter, searchParams],\n )\n\n return <RouterAdapterContext value={value}>{children}</RouterAdapterContext>\n}\n"],"names":["RouterAdapterContext","useRouteTransition","Link","TanStackLink","useLocation","useParams","useRouter","useRouterState","qs","React","useCallback","useEffect","useMemo","normalizeNavigationTarget","path","pathname","search","startsWith","url","URL","hash","TanStackLinkAdapter","children","href","prefetch","ref","replace","scroll","rest","preload","resetScroll","to","TanStackRouterAdapter","router","location","params","strict","isRouterLoading","select","state","isLoading","holdRouteTransition","releaseRouteTransition","adaptedParams","adapted","_splat","segments","split","filter","Boolean","toNavOptions","relativePath","window","queryIndex","indexOf","searchObject","parse","slice","depth","ignoreQueryPrefix","back","history","push","options","navigate","refresh","invalidate","replaceState","_ignoreSubscribers","adaptedRouter","searchParams","URLSearchParams","searchStr","value"],"mappings":"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"}
@@ -2,6 +2,5 @@ export { TanStackRouterAdapter } from '../elements/RouterAdapter/index.js';
2
2
  export { PayloadAdminShell, type PayloadAdminShellProps, withPayloadRoot, type WithPayloadRootOptions, } from '../layouts/Root/withPayloadRoot.js';
3
3
  export { type AdminLoad, payloadAdminIndexRoute, payloadAdminSplatRoute, } from '../routes/adminRoutes.js';
4
4
  export { type LayoutLoad, payloadLayoutRoute } from '../routes/layoutRoute.js';
5
- export { viteDevReloadStrategy } from '../utilities/devReloadStrategy.js';
6
5
  export { createServerFunctionClient, stripUnserializable, } from '../utilities/serverFunctionClient.js';
7
6
  //# sourceMappingURL=client.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/exports/client.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,qBAAqB,EAAE,MAAM,oCAAoC,CAAA;AAC1E,OAAO,EACL,iBAAiB,EACjB,KAAK,sBAAsB,EAC3B,eAAe,EACf,KAAK,sBAAsB,GAC5B,MAAM,oCAAoC,CAAA;AAC3C,OAAO,EACL,KAAK,SAAS,EACd,sBAAsB,EACtB,sBAAsB,GACvB,MAAM,0BAA0B,CAAA;AACjC,OAAO,EAAE,KAAK,UAAU,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAA;AAC9E,OAAO,EAAE,qBAAqB,EAAE,MAAM,mCAAmC,CAAA;AACzE,OAAO,EACL,0BAA0B,EAC1B,mBAAmB,GACpB,MAAM,sCAAsC,CAAA"}
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/exports/client.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,qBAAqB,EAAE,MAAM,oCAAoC,CAAA;AAC1E,OAAO,EACL,iBAAiB,EACjB,KAAK,sBAAsB,EAC3B,eAAe,EACf,KAAK,sBAAsB,GAC5B,MAAM,oCAAoC,CAAA;AAC3C,OAAO,EACL,KAAK,SAAS,EACd,sBAAsB,EACtB,sBAAsB,GACvB,MAAM,0BAA0B,CAAA;AACjC,OAAO,EAAE,KAAK,UAAU,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAA;AAC9E,OAAO,EACL,0BAA0B,EAC1B,mBAAmB,GACpB,MAAM,sCAAsC,CAAA"}
@@ -3,7 +3,6 @@ export { TanStackRouterAdapter } from '../elements/RouterAdapter/index.js';
3
3
  export { PayloadAdminShell, withPayloadRoot } from '../layouts/Root/withPayloadRoot.js';
4
4
  export { payloadAdminIndexRoute, payloadAdminSplatRoute } from '../routes/adminRoutes.js';
5
5
  export { payloadLayoutRoute } from '../routes/layoutRoute.js';
6
- export { viteDevReloadStrategy } from '../utilities/devReloadStrategy.js';
7
6
  export { createServerFunctionClient, stripUnserializable } from '../utilities/serverFunctionClient.js';
8
7
 
9
8
  //# sourceMappingURL=client.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/exports/client.ts"],"sourcesContent":["'use client'\n\nexport { TanStackRouterAdapter } from '../elements/RouterAdapter/index.js'\nexport {\n PayloadAdminShell,\n type PayloadAdminShellProps,\n withPayloadRoot,\n type WithPayloadRootOptions,\n} from '../layouts/Root/withPayloadRoot.js'\nexport {\n type AdminLoad,\n payloadAdminIndexRoute,\n payloadAdminSplatRoute,\n} from '../routes/adminRoutes.js'\nexport { type LayoutLoad, payloadLayoutRoute } from '../routes/layoutRoute.js'\nexport { viteDevReloadStrategy } from '../utilities/devReloadStrategy.js'\nexport {\n createServerFunctionClient,\n stripUnserializable,\n} from '../utilities/serverFunctionClient.js'\n"],"names":["TanStackRouterAdapter","PayloadAdminShell","withPayloadRoot","payloadAdminIndexRoute","payloadAdminSplatRoute","payloadLayoutRoute","viteDevReloadStrategy","createServerFunctionClient","stripUnserializable"],"mappings":"AAAA;AAEA,SAASA,qBAAqB,QAAQ,qCAAoC;AAC1E,SACEC,iBAAiB,EAEjBC,eAAe,QAEV,qCAAoC;AAC3C,SAEEC,sBAAsB,EACtBC,sBAAsB,QACjB,2BAA0B;AACjC,SAA0BC,kBAAkB,QAAQ,2BAA0B;AAC9E,SAASC,qBAAqB,QAAQ,oCAAmC;AACzE,SACEC,0BAA0B,EAC1BC,mBAAmB,QACd,uCAAsC"}
1
+ {"version":3,"sources":["../../src/exports/client.ts"],"sourcesContent":["'use client'\n\nexport { TanStackRouterAdapter } from '../elements/RouterAdapter/index.js'\nexport {\n PayloadAdminShell,\n type PayloadAdminShellProps,\n withPayloadRoot,\n type WithPayloadRootOptions,\n} from '../layouts/Root/withPayloadRoot.js'\nexport {\n type AdminLoad,\n payloadAdminIndexRoute,\n payloadAdminSplatRoute,\n} from '../routes/adminRoutes.js'\nexport { type LayoutLoad, payloadLayoutRoute } from '../routes/layoutRoute.js'\nexport {\n createServerFunctionClient,\n stripUnserializable,\n} from '../utilities/serverFunctionClient.js'\n"],"names":["TanStackRouterAdapter","PayloadAdminShell","withPayloadRoot","payloadAdminIndexRoute","payloadAdminSplatRoute","payloadLayoutRoute","createServerFunctionClient","stripUnserializable"],"mappings":"AAAA;AAEA,SAASA,qBAAqB,QAAQ,qCAAoC;AAC1E,SACEC,iBAAiB,EAEjBC,eAAe,QAEV,qCAAoC;AAC3C,SAEEC,sBAAsB,EACtBC,sBAAsB,QACjB,2BAA0B;AACjC,SAA0BC,kBAAkB,QAAQ,2BAA0B;AAC9E,SACEC,0BAA0B,EAC1BC,mBAAmB,QACd,uCAAsC"}
@@ -1,4 +1,4 @@
1
1
  export { getLayoutData } from '../layouts/Root/getLayoutData.js';
2
2
  export type { GetLayoutDataArgs, RootLayoutData } from '../layouts/Root/getLayoutData.js';
3
- export { loadLayoutData } from '../utilities/loadLayoutData.js';
3
+ export { loadLayoutData, type LoadLayoutDataResult } from '../utilities/loadLayoutData.js';
4
4
  //# sourceMappingURL=layouts.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"layouts.d.ts","sourceRoot":"","sources":["../../src/exports/layouts.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,kCAAkC,CAAA;AAChE,YAAY,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,kCAAkC,CAAA;AACzF,OAAO,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAA"}
1
+ {"version":3,"file":"layouts.d.ts","sourceRoot":"","sources":["../../src/exports/layouts.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,kCAAkC,CAAA;AAChE,YAAY,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,kCAAkC,CAAA;AACzF,OAAO,EAAE,cAAc,EAAE,KAAK,oBAAoB,EAAE,MAAM,gCAAgC,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/exports/layouts.ts"],"sourcesContent":["export { getLayoutData } from '../layouts/Root/getLayoutData.js'\nexport type { GetLayoutDataArgs, RootLayoutData } from '../layouts/Root/getLayoutData.js'\nexport { loadLayoutData } from '../utilities/loadLayoutData.js'\n"],"names":["getLayoutData","loadLayoutData"],"mappings":"AAAA,SAASA,aAAa,QAAQ,mCAAkC;AAEhE,SAASC,cAAc,QAAQ,iCAAgC"}
1
+ {"version":3,"sources":["../../src/exports/layouts.ts"],"sourcesContent":["export { getLayoutData } from '../layouts/Root/getLayoutData.js'\nexport type { GetLayoutDataArgs, RootLayoutData } from '../layouts/Root/getLayoutData.js'\nexport { loadLayoutData, type LoadLayoutDataResult } from '../utilities/loadLayoutData.js'\n"],"names":["getLayoutData","loadLayoutData"],"mappings":"AAAA,SAASA,aAAa,QAAQ,mCAAkC;AAEhE,SAASC,cAAc,QAAmC,iCAAgC"}
@@ -12,6 +12,6 @@ export { loadAdminPage, type LoadAdminPageArgs, type LoadAdminPageResult, } from
12
12
  export { type AdminPageMetadata, getAdminMeta } from '../utilities/meta.js';
13
13
  export { serializeForRsc } from '../utilities/serializeForRsc.js';
14
14
  export { createPageRenderServerAdapter, type PageNavIntent, tanstackServerAdapter, } from '../utilities/serverAdapter.server.js';
15
- export { toSerializable } from '../utilities/toSerializable.js';
15
+ export { type SerializableRecord, toSerializable } from '../utilities/toSerializable.js';
16
16
  export { getRequestTheme } from '@payloadcms/ui/utilities/getRequestTheme';
17
17
  //# sourceMappingURL=server.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/exports/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAA;AACxC,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAA;AAC1C,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAA;AAC5C,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAA;AAC1D,OAAO,EAAE,cAAc,EAAE,MAAM,uCAAuC,CAAA;AACtE,OAAO,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAA;AACnE,OAAO,EAAE,aAAa,EAAE,MAAM,uCAAuC,CAAA;AACrE,OAAO,EAAE,cAAc,EAAE,MAAM,uCAAuC,CAAA;AACtE,OAAO,EAAE,qBAAqB,EAAE,MAAM,uCAAuC,CAAA;AAC7E,OAAO,EAAE,OAAO,EAAE,MAAM,gCAAgC,CAAA;AACxD,OAAO,EACL,aAAa,EACb,KAAK,iBAAiB,EACtB,KAAK,mBAAmB,GACzB,MAAM,+BAA+B,CAAA;AACtC,OAAO,EAAE,KAAK,iBAAiB,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAA;AAC3E,OAAO,EAAE,eAAe,EAAE,MAAM,iCAAiC,CAAA;AACjE,OAAO,EACL,6BAA6B,EAC7B,KAAK,aAAa,EAClB,qBAAqB,GACtB,MAAM,sCAAsC,CAAA;AAC7C,OAAO,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAA;AAC/D,OAAO,EAAE,eAAe,EAAE,MAAM,0CAA0C,CAAA"}
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/exports/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAA;AACxC,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAA;AAC1C,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAA;AAC5C,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAA;AAC1D,OAAO,EAAE,cAAc,EAAE,MAAM,uCAAuC,CAAA;AACtE,OAAO,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAA;AACnE,OAAO,EAAE,aAAa,EAAE,MAAM,uCAAuC,CAAA;AACrE,OAAO,EAAE,cAAc,EAAE,MAAM,uCAAuC,CAAA;AACtE,OAAO,EAAE,qBAAqB,EAAE,MAAM,uCAAuC,CAAA;AAC7E,OAAO,EAAE,OAAO,EAAE,MAAM,gCAAgC,CAAA;AACxD,OAAO,EACL,aAAa,EACb,KAAK,iBAAiB,EACtB,KAAK,mBAAmB,GACzB,MAAM,+BAA+B,CAAA;AACtC,OAAO,EAAE,KAAK,iBAAiB,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAA;AAC3E,OAAO,EAAE,eAAe,EAAE,MAAM,iCAAiC,CAAA;AACjE,OAAO,EACL,6BAA6B,EAC7B,KAAK,aAAa,EAClB,qBAAqB,GACtB,MAAM,sCAAsC,CAAA;AAC7C,OAAO,EAAE,KAAK,kBAAkB,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAA;AACxF,OAAO,EAAE,eAAe,EAAE,MAAM,0CAA0C,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/exports/server.ts"],"sourcesContent":["export { login } from '../auth/login.js'\nexport { logout } from '../auth/logout.js'\nexport { refresh } from '../auth/refresh.js'\nexport { payloadApiHandlers } from '../routes/apiRoute.js'\nexport { getRequestI18n } from '../utilities/getRequestI18n.server.js'\nexport { getRequestLocale } from '../utilities/getRequestLocale.js'\nexport { handleGraphQL } from '../utilities/graphqlHandler.server.js'\nexport { handleAPIRoute } from '../utilities/handleAPIRoute.server.js'\nexport { handleServerFunctions } from '../utilities/handleServerFunctions.js'\nexport { initReq } from '../utilities/initReq.server.js'\nexport {\n loadAdminPage,\n type LoadAdminPageArgs,\n type LoadAdminPageResult,\n} from '../utilities/loadAdminPage.js'\nexport { type AdminPageMetadata, getAdminMeta } from '../utilities/meta.js'\nexport { serializeForRsc } from '../utilities/serializeForRsc.js'\nexport {\n createPageRenderServerAdapter,\n type PageNavIntent,\n tanstackServerAdapter,\n} from '../utilities/serverAdapter.server.js'\nexport { toSerializable } from '../utilities/toSerializable.js'\nexport { getRequestTheme } from '@payloadcms/ui/utilities/getRequestTheme'\n"],"names":["login","logout","refresh","payloadApiHandlers","getRequestI18n","getRequestLocale","handleGraphQL","handleAPIRoute","handleServerFunctions","initReq","loadAdminPage","getAdminMeta","serializeForRsc","createPageRenderServerAdapter","tanstackServerAdapter","toSerializable","getRequestTheme"],"mappings":"AAAA,SAASA,KAAK,QAAQ,mBAAkB;AACxC,SAASC,MAAM,QAAQ,oBAAmB;AAC1C,SAASC,OAAO,QAAQ,qBAAoB;AAC5C,SAASC,kBAAkB,QAAQ,wBAAuB;AAC1D,SAASC,cAAc,QAAQ,wCAAuC;AACtE,SAASC,gBAAgB,QAAQ,mCAAkC;AACnE,SAASC,aAAa,QAAQ,wCAAuC;AACrE,SAASC,cAAc,QAAQ,wCAAuC;AACtE,SAASC,qBAAqB,QAAQ,wCAAuC;AAC7E,SAASC,OAAO,QAAQ,iCAAgC;AACxD,SACEC,aAAa,QAGR,gCAA+B;AACtC,SAAiCC,YAAY,QAAQ,uBAAsB;AAC3E,SAASC,eAAe,QAAQ,kCAAiC;AACjE,SACEC,6BAA6B,EAE7BC,qBAAqB,QAChB,uCAAsC;AAC7C,SAASC,cAAc,QAAQ,iCAAgC;AAC/D,SAASC,eAAe,QAAQ,2CAA0C"}
1
+ {"version":3,"sources":["../../src/exports/server.ts"],"sourcesContent":["export { login } from '../auth/login.js'\nexport { logout } from '../auth/logout.js'\nexport { refresh } from '../auth/refresh.js'\nexport { payloadApiHandlers } from '../routes/apiRoute.js'\nexport { getRequestI18n } from '../utilities/getRequestI18n.server.js'\nexport { getRequestLocale } from '../utilities/getRequestLocale.js'\nexport { handleGraphQL } from '../utilities/graphqlHandler.server.js'\nexport { handleAPIRoute } from '../utilities/handleAPIRoute.server.js'\nexport { handleServerFunctions } from '../utilities/handleServerFunctions.js'\nexport { initReq } from '../utilities/initReq.server.js'\nexport {\n loadAdminPage,\n type LoadAdminPageArgs,\n type LoadAdminPageResult,\n} from '../utilities/loadAdminPage.js'\nexport { type AdminPageMetadata, getAdminMeta } from '../utilities/meta.js'\nexport { serializeForRsc } from '../utilities/serializeForRsc.js'\nexport {\n createPageRenderServerAdapter,\n type PageNavIntent,\n tanstackServerAdapter,\n} from '../utilities/serverAdapter.server.js'\nexport { type SerializableRecord, toSerializable } from '../utilities/toSerializable.js'\nexport { getRequestTheme } from '@payloadcms/ui/utilities/getRequestTheme'\n"],"names":["login","logout","refresh","payloadApiHandlers","getRequestI18n","getRequestLocale","handleGraphQL","handleAPIRoute","handleServerFunctions","initReq","loadAdminPage","getAdminMeta","serializeForRsc","createPageRenderServerAdapter","tanstackServerAdapter","toSerializable","getRequestTheme"],"mappings":"AAAA,SAASA,KAAK,QAAQ,mBAAkB;AACxC,SAASC,MAAM,QAAQ,oBAAmB;AAC1C,SAASC,OAAO,QAAQ,qBAAoB;AAC5C,SAASC,kBAAkB,QAAQ,wBAAuB;AAC1D,SAASC,cAAc,QAAQ,wCAAuC;AACtE,SAASC,gBAAgB,QAAQ,mCAAkC;AACnE,SAASC,aAAa,QAAQ,wCAAuC;AACrE,SAASC,cAAc,QAAQ,wCAAuC;AACtE,SAASC,qBAAqB,QAAQ,wCAAuC;AAC7E,SAASC,OAAO,QAAQ,iCAAgC;AACxD,SACEC,aAAa,QAGR,gCAA+B;AACtC,SAAiCC,YAAY,QAAQ,uBAAsB;AAC3E,SAASC,eAAe,QAAQ,kCAAiC;AACjE,SACEC,6BAA6B,EAE7BC,qBAAqB,QAChB,uCAAsC;AAC7C,SAAkCC,cAAc,QAAQ,iCAAgC;AACxF,SAASC,eAAe,QAAQ,2CAA0C"}
@@ -1,4 +1,4 @@
1
- import { type ReactNode } from 'react';
1
+ import type { NotFoundRouteProps } from '@tanstack/react-router';
2
2
  /**
3
3
  * Loader supplied by the app — a TanStack Start `createServerFn` that delegates
4
4
  * to `loadAdminPage`. Typed loosely because the server-fn's call signature is
@@ -11,12 +11,7 @@ export type AdminLoad = (opts: {
11
11
  };
12
12
  }) => Promise<any>;
13
13
  declare function AdminPage(): import("react").JSX.Element;
14
- declare function AdminNotFound(props: {
15
- data?: {
16
- routeKey?: string;
17
- rscPayload?: ReactNode;
18
- };
19
- }): import("react").JSX.Element;
14
+ declare function AdminNotFound({ data }: NotFoundRouteProps): import("react").JSX.Element;
20
15
  /**
21
16
  * Route options for the admin splat route (`/_payload/admin/$`). Renders Payload's
22
17
  * server-built NotFound page (shipped via the `notFound()` error's
@@ -49,12 +44,13 @@ export declare function payloadAdminSplatRoute({ load }: {
49
44
  title: string;
50
45
  })[];
51
46
  };
47
+ notFoundComponent: typeof AdminNotFound;
52
48
  loader: {
53
49
  handler: ({ location, params }: {
54
50
  location: any;
55
51
  params: any;
56
52
  }) => Promise<any>;
57
- staleReloadMode: string;
53
+ staleReloadMode: 'blocking';
58
54
  };
59
55
  loaderDeps: ({ search }: {
60
56
  search: Record<string, unknown>;
@@ -62,11 +58,10 @@ export declare function payloadAdminSplatRoute({ load }: {
62
58
  searchKey: string;
63
59
  };
64
60
  validateSearch: (search: Record<string, unknown>) => Record<string, unknown>;
65
- notFoundComponent: typeof AdminNotFound;
66
61
  };
67
62
  /**
68
- * Route options for the admin index route (`/_payload/admin/`). Same loader as the
69
- * splat route but throws a bare `notFound()` (no rscPayload) on miss.
63
+ * Route options for the admin index route (`/_payload/admin/`). Not-found
64
+ * results omit the RSC payload and fall back to `NotFoundClient`.
70
65
  */
71
66
  export declare function payloadAdminIndexRoute({ load }: {
72
67
  load: AdminLoad;
@@ -94,12 +89,13 @@ export declare function payloadAdminIndexRoute({ load }: {
94
89
  title: string;
95
90
  })[];
96
91
  };
92
+ notFoundComponent: typeof AdminNotFound;
97
93
  loader: {
98
94
  handler: ({ location, params }: {
99
95
  location: any;
100
96
  params: any;
101
97
  }) => Promise<any>;
102
- staleReloadMode: string;
98
+ staleReloadMode: 'blocking';
103
99
  };
104
100
  loaderDeps: ({ search }: {
105
101
  search: Record<string, unknown>;
@@ -1 +1 @@
1
- {"version":3,"file":"adminRoutes.d.ts","sourceRoot":"","sources":["../../src/routes/adminRoutes.tsx"],"names":[],"mappings":"AAIA,OAAO,EAAY,KAAK,SAAS,EAAE,MAAM,OAAO,CAAA;AAIhD;;;;GAIG;AACH,MAAM,MAAM,SAAS,GAAG,CAAC,IAAI,EAAE;IAC7B,IAAI,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC,CAAA;KAAE,CAAA;CACpE,KAAK,OAAO,CAAC,GAAG,CAAC,CAAA;AAclB,iBAAS,SAAS,gCAKjB;AAED,iBAAS,aAAa,CAAC,KAAK,EAAE;IAAE,IAAI,CAAC,EAAE;QAAE,QAAQ,CAAC,EAAE,MAAM,CAAC;QAAC,UAAU,CAAC,EAAE,SAAS,CAAA;KAAE,CAAA;CAAE,+BAMrF;AA8CD;;;;;GAKG;AACH,wBAAgB,sBAAsB,CAAC,EAAE,IAAI,EAAE,EAAE;IAAE,IAAI,EAAE,SAAS,CAAA;CAAE;;2BAlC3C;QAAE,UAAU,CAAC,EAAE,GAAG,CAAA;KAAE;;;;;;;;;;;;;;;;;;;;;QAOzC,OAAO,yBAA+B;YAAE,QAAQ,EAAE,GAAG,CAAC;YAAC,MAAM,EAAE,GAAG,CAAA;SAAE;QAYpE,eAAe;;6BAGQ;QAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KAAE;QAC1D,SAAS;;6BAEc,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;;EAkBjD;AAED;;;GAGG;AACH,wBAAgB,sBAAsB,CAAC,EAAE,IAAI,EAAE,EAAE;IAAE,IAAI,EAAE,SAAS,CAAA;CAAE;;2BAjD3C;QAAE,UAAU,CAAC,EAAE,GAAG,CAAA;KAAE;;;;;;;;;;;;;;;;;;;;;QAOzC,OAAO,yBAA+B;YAAE,QAAQ,EAAE,GAAG,CAAC;YAAC,MAAM,EAAE,GAAG,CAAA;SAAE;QAYpE,eAAe;;6BAGQ;QAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KAAE;QAC1D,SAAS;;6BAEc,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;EA8BjD"}
1
+ {"version":3,"file":"adminRoutes.d.ts","sourceRoot":"","sources":["../../src/routes/adminRoutes.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAA;AAQhE;;;;GAIG;AACH,MAAM,MAAM,SAAS,GAAG,CAAC,IAAI,EAAE;IAC7B,IAAI,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC,CAAA;KAAE,CAAA;CACpE,KAAK,OAAO,CAAC,GAAG,CAAC,CAAA;AAclB,iBAAS,SAAS,gCAuBjB;AAID,iBAAS,aAAa,CAAC,EAAE,IAAI,EAAE,EAAE,kBAAkB,+BAOlD;AAiDD;;;;;GAKG;AACH,wBAAgB,sBAAsB,CAAC,EAAE,IAAI,EAAE,EAAE;IAAE,IAAI,EAAE,SAAS,CAAA;CAAE;;2BArC3C;QAAE,UAAU,CAAC,EAAE,GAAG,CAAA;KAAE;;;;;;;;;;;;;;;;;;;;;;QAUzC,OAAO,yBAA+B;YAAE,QAAQ,EAAE,GAAG,CAAC;YAAC,MAAM,EAAE,GAAG,CAAA;SAAE;QAYpE,eAAe,EAAE,UAAU;;6BAGJ;QAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KAAE;QAC1D,SAAS;;6BAEc,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;EAejD;AAED;;;GAGG;AACH,wBAAgB,sBAAsB,CAAC,EAAE,IAAI,EAAE,EAAE;IAAE,IAAI,EAAE,SAAS,CAAA;CAAE;;2BAjD3C;QAAE,UAAU,CAAC,EAAE,GAAG,CAAA;KAAE;;;;;;;;;;;;;;;;;;;;;;QAUzC,OAAO,yBAA+B;YAAE,QAAQ,EAAE,GAAG,CAAC;YAAC,MAAM,EAAE,GAAG,CAAA;SAAE;QAYpE,eAAe,EAAE,UAAU;;6BAGJ;QAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KAAE;QAC1D,SAAS;;6BAEc,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;EA2BjD"}
@@ -1,8 +1,8 @@
1
1
  'use client';
2
2
  import { jsx as _jsx } from "react/jsx-runtime";
3
- import { NotFoundClient } from '@payloadcms/ui';
3
+ import { NotFoundClient, useRouteTransition } from '@payloadcms/ui';
4
4
  import { notFound, redirect, useLoaderData } from '@tanstack/react-router';
5
- import { Fragment } from 'react';
5
+ import { Fragment, useDeferredValue, useEffect } from 'react';
6
6
  import { getAdminMeta } from '../utilities/meta.js';
7
7
  const searchToRecord = (searchStr)=>Object.fromEntries(new URLSearchParams(searchStr));
8
8
  const runLoader = async (load, splat, searchStr)=>{
@@ -26,22 +26,42 @@ function AdminPage() {
26
26
  const data = useLoaderData({
27
27
  strict: false
28
28
  });
29
+ // Route state comes from an external store, so a new RSC payload that suspends
30
+ // on code-split client references can reveal the router's null fallback.
31
+ // Keep the current payload painted until the next one is renderable.
32
+ const rscPayload = useDeferredValue(data?.rscPayload);
33
+ const { holdRouteTransition } = useRouteTransition();
34
+ const isRscPayloadDeferred = rscPayload !== data?.rscPayload;
35
+ useEffect(()=>{
36
+ if (!isRscPayloadDeferred) {
37
+ return;
38
+ }
39
+ const releaseRouteTransition = holdRouteTransition();
40
+ return ()=>releaseRouteTransition();
41
+ }, [
42
+ holdRouteTransition,
43
+ isRscPayloadDeferred
44
+ ]);
29
45
  return /*#__PURE__*/ _jsx(Fragment, {
30
- children: data?.rscPayload
46
+ children: rscPayload
31
47
  });
32
48
  }
33
- function AdminNotFound(props) {
34
- const rscPayload = props?.data?.rscPayload;
49
+ function AdminNotFound({ data }) {
50
+ // TanStack exposes not-found data as unknown; this route only receives the shape thrown below.
51
+ const { routeKey, rscPayload } = data ?? {};
35
52
  if (!rscPayload) {
36
53
  return /*#__PURE__*/ _jsx(NotFoundClient, {});
37
54
  }
38
55
  return /*#__PURE__*/ _jsx(Fragment, {
39
56
  children: rscPayload
40
- }, props?.data?.routeKey);
57
+ }, routeKey);
41
58
  }
42
59
  const adminRouteOptions = ({ forwardNotFoundPayload, load, resolveSplat })=>({
43
60
  component: AdminPage,
44
61
  head: ({ loaderData })=>getAdminMeta(loaderData?.metadata),
62
+ // Both admin routes must use the same boundary type so index ↔ splat
63
+ // navigation preserves the existing admin subtree.
64
+ notFoundComponent: AdminNotFound,
45
65
  // `staleReloadMode: 'blocking'` (a property of the loader *object*, not a
46
66
  // sibling route option — router-core only reads it off a non-function loader)
47
67
  // makes stale-match revalidation await the fresh loader before committing,
@@ -75,18 +95,15 @@ const adminRouteOptions = ({ forwardNotFoundPayload, load, resolveSplat })=>({
75
95
  * `data.rscPayload`) for unknown/access-denied routes, falling back to the bare
76
96
  * client view.
77
97
  */ export function payloadAdminSplatRoute({ load }) {
78
- return {
79
- ...adminRouteOptions({
80
- forwardNotFoundPayload: true,
81
- load,
82
- resolveSplat: (params)=>params._splat ?? ''
83
- }),
84
- notFoundComponent: AdminNotFound
85
- };
98
+ return adminRouteOptions({
99
+ forwardNotFoundPayload: true,
100
+ load,
101
+ resolveSplat: (params)=>params._splat ?? ''
102
+ });
86
103
  }
87
104
  /**
88
- * Route options for the admin index route (`/_payload/admin/`). Same loader as the
89
- * splat route but throws a bare `notFound()` (no rscPayload) on miss.
105
+ * Route options for the admin index route (`/_payload/admin/`). Not-found
106
+ * results omit the RSC payload and fall back to `NotFoundClient`.
90
107
  */ export function payloadAdminIndexRoute({ load }) {
91
108
  return adminRouteOptions({
92
109
  forwardNotFoundPayload: false,