UNPKG

lux-framework

Version:

Build scalable, Node.js-powered REST APIs with almost no code.

90 lines (78 loc) 2.08 kB
// @flow import type Controller from '../../../controller'; import ParameterGroup from './parameter-group'; import getURLParams from './utils/get-url-params'; import getDataParams from './utils/get-data-params'; import getDefaultMemberParams from './utils/get-default-member-params'; import getDefaultCollectionParams from './utils/get-default-collection-params'; import type { Params$opts } from './interfaces'; import { getMemberQueryParams, getCollectionQueryParams, getCustomParams } from './utils/get-query-params'; /** * @private */ export function paramsFor({ type, method, controller, dynamicSegments }: Params$opts) { let params = getURLParams(dynamicSegments); if (type === 'member') { params = [ ...params, ...getMemberQueryParams(controller) ]; if (method === 'POST' || method === 'PATCH') { params = [ ...params, getDataParams(controller, method, true) ]; } } else if (type === 'collection') { params = [ ...params, ...getCollectionQueryParams(controller) ]; if (method === 'POST' || method === 'PATCH') { params = [ ...params, getDataParams(controller, method, false) ]; } } else if (type === 'custom') { params = [ ...params, ...getCustomParams(controller) ]; } return new ParameterGroup(params, { path: '', required: true }); } /** * @private */ export function defaultParamsFor({ type, controller }: { type: string; controller: Controller }): Object { const { hasModel } = controller; if (hasModel && type === 'member') { return getDefaultMemberParams(controller); } else if (hasModel && type === 'collection') { return getDefaultCollectionParams(controller); } return {}; } export { default as validateResourceId } from './utils/validate-resource-id'; export type { ParameterLike, ParameterLike$opts } from './interfaces'; export type { default as Parameter } from './parameter'; export type { default as ParameterGroup } from './parameter-group';