UNPKG

shinkansen-transmission

Version:
726 lines (647 loc) 17.4 kB
/** * @typedef {TransmissionTypes.ObjectLiteralType} ObjectLiteralType * @typedef {TransmissionTypes.ObjectType} ObjectType * * @typedef {TransmissionTypes.EnumType} EnumType * @typedef {TransmissionTypes.AnyOfType} AnyOfType * @typedef {TransmissionTypes.OneOfType} OneOfType * @typedef {TransmissionTypes.FieldType} FieldType * * @typedef {TransmissionTypes.SchemaType} SchemaType * @typedef {TransmissionTypes.ValuesType} ValuesType * @typedef {TransmissionTypes.ParamsType} ParamsType * * @typedef {TransmissionTypes.Zashiki.ArrayMetaType} ZashikiArrayMetaType * @typedef {TransmissionTypes.Zashiki.ArrayElementsType} ZashikiArrayElementsType * @typedef {TransmissionTypes.Zashiki.ArrayType} ZashikiArrayType */ import debug from 'debug' import { getTitle, getDescription, isParentUri, getMinItems, getMaxItems, getHasUniqueItems, getMinContains, getMaxContains, getMetaProps, getElementsFieldPropsForEnum, getElementsFieldPropsForAnyOf, getElementsFieldPropsForOneOf, getElementsFieldPropsForAllOf } from '#transmission/transmission/common' const log = debug('shinkansen-transmission/to-zashiki/render/array') log('`shinkansen` is awake') /** * @param {ParamsType} params * @param {string} uri * @param {{ minItems?: number }} minItems * @param {{ maxItems?: number }} maxItems * @param {{ hasUniqueItems?: boolean }} hasUniqueItems * @param {{ minContains?: number }} minContains * @param {{ maxContains?: number }} maxContains * @returns {ZashikiArrayMetaType} */ export function renderArrayMetaForEnum (params, uri, minItems, maxItems, hasUniqueItems, minContains, maxContains) { /* * log('renderArrayMetaForEnum') */ /** * @type {{ parentUri?: string }} */ const { parentUri = '#', ...metaProps } = getMetaProps(params, uri) return ( Object.assign( { uri, type: 'array' }, isParentUri(parentUri, uri) ? { parentUri } : {}, minItems, maxItems, hasUniqueItems, minContains, maxContains, metaProps ) ) } /** * @param {ParamsType} params * @param {string} uri * @param {{ minItems?: number }} minItems * @param {{ maxItems?: number }} maxItems * @param {{ hasUniqueItems?: boolean }} hasUniqueItems * @param {{ minContains?: number }} minContains * @param {{ maxContains?: number }} maxContains * @returns {ZashikiArrayMetaType} */ export function renderArrayMetaForAnyOf (params, uri, minItems, maxItems, hasUniqueItems, minContains, maxContains) { /* * log('renderArrayMetaForAnyOf') */ /** * @type {{ parentUri?: string }} */ const { parentUri = '#', ...metaProps } = getMetaProps(params, uri) return ( Object.assign( { uri, type: 'array' }, isParentUri(parentUri, uri) ? { parentUri } : {}, minItems, maxItems, hasUniqueItems, minContains, maxContains, metaProps ) ) } /** * @param {ParamsType} params * @param {string} uri * @param {{ minItems?: number }} minItems * @param {{ maxItems?: number }} maxItems * @param {{ hasUniqueItems?: boolean }} hasUniqueItems * @param {{ minContains?: number }} minContains * @param {{ maxContains?: number }} maxContains * @returns {ZashikiArrayMetaType} */ export function renderArrayMetaForOneOf (params, uri, minItems, maxItems, hasUniqueItems, minContains, maxContains) { /* * log('renderArrayMetaForOneOf') */ /** * @type {{ parentUri?: string }} */ const { parentUri = '#', ...metaProps } = getMetaProps(params, uri) return ( Object.assign( { uri, type: 'array' }, isParentUri(parentUri, uri) ? { parentUri } : {}, minItems, maxItems, hasUniqueItems, minContains, maxContains, metaProps ) ) } /** * @param {ParamsType} params * @param {string} uri * @param {{ minItems?: number }} minItems * @param {{ maxItems?: number }} maxItems * @param {{ hasUniqueItems?: boolean }} hasUniqueItems * @param {{ minContains?: number }} minContains * @param {{ maxContains?: number }} maxContains * @returns {ZashikiArrayMetaType} */ export function renderArrayMetaForAllOf (params, uri, minItems, maxItems, hasUniqueItems, minContains, maxContains) { /* * log('renderArrayMetaForAllOf') */ /** * @type {{ parentUri?: string }} */ const { parentUri = '#', ...metaProps } = getMetaProps(params, uri) return ( Object.assign( { uri, type: 'array' }, isParentUri(parentUri, uri) ? { parentUri } : {}, minItems, maxItems, hasUniqueItems, minContains, maxContains, metaProps ) ) } /** * @param {ParamsType} params * @param {string} uri * @param {{ minItems?: number }} minItems * @param {{ maxItems?: number }} maxItems * @param {{ hasUniqueItems?: boolean }} hasUniqueItems * @param {{ minContains?: number }} minContains * @param {{ maxContains?: number }} maxContains * @returns {ZashikiArrayMetaType} */ export function renderArrayMeta (params, uri, minItems, maxItems, hasUniqueItems, minContains, maxContains) { /* * log('renderArrayMeta') */ /** * @type {{ parentUri?: string }} */ const { parentUri = '#', ...metaProps } = getMetaProps(params, uri) return ( Object.assign( { uri, type: 'array' }, isParentUri(parentUri, uri) ? { parentUri } : {}, minItems, maxItems, hasUniqueItems, minContains, maxContains, metaProps ) ) } /** * @param {ObjectLiteralType | ObjectType} field * @param {ParamsType} params * @param {string} uri * @param {{ minItems?: number }} minItems * @param {{ maxItems?: number }} maxItems * @param {{ hasUniqueItems?: boolean }} hasUniqueItems * @param {{ minContains?: number }} minContains * @param {{ maxContains?: number }} maxContains * @returns {EnumType} */ export function renderArrayElementsFieldForEnum (field, params, uri, minItems, maxItems, hasUniqueItems, minContains, maxContains) { /* * log('renderArrayElementsFieldForEnum') */ const fieldProps = getElementsFieldPropsForEnum(params, uri) return ( Object.assign( field, minItems, maxItems, hasUniqueItems, minContains, maxContains, fieldProps, { id: uri } ) ) } /** * @param {ObjectLiteralType | ObjectType} field * @param {ParamsType} params * @param {string} uri * @param {{ minItems?: number }} minItems * @param {{ maxItems?: number }} maxItems * @param {{ hasUniqueItems?: boolean }} hasUniqueItems * @param {{ minContains?: number }} minContains * @param {{ maxContains?: number }} maxContains * @returns {AnyOfType} */ export function renderArrayElementsFieldForAnyOf (field, params, uri, minItems, maxItems, hasUniqueItems, minContains, maxContains) { /* * log('renderArrayElementsFieldForAnyOf') */ const fieldProps = getElementsFieldPropsForAnyOf(params, uri) return ( Object.assign( field, minItems, maxItems, hasUniqueItems, minContains, maxContains, fieldProps, { id: uri } ) ) } /** * @param {ObjectLiteralType | ObjectType} field * @param {ParamsType} params * @param {string} uri * @param {{ minItems?: number }} minItems * @param {{ maxItems?: number }} maxItems * @param {{ hasUniqueItems?: boolean }} hasUniqueItems * @param {{ minContains?: number }} minContains * @param {{ maxContains?: number }} maxContains * @returns {OneOfType} */ export function renderArrayElementsFieldForOneOf (field, params, uri, minItems, maxItems, hasUniqueItems, minContains, maxContains) { /* * log('renderArrayElementsFieldForOneOf') */ const fieldProps = getElementsFieldPropsForOneOf(params, uri) return ( Object.assign( field, minItems, maxItems, hasUniqueItems, minContains, maxContains, fieldProps, { id: uri } ) ) } /** * @param {ObjectLiteralType | ObjectType} field * @param {ParamsType} params * @param {string} uri * @param {{ minItems?: number }} minItems * @param {{ maxItems?: number }} maxItems * @param {{ hasUniqueItems?: boolean }} hasUniqueItems * @param {{ minContains?: number }} minContains * @param {{ maxContains?: number }} maxContains * @returns {FieldType} */ export function renderArrayElementsFieldForAllOf (field, params, uri, minItems, maxItems, hasUniqueItems, minContains, maxContains) { /* * log('renderArrayElementsFieldForAllOf') */ const fieldProps = getElementsFieldPropsForAllOf(params, uri) return ( Object.assign( field, minItems, maxItems, hasUniqueItems, minContains, maxContains, fieldProps, { id: uri } ) ) } /** * @param {ObjectLiteralType | ObjectType} elements * @param {SchemaType} schema * @returns {ObjectLiteralType | ObjectType} */ export function getArrayElements (elements, schema) { /* * log('getArrayElements') */ return ( Object.assign( elements, getTitle(schema), getDescription(schema) ) ) } /** * @param {SchemaType} schema * @param {ParamsType} params * @param {string} uri * @param {{ minItems?: number }} minItems * @param {{ maxItems?: number }} maxItems * @param {{ hasUniqueItems?: boolean }} hasUniqueItems * @param {{ minContains?: number }} minContains * @param {{ maxContains?: number }} maxContains * @returns {ZashikiArrayElementsType} */ export function renderArrayElementsForEnum (schema, params, uri, minItems, maxItems, hasUniqueItems, minContains, maxContains) { /* * log('renderArrayElementsForEnum') */ /** * @type {ObjectLiteralType} */ const elements = {} /** * @type {ObjectLiteralType} */ const field = {} return ( Object.assign( getArrayElements(elements, schema), { enum: renderArrayElementsFieldForEnum(field, params, uri, minItems, maxItems, hasUniqueItems, minContains, maxContains) } ) ) } /** * @param {SchemaType} schema * @param {ParamsType} params * @param {string} uri * @param {{ minItems?: number }} minItems * @param {{ maxItems?: number }} maxItems * @param {{ hasUniqueItems?: boolean }} hasUniqueItems * @param {{ minContains?: number }} minContains * @param {{ maxContains?: number }} maxContains * @returns {ZashikiArrayElementsType} */ export function renderArrayElementsForAnyOf (schema, params, uri, minItems, maxItems, hasUniqueItems, minContains, maxContains) { /* * log('renderArrayElementsForAnyOf') */ /** * @type {ObjectLiteralType} */ const elements = {} /** * @type {ObjectLiteralType} */ const field = {} return ( Object.assign( getArrayElements(elements, schema), { anyOf: renderArrayElementsFieldForAnyOf(field, params, uri, minItems, maxItems, hasUniqueItems, minContains, maxContains) } ) ) } /** * @param {SchemaType} schema * @param {ParamsType} params * @param {string} uri * @param {{ minItems?: number }} minItems * @param {{ maxItems?: number }} maxItems * @param {{ hasUniqueItems?: boolean }} hasUniqueItems * @param {{ minContains?: number }} minContains * @param {{ maxContains?: number }} maxContains * @returns {ZashikiArrayElementsType} */ export function renderArrayElementsForOneOf (schema, params, uri, minItems, maxItems, hasUniqueItems, minContains, maxContains) { /* * log('renderArrayElementsForOneOf') */ /** * @type {ObjectLiteralType} */ const elements = {} /** * @type {ObjectLiteralType} */ const field = {} return ( Object.assign( getArrayElements(elements, schema), { oneOf: renderArrayElementsFieldForOneOf(field, params, uri, minItems, maxItems, hasUniqueItems, minContains, maxContains) } ) ) } /** * @param {SchemaType} schema * @param {ParamsType} params * @param {string} uri * @param {{ minItems?: number }} minItems * @param {{ maxItems?: number }} maxItems * @param {{ hasUniqueItems?: boolean }} hasUniqueItems * @param {{ minContains?: number }} minContains * @param {{ maxContains?: number }} maxContains * @returns {ZashikiArrayElementsType} */ export function renderArrayElementsForAllOf (schema, params, uri, minItems, maxItems, hasUniqueItems, minContains, maxContains) { /* * log('renderArrayElementsForAllOf') */ /** * @type {ObjectLiteralType} */ const elements = {} /** * @type {ObjectLiteralType} */ const field = {} return ( Object.assign( getArrayElements(elements, schema), { field: renderArrayElementsFieldForAllOf(field, params, uri, minItems, maxItems, hasUniqueItems, minContains, maxContains) } ) ) } /** * @param {SchemaType} schema * @param {ParamsType} params * @returns {ZashikiArrayElementsType} */ export function renderArrayElements (schema, params) { /* * log('renderArrayElements') */ /** * @type {ObjectLiteralType} */ const elements = {} const { fields = [] } = params return ( Object.assign( getArrayElements(elements, schema), { fields } ) ) } /** * "enum" * * @param {SchemaType} schema * @param {ValuesType} values * @param {ParamsType} params * @returns {ZashikiArrayType} */ export function renderArrayForEnum (schema, values, params) { /* * log('renderArrayForEnum') */ const { uri = '#/' } = params const minItems = getMinItems(schema) const maxItems = getMaxItems(schema) const hasUniqueItems = getHasUniqueItems(schema) const maxContains = getMaxContains(schema) const minContains = getMinContains(schema) const meta = renderArrayMetaForEnum(params, uri, minItems, maxItems, hasUniqueItems, minContains, maxContains) const elements = renderArrayElementsForEnum(schema, params, uri, minItems, maxItems, hasUniqueItems, minContains, maxContains) return { meta, elements } } /** * "anyOf" * * @param {SchemaType} schema * @param {ValuesType} values * @param {ParamsType} params * @returns {ZashikiArrayType} */ export function renderArrayForAnyOf (schema, values, params) { /* * log('renderArrayForAnyOf') */ const { uri = '#/' } = params const minItems = getMinItems(schema) const maxItems = getMaxItems(schema) const hasUniqueItems = getHasUniqueItems(schema) const maxContains = getMaxContains(schema) const minContains = getMinContains(schema) const meta = renderArrayMetaForAnyOf(params, uri, minItems, maxItems, hasUniqueItems, minContains, maxContains) const elements = renderArrayElementsForAnyOf(schema, params, uri, minItems, maxItems, hasUniqueItems, minContains, maxContains) return { meta, elements } } /** * "oneOf" * * @param {SchemaType} schema * @param {ValuesType} values * @param {ParamsType} params * @returns {ZashikiArrayType} */ export function renderArrayForOneOf (schema, values, params) { /* * log('renderArrayForOneOf') */ const { uri = '#/' } = params const minItems = getMinItems(schema) const maxItems = getMaxItems(schema) const hasUniqueItems = getHasUniqueItems(schema) const maxContains = getMaxContains(schema) const minContains = getMinContains(schema) const meta = renderArrayMetaForOneOf(params, uri, minItems, maxItems, hasUniqueItems, minContains, maxContains) const elements = renderArrayElementsForOneOf(schema, params, uri, minItems, maxItems, hasUniqueItems, minContains, maxContains) return { meta, elements } } /** * "allOf" * * @param {SchemaType} schema * @param {ValuesType} values * @param {ParamsType} params * @returns {ZashikiArrayType} */ export function renderArrayForAllOf (schema, values, params) { /* * log('renderArrayForAllOf') */ const { uri = '#/' } = params const minItems = getMinItems(schema) const maxItems = getMaxItems(schema) const hasUniqueItems = getHasUniqueItems(schema) const maxContains = getMaxContains(schema) const minContains = getMinContains(schema) const meta = renderArrayMetaForAllOf(params, uri, minItems, maxItems, hasUniqueItems, minContains, maxContains) const elements = renderArrayElementsForAllOf(schema, params, uri, minItems, maxItems, hasUniqueItems, minContains, maxContains) return { meta, elements } } /** * @param {SchemaType} schema * @param {ValuesType} values * @param {ParamsType} params * @returns {ZashikiArrayType} */ export function renderArray (schema, values, params) { /* * log('renderArray') */ const { uri = '#/' } = params const minItems = getMinItems(schema) const maxItems = getMaxItems(schema) const hasUniqueItems = getHasUniqueItems(schema) const maxContains = getMaxContains(schema) const minContains = getMinContains(schema) const meta = renderArrayMeta(params, uri, minItems, maxItems, hasUniqueItems, minContains, maxContains) const elements = renderArrayElements(schema, params) return { meta, elements } }