{"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":[]}