UNPKG

next

Version:

The React Framework

82 lines (80 loc) 3.96 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); Object.defineProperty(exports, "makeUntrackedExoticSearchParamsWithDevWarnings", { enumerable: true, get: function() { return makeUntrackedExoticSearchParamsWithDevWarnings; } }); const _reflect = require("../../server/web/spec-extension/adapters/reflect"); const _reflectutils = require("../../shared/lib/utils/reflect-utils"); const CachedSearchParams = new WeakMap(); function makeUntrackedExoticSearchParamsWithDevWarnings(underlyingSearchParams) { const cachedSearchParams = CachedSearchParams.get(underlyingSearchParams); if (cachedSearchParams) { return cachedSearchParams; } const proxiedProperties = new Set(); const unproxiedProperties = []; const promise = Promise.resolve(underlyingSearchParams); Object.keys(underlyingSearchParams).forEach((prop)=>{ if (_reflectutils.wellKnownProperties.has(prop)) { // These properties cannot be shadowed because they need to be the // true underlying value for Promises to work correctly at runtime unproxiedProperties.push(prop); } else { proxiedProperties.add(prop); promise[prop] = underlyingSearchParams[prop]; } }); const proxiedPromise = new Proxy(promise, { get (target, prop, receiver) { if (typeof prop === 'string') { if (!_reflectutils.wellKnownProperties.has(prop) && (proxiedProperties.has(prop) || // We are accessing a property that doesn't exist on the promise nor // the underlying searchParams. Reflect.has(target, prop) === false)) { const expression = (0, _reflectutils.describeStringPropertyAccess)('searchParams', prop); warnForSyncAccess(expression); } } return _reflect.ReflectAdapter.get(target, prop, receiver); }, set (target, prop, value, receiver) { if (typeof prop === 'string') { proxiedProperties.delete(prop); } return Reflect.set(target, prop, value, receiver); }, has (target, prop) { if (typeof prop === 'string') { if (!_reflectutils.wellKnownProperties.has(prop) && (proxiedProperties.has(prop) || // We are accessing a property that doesn't exist on the promise nor // the underlying searchParams. Reflect.has(target, prop) === false)) { const expression = (0, _reflectutils.describeHasCheckingStringProperty)('searchParams', prop); warnForSyncAccess(expression); } } return Reflect.has(target, prop); }, ownKeys (target) { warnForSyncSpread(); return Reflect.ownKeys(target); } }); CachedSearchParams.set(underlyingSearchParams, proxiedPromise); return proxiedPromise; } function warnForSyncAccess(expression) { console.error("A searchParam property was accessed directly with " + expression + ". " + "`searchParams` should be unwrapped with `React.use()` before accessing its properties. " + "Learn more: https://nextjs.org/docs/messages/sync-dynamic-apis"); } function warnForSyncSpread() { console.error("The keys of `searchParams` were accessed directly. " + "`searchParams` should be unwrapped with `React.use()` before accessing its properties. " + "Learn more: https://nextjs.org/docs/messages/sync-dynamic-apis"); } if ((typeof exports.default === 'function' || (typeof exports.default === 'object' && exports.default !== null)) && typeof exports.default.__esModule === 'undefined') { Object.defineProperty(exports.default, '__esModule', { value: true }); Object.assign(exports.default, exports); module.exports = exports.default; } //# sourceMappingURL=search-params.browser.dev.js.map