UNPKG

next-drupal

Version:
1 lines 3.78 kB
{"version":3,"sources":["../src/draft.ts","../src/draft-constants.ts"],"sourcesContent":["import { cookies, draftMode } from \"next/headers\"\nimport { redirect } from \"next/navigation\"\nimport {\n DRAFT_DATA_COOKIE_NAME,\n DRAFT_MODE_COOKIE_NAME,\n} from \"./draft-constants\"\nimport type { NextRequest } from \"next/server\"\nimport type { NextDrupalBase } from \"./next-drupal-base\"\n\nexport async function enableDraftMode(\n request: NextRequest,\n drupal: NextDrupalBase\n): Promise<Response | never> {\n // Validate the draft request.\n const response = await drupal.validateDraftUrl(request.nextUrl.searchParams)\n\n // If validation fails, don't enable draft mode.\n if (!response.ok) {\n return response\n }\n\n const searchParams = request.nextUrl.searchParams\n const path = searchParams.get(\"path\")\n\n const cookieStore = await cookies()\n // Enable Draft Mode by setting the cookie\n const draft = await draftMode()\n draft.enable()\n\n // Override the default SameSite=lax.\n // See https://github.com/vercel/next.js/issues/49927\n const draftModeCookie = cookieStore.get(DRAFT_MODE_COOKIE_NAME)\n if (draftModeCookie) {\n cookieStore.set({\n ...draftModeCookie,\n sameSite: \"none\",\n secure: true,\n })\n }\n\n // Send Drupal's data to the draft-mode page.\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const { secret, scope, plugin, ...draftData } = Object.fromEntries(\n searchParams.entries()\n )\n cookieStore.set({\n ...draftModeCookie,\n name: DRAFT_DATA_COOKIE_NAME,\n sameSite: \"none\",\n secure: true,\n value: JSON.stringify(draftData),\n })\n\n // Redirect to the path from the fetched post. We can safely redirect to the\n // path since this has been validated on the server.\n redirect(path)\n}\n\nexport async function disableDraftMode() {\n const cookieStore = await cookies()\n cookieStore.delete(DRAFT_DATA_COOKIE_NAME)\n const draft = await draftMode()\n draft.disable()\n\n return new Response(\"Draft mode is disabled\")\n}\n\nexport interface DraftData {\n path?: string\n resourceVersion?: string\n}\n\nexport async function getDraftData() {\n let data: DraftData = {}\n const cookieStore = await cookies()\n const draft = await draftMode()\n if (draft.isEnabled && cookieStore.has(DRAFT_DATA_COOKIE_NAME)) {\n data = JSON.parse(cookieStore.get(DRAFT_DATA_COOKIE_NAME)?.value || \"{}\")\n }\n\n return data\n}\n","export const DRAFT_DATA_COOKIE_NAME = \"next_drupal_draft_data\"\n\n// See https://vercel.com/docs/workflow-collaboration/draft-mode\nexport const DRAFT_MODE_COOKIE_NAME = \"__prerender_bypass\"\n"],"mappings":";;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,qBAAmC;AACnC,wBAAyB;;;ACDlB,IAAM,yBAAyB;AAG/B,IAAM,yBAAyB;;;ADMtC,eAAsB,gBACpB,SACA,QAC2B;AAE3B,QAAM,WAAW,MAAM,OAAO,iBAAiB,QAAQ,QAAQ,YAAY;AAG3E,MAAI,CAAC,SAAS,IAAI;AAChB,WAAO;AAAA,EACT;AAEA,QAAM,eAAe,QAAQ,QAAQ;AACrC,QAAM,OAAO,aAAa,IAAI,MAAM;AAEpC,QAAM,cAAc,UAAM,wBAAQ;AAElC,QAAM,QAAQ,UAAM,0BAAU;AAC9B,QAAM,OAAO;AAIb,QAAM,kBAAkB,YAAY,IAAI,sBAAsB;AAC9D,MAAI,iBAAiB;AACnB,gBAAY,IAAI;AAAA,MACd,GAAG;AAAA,MACH,UAAU;AAAA,MACV,QAAQ;AAAA,IACV,CAAC;AAAA,EACH;AAIA,QAAM,EAAE,QAAQ,OAAO,QAAQ,GAAG,UAAU,IAAI,OAAO;AAAA,IACrD,aAAa,QAAQ;AAAA,EACvB;AACA,cAAY,IAAI;AAAA,IACd,GAAG;AAAA,IACH,MAAM;AAAA,IACN,UAAU;AAAA,IACV,QAAQ;AAAA,IACR,OAAO,KAAK,UAAU,SAAS;AAAA,EACjC,CAAC;AAID,kCAAS,IAAI;AACf;AAEA,eAAsB,mBAAmB;AACvC,QAAM,cAAc,UAAM,wBAAQ;AAClC,cAAY,OAAO,sBAAsB;AACzC,QAAM,QAAQ,UAAM,0BAAU;AAC9B,QAAM,QAAQ;AAEd,SAAO,IAAI,SAAS,wBAAwB;AAC9C;AAOA,eAAsB,eAAe;AACnC,MAAI,OAAkB,CAAC;AACvB,QAAM,cAAc,UAAM,wBAAQ;AAClC,QAAM,QAAQ,UAAM,0BAAU;AAC9B,MAAI,MAAM,aAAa,YAAY,IAAI,sBAAsB,GAAG;AAC9D,WAAO,KAAK,MAAM,YAAY,IAAI,sBAAsB,GAAG,SAAS,IAAI;AAAA,EAC1E;AAEA,SAAO;AACT;","names":[]}