{"version":3,"sources":["../../../../src/server/app-render/instant-validation/boundary-impl.tsx"],"sourcesContent":["/* eslint-disable @next/internal/no-ambiguous-jsx -- React Client */\n\n// Do not put a \"use client\" directive here. Import this module via the shim in\n// `packages/next/src/client/components/instant-validation/boundary.tsx` instead.\n// 'use client'\n\nimport { createContext, type ReactNode } from 'react'\nimport { INSTANT_VALIDATION_BOUNDARY_NAME } from './boundary-constants'\nimport { InvariantError } from '../../../shared/lib/invariant-error'\nimport type { ValidationBoundaryTracking } from './boundary-tracking'\nimport { workUnitAsyncStorage } from '../work-unit-async-storage.external'\n\nif (typeof window !== 'undefined') {\n  throw new InvariantError(\n    'Instant validation boundaries should never appear in browser bundles.'\n  )\n}\n\nfunction getValidationBoundaryTracking(): ValidationBoundaryTracking | null {\n  const store = workUnitAsyncStorage.getStore()\n  if (!store) return null\n  switch (store.type) {\n    case 'validation-client':\n      return store.boundaryState\n    case 'prerender':\n    case 'prerender-client':\n    case 'prerender-ppr':\n    case 'prerender-legacy':\n    case 'prerender-runtime':\n    case 'request':\n    case 'cache':\n    case 'private-cache':\n    case 'unstable-cache':\n    case 'generate-static-params':\n      break\n    default:\n      store satisfies never\n  }\n  return null\n}\n\n// We use a namespace object to allow us to recover the name of the function\n// at runtime even when production bundling/minification is used.\nconst NameSpace = {\n  [INSTANT_VALIDATION_BOUNDARY_NAME]: function ({\n    id,\n    children,\n  }: {\n    id: string\n    children: ReactNode\n  }) {\n    // Track which boundaries we actually managed to render.\n    const state = getValidationBoundaryTracking()\n    if (state === null) {\n      throw new InvariantError('Missing boundary tracking state')\n    }\n    state.renderedIds.add(id)\n\n    return children\n  },\n}\n\ntype BoundaryPlacement =\n  | null // do not place here\n  | string // boundaryId -- place here\n\nexport const InstantValidationBoundaryContext =\n  createContext<BoundaryPlacement>(null)\n\nexport function PlaceValidationBoundaryBelowThisLevel({\n  id,\n  children,\n}: {\n  id: string\n  children: ReactNode\n}) {\n  return (\n    // OuterLayoutRouter will see this and render a `RenderValidationBoundaryAtThisLevel`.\n    <InstantValidationBoundaryContext value={id}>\n      {children}\n    </InstantValidationBoundaryContext>\n  )\n}\n\nexport function RenderValidationBoundaryAtThisLevel({\n  id,\n  children,\n}: {\n  id: string\n  children: ReactNode\n}) {\n  // We got a boundaryId from the context. Clear the context so that the children don't render another boundary.\n  return (\n    <InstantValidationBoundary id={id}>\n      <InstantValidationBoundaryContext value={null}>\n        {children}\n      </InstantValidationBoundaryContext>\n    </InstantValidationBoundary>\n  )\n}\n\nconst InstantValidationBoundary =\n  // We use slice(0) to trick the bundler into not inlining/minifying the function\n  // so it retains the name inferred from the namespace object\n  NameSpace[\n    INSTANT_VALIDATION_BOUNDARY_NAME.slice(\n      0\n    ) as typeof INSTANT_VALIDATION_BOUNDARY_NAME\n  ]\n"],"names":["InstantValidationBoundaryContext","PlaceValidationBoundaryBelowThisLevel","RenderValidationBoundaryAtThisLevel","window","InvariantError","getValidationBoundaryTracking","store","workUnitAsyncStorage","getStore","type","boundaryState","NameSpace","INSTANT_VALIDATION_BOUNDARY_NAME","id","children","state","renderedIds","add","createContext","value","InstantValidationBoundary","slice"],"mappings":"AAAA,kEAAkE,GAElE,+EAA+E;AAC/E,iFAAiF;AACjF,eAAe;;;;;;;;;;;;;;;;;IA8DFA,gCAAgC;eAAhCA;;IAGGC,qCAAqC;eAArCA;;IAeAC,mCAAmC;eAAnCA;;;;uBA9E8B;mCACG;gCAClB;8CAEM;AAErC,IAAI,OAAOC,WAAW,aAAa;IACjC,MAAM,qBAEL,CAFK,IAAIC,8BAAc,CACtB,0EADI,qBAAA;eAAA;oBAAA;sBAAA;IAEN;AACF;AAEA,SAASC;IACP,MAAMC,QAAQC,kDAAoB,CAACC,QAAQ;IAC3C,IAAI,CAACF,OAAO,OAAO;IACnB,OAAQA,MAAMG,IAAI;QAChB,KAAK;YACH,OAAOH,MAAMI,aAAa;QAC5B,KAAK;QACL,KAAK;QACL,KAAK;QACL,KAAK;QACL,KAAK;QACL,KAAK;QACL,KAAK;QACL,KAAK;QACL,KAAK;QACL,KAAK;YACH;QACF;YACEJ;IACJ;IACA,OAAO;AACT;AAEA,4EAA4E;AAC5E,iEAAiE;AACjE,MAAMK,YAAY;IAChB,CAACC,mDAAgC,CAAC,EAAE,SAAU,EAC5CC,EAAE,EACFC,QAAQ,EAIT;QACC,wDAAwD;QACxD,MAAMC,QAAQV;QACd,IAAIU,UAAU,MAAM;YAClB,MAAM,qBAAqD,CAArD,IAAIX,8BAAc,CAAC,oCAAnB,qBAAA;uBAAA;4BAAA;8BAAA;YAAoD;QAC5D;QACAW,MAAMC,WAAW,CAACC,GAAG,CAACJ;QAEtB,OAAOC;IACT;AACF;AAMO,MAAMd,iDACXkB,IAAAA,oBAAa,EAAoB;AAE5B,SAASjB,sCAAsC,EACpDY,EAAE,EACFC,QAAQ,EAIT;IACC,OACE,sFAAsF;kBACtF,qBAACd;QAAiCmB,OAAON;kBACtCC;;AAGP;AAEO,SAASZ,oCAAoC,EAClDW,EAAE,EACFC,QAAQ,EAIT;IACC,8GAA8G;IAC9G,qBACE,qBAACM;QAA0BP,IAAIA;kBAC7B,cAAA,qBAACb;YAAiCmB,OAAO;sBACtCL;;;AAIT;AAEA,MAAMM,4BACJ,gFAAgF;AAChF,4DAA4D;AAC5DT,SAAS,CACPC,mDAAgC,CAACS,KAAK,CACpC,GAEH","ignoreList":[0]}