UNPKG

inertia-sails

Version:
56 lines (47 loc) 1.76 kB
const isInertiaPartialRequest = require('../helpers/is-inertia-partial-request') const isInertiaRequest = require('../helpers/is-inertia-request') const ignoreFirstLoadSymbol = require('../helpers/ignore-first-load-symbol') const { PARTIAL_DATA, PARTIAL_EXCEPT } = require('../helpers/inertia-headers') const resolveOnlyProps = require('./resolve-only-props') const resolveExceptProps = require('./resolve-except-props') const { filterOnceProps } = require('./resolve-once-props') const AlwaysProp = require('./always-prop') /** * @typedef {import('../types').InertiaRequest} InertiaRequest * @typedef {import('../types').InertiaProps} InertiaProps */ /** * @param {InertiaRequest} req * @param {string} component * @param {InertiaProps} [props] * @returns {InertiaProps} */ module.exports = function pickPropsToResolve(req, component, props = {}) { const isPartial = isInertiaPartialRequest(req, component) const isInertia = isInertiaRequest(req) let newProps = props if (!isPartial) { newProps = Object.fromEntries( Object.entries(props).filter(([_, value]) => { if (value && /** @type {any} */ (value)[ignoreFirstLoadSymbol]) { return false } return true }) ) } if (isPartial && req.get(PARTIAL_DATA)) { newProps = resolveOnlyProps(req, newProps) } if (isPartial && req.get(PARTIAL_EXCEPT)) { newProps = resolveExceptProps(req, newProps) } // Filter out once-props that the client already has (only for Inertia XHR requests, not partial) if (isInertia && !isPartial) { newProps = filterOnceProps(req, newProps) } for (const [key, value] of Object.entries(props)) { if (value instanceof AlwaysProp) newProps[key] = props[key] } return newProps }