{"version":3,"sources":["../../../src/client/request/search-params.browser.dev.ts"],"sourcesContent":["import type { SearchParams } from '../../server/request/search-params'\n\nimport { ReflectAdapter } from '../../server/web/spec-extension/adapters/reflect'\nimport {\n  describeStringPropertyAccess,\n  describeHasCheckingStringProperty,\n  wellKnownProperties,\n} from '../../shared/lib/utils/reflect-utils'\n\ninterface CacheLifetime {}\nconst CachedSearchParams = new WeakMap<CacheLifetime, Promise<SearchParams>>()\n\nfunction makeUntrackedExoticSearchParamsWithDevWarnings(\n  underlyingSearchParams: SearchParams\n): Promise<SearchParams> {\n  const cachedSearchParams = CachedSearchParams.get(underlyingSearchParams)\n  if (cachedSearchParams) {\n    return cachedSearchParams\n  }\n\n  const proxiedProperties = new Set<string>()\n  const unproxiedProperties: Array<string> = []\n\n  const promise = Promise.resolve(underlyingSearchParams)\n\n  Object.keys(underlyingSearchParams).forEach((prop) => {\n    if (wellKnownProperties.has(prop)) {\n      // These properties cannot be shadowed because they need to be the\n      // true underlying value for Promises to work correctly at runtime\n      unproxiedProperties.push(prop)\n    } else {\n      proxiedProperties.add(prop)\n      ;(promise as any)[prop] = underlyingSearchParams[prop]\n    }\n  })\n\n  const proxiedPromise = new Proxy(promise, {\n    get(target, prop, receiver) {\n      if (typeof prop === 'string') {\n        if (\n          !wellKnownProperties.has(prop) &&\n          (proxiedProperties.has(prop) ||\n            // We are accessing a property that doesn't exist on the promise nor\n            // the underlying searchParams.\n            Reflect.has(target, prop) === false)\n        ) {\n          const expression = describeStringPropertyAccess('searchParams', prop)\n          warnForSyncAccess(expression)\n        }\n      }\n      return ReflectAdapter.get(target, prop, receiver)\n    },\n    set(target, prop, value, receiver) {\n      if (typeof prop === 'string') {\n        proxiedProperties.delete(prop)\n      }\n      return Reflect.set(target, prop, value, receiver)\n    },\n    has(target, prop) {\n      if (typeof prop === 'string') {\n        if (\n          !wellKnownProperties.has(prop) &&\n          (proxiedProperties.has(prop) ||\n            // We are accessing a property that doesn't exist on the promise nor\n            // the underlying searchParams.\n            Reflect.has(target, prop) === false)\n        ) {\n          const expression = describeHasCheckingStringProperty(\n            'searchParams',\n            prop\n          )\n          warnForSyncAccess(expression)\n        }\n      }\n      return Reflect.has(target, prop)\n    },\n    ownKeys(target) {\n      warnForSyncSpread()\n      return Reflect.ownKeys(target)\n    },\n  })\n\n  CachedSearchParams.set(underlyingSearchParams, proxiedPromise)\n  return proxiedPromise\n}\n\n// Similar to `makeUntrackedExoticSearchParamsWithDevWarnings`, but just logging\n// the sync access without actually defining the search params on the promise.\nfunction makeUntrackedSearchParamsWithDevWarnings(\n  underlyingSearchParams: SearchParams\n): Promise<SearchParams> {\n  const cachedSearchParams = CachedSearchParams.get(underlyingSearchParams)\n  if (cachedSearchParams) {\n    return cachedSearchParams\n  }\n\n  const proxiedProperties = new Set<string>()\n  const unproxiedProperties: Array<string> = []\n  const promise = Promise.resolve(underlyingSearchParams)\n\n  Object.keys(underlyingSearchParams).forEach((prop) => {\n    if (wellKnownProperties.has(prop)) {\n      // These properties cannot be shadowed because they need to be the\n      // true underlying value for Promises to work correctly at runtime\n      unproxiedProperties.push(prop)\n    } else {\n      proxiedProperties.add(prop)\n    }\n  })\n\n  const proxiedPromise = new Proxy(promise, {\n    get(target, prop, receiver) {\n      if (typeof prop === 'string') {\n        if (\n          !wellKnownProperties.has(prop) &&\n          (proxiedProperties.has(prop) ||\n            // We are accessing a property that doesn't exist on the promise nor\n            // the underlying searchParams.\n            Reflect.has(target, prop) === false)\n        ) {\n          const expression = describeStringPropertyAccess('searchParams', prop)\n          warnForSyncAccess(expression)\n        }\n      }\n      return ReflectAdapter.get(target, prop, receiver)\n    },\n    set(target, prop, value, receiver) {\n      if (typeof prop === 'string') {\n        proxiedProperties.delete(prop)\n      }\n      return Reflect.set(target, prop, value, receiver)\n    },\n    has(target, prop) {\n      if (typeof prop === 'string') {\n        if (\n          !wellKnownProperties.has(prop) &&\n          (proxiedProperties.has(prop) ||\n            // We are accessing a property that doesn't exist on the promise nor\n            // the underlying searchParams.\n            Reflect.has(target, prop) === false)\n        ) {\n          const expression = describeHasCheckingStringProperty(\n            'searchParams',\n            prop\n          )\n          warnForSyncAccess(expression)\n        }\n      }\n      return Reflect.has(target, prop)\n    },\n    ownKeys(target) {\n      warnForSyncSpread()\n      return Reflect.ownKeys(target)\n    },\n  })\n\n  CachedSearchParams.set(underlyingSearchParams, proxiedPromise)\n  return proxiedPromise\n}\n\nfunction warnForSyncAccess(expression: string) {\n  console.error(\n    `A searchParam property was accessed directly with ${expression}. ` +\n      `\\`searchParams\\` should be unwrapped with \\`React.use()\\` before accessing its properties. ` +\n      `Learn more: https://nextjs.org/docs/messages/sync-dynamic-apis`\n  )\n}\n\nfunction warnForSyncSpread() {\n  console.error(\n    `The keys of \\`searchParams\\` were accessed directly. ` +\n      `\\`searchParams\\` should be unwrapped with \\`React.use()\\` before accessing its properties. ` +\n      `Learn more: https://nextjs.org/docs/messages/sync-dynamic-apis`\n  )\n}\n\nexport function createRenderSearchParamsFromClient(\n  underlyingSearchParams: SearchParams\n): Promise<SearchParams> {\n  if (process.env.__NEXT_CACHE_COMPONENTS) {\n    return makeUntrackedSearchParamsWithDevWarnings(underlyingSearchParams)\n  }\n\n  return makeUntrackedExoticSearchParamsWithDevWarnings(underlyingSearchParams)\n}\n"],"names":["ReflectAdapter","describeStringPropertyAccess","describeHasCheckingStringProperty","wellKnownProperties","CachedSearchParams","WeakMap","makeUntrackedExoticSearchParamsWithDevWarnings","underlyingSearchParams","cachedSearchParams","get","proxiedProperties","Set","unproxiedProperties","promise","Promise","resolve","Object","keys","forEach","prop","has","push","add","proxiedPromise","Proxy","target","receiver","Reflect","expression","warnForSyncAccess","set","value","delete","ownKeys","warnForSyncSpread","makeUntrackedSearchParamsWithDevWarnings","console","error","createRenderSearchParamsFromClient","process","env","__NEXT_CACHE_COMPONENTS"],"mappings":"AAEA,SAASA,cAAc,QAAQ,mDAAkD;AACjF,SACEC,4BAA4B,EAC5BC,iCAAiC,EACjCC,mBAAmB,QACd,uCAAsC;AAG7C,MAAMC,qBAAqB,IAAIC;AAE/B,SAASC,+CACPC,sBAAoC;IAEpC,MAAMC,qBAAqBJ,mBAAmBK,GAAG,CAACF;IAClD,IAAIC,oBAAoB;QACtB,OAAOA;IACT;IAEA,MAAME,oBAAoB,IAAIC;IAC9B,MAAMC,sBAAqC,EAAE;IAE7C,MAAMC,UAAUC,QAAQC,OAAO,CAACR;IAEhCS,OAAOC,IAAI,CAACV,wBAAwBW,OAAO,CAAC,CAACC;QAC3C,IAAIhB,oBAAoBiB,GAAG,CAACD,OAAO;YACjC,kEAAkE;YAClE,kEAAkE;YAClEP,oBAAoBS,IAAI,CAACF;QAC3B,OAAO;YACLT,kBAAkBY,GAAG,CAACH;YACpBN,OAAe,CAACM,KAAK,GAAGZ,sBAAsB,CAACY,KAAK;QACxD;IACF;IAEA,MAAMI,iBAAiB,IAAIC,MAAMX,SAAS;QACxCJ,KAAIgB,MAAM,EAAEN,IAAI,EAAEO,QAAQ;YACxB,IAAI,OAAOP,SAAS,UAAU;gBAC5B,IACE,CAAChB,oBAAoBiB,GAAG,CAACD,SACxBT,CAAAA,kBAAkBU,GAAG,CAACD,SACrB,oEAAoE;gBACpE,+BAA+B;gBAC/BQ,QAAQP,GAAG,CAACK,QAAQN,UAAU,KAAI,GACpC;oBACA,MAAMS,aAAa3B,6BAA6B,gBAAgBkB;oBAChEU,kBAAkBD;gBACpB;YACF;YACA,OAAO5B,eAAeS,GAAG,CAACgB,QAAQN,MAAMO;QAC1C;QACAI,KAAIL,MAAM,EAAEN,IAAI,EAAEY,KAAK,EAAEL,QAAQ;YAC/B,IAAI,OAAOP,SAAS,UAAU;gBAC5BT,kBAAkBsB,MAAM,CAACb;YAC3B;YACA,OAAOQ,QAAQG,GAAG,CAACL,QAAQN,MAAMY,OAAOL;QAC1C;QACAN,KAAIK,MAAM,EAAEN,IAAI;YACd,IAAI,OAAOA,SAAS,UAAU;gBAC5B,IACE,CAAChB,oBAAoBiB,GAAG,CAACD,SACxBT,CAAAA,kBAAkBU,GAAG,CAACD,SACrB,oEAAoE;gBACpE,+BAA+B;gBAC/BQ,QAAQP,GAAG,CAACK,QAAQN,UAAU,KAAI,GACpC;oBACA,MAAMS,aAAa1B,kCACjB,gBACAiB;oBAEFU,kBAAkBD;gBACpB;YACF;YACA,OAAOD,QAAQP,GAAG,CAACK,QAAQN;QAC7B;QACAc,SAAQR,MAAM;YACZS;YACA,OAAOP,QAAQM,OAAO,CAACR;QACzB;IACF;IAEArB,mBAAmB0B,GAAG,CAACvB,wBAAwBgB;IAC/C,OAAOA;AACT;AAEA,gFAAgF;AAChF,8EAA8E;AAC9E,SAASY,yCACP5B,sBAAoC;IAEpC,MAAMC,qBAAqBJ,mBAAmBK,GAAG,CAACF;IAClD,IAAIC,oBAAoB;QACtB,OAAOA;IACT;IAEA,MAAME,oBAAoB,IAAIC;IAC9B,MAAMC,sBAAqC,EAAE;IAC7C,MAAMC,UAAUC,QAAQC,OAAO,CAACR;IAEhCS,OAAOC,IAAI,CAACV,wBAAwBW,OAAO,CAAC,CAACC;QAC3C,IAAIhB,oBAAoBiB,GAAG,CAACD,OAAO;YACjC,kEAAkE;YAClE,kEAAkE;YAClEP,oBAAoBS,IAAI,CAACF;QAC3B,OAAO;YACLT,kBAAkBY,GAAG,CAACH;QACxB;IACF;IAEA,MAAMI,iBAAiB,IAAIC,MAAMX,SAAS;QACxCJ,KAAIgB,MAAM,EAAEN,IAAI,EAAEO,QAAQ;YACxB,IAAI,OAAOP,SAAS,UAAU;gBAC5B,IACE,CAAChB,oBAAoBiB,GAAG,CAACD,SACxBT,CAAAA,kBAAkBU,GAAG,CAACD,SACrB,oEAAoE;gBACpE,+BAA+B;gBAC/BQ,QAAQP,GAAG,CAACK,QAAQN,UAAU,KAAI,GACpC;oBACA,MAAMS,aAAa3B,6BAA6B,gBAAgBkB;oBAChEU,kBAAkBD;gBACpB;YACF;YACA,OAAO5B,eAAeS,GAAG,CAACgB,QAAQN,MAAMO;QAC1C;QACAI,KAAIL,MAAM,EAAEN,IAAI,EAAEY,KAAK,EAAEL,QAAQ;YAC/B,IAAI,OAAOP,SAAS,UAAU;gBAC5BT,kBAAkBsB,MAAM,CAACb;YAC3B;YACA,OAAOQ,QAAQG,GAAG,CAACL,QAAQN,MAAMY,OAAOL;QAC1C;QACAN,KAAIK,MAAM,EAAEN,IAAI;YACd,IAAI,OAAOA,SAAS,UAAU;gBAC5B,IACE,CAAChB,oBAAoBiB,GAAG,CAACD,SACxBT,CAAAA,kBAAkBU,GAAG,CAACD,SACrB,oEAAoE;gBACpE,+BAA+B;gBAC/BQ,QAAQP,GAAG,CAACK,QAAQN,UAAU,KAAI,GACpC;oBACA,MAAMS,aAAa1B,kCACjB,gBACAiB;oBAEFU,kBAAkBD;gBACpB;YACF;YACA,OAAOD,QAAQP,GAAG,CAACK,QAAQN;QAC7B;QACAc,SAAQR,MAAM;YACZS;YACA,OAAOP,QAAQM,OAAO,CAACR;QACzB;IACF;IAEArB,mBAAmB0B,GAAG,CAACvB,wBAAwBgB;IAC/C,OAAOA;AACT;AAEA,SAASM,kBAAkBD,UAAkB;IAC3CQ,QAAQC,KAAK,CACX,AAAC,uDAAoDT,aAAW,OAC7D,4FACA;AAEP;AAEA,SAASM;IACPE,QAAQC,KAAK,CACX,AAAC,wDACE,4FACA;AAEP;AAEA,OAAO,SAASC,mCACd/B,sBAAoC;IAEpC,IAAIgC,QAAQC,GAAG,CAACC,uBAAuB,EAAE;QACvC,OAAON,yCAAyC5B;IAClD;IAEA,OAAOD,+CAA+CC;AACxD","ignoreList":[0]}