All files / lib relationships-info-route-handler.js

26.31% Statements 5/19
0% Branches 0/21
0% Functions 0/4
26.31% Lines 5/19

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 881x             1x     1x 1x   1x                                                                                                                                                    
const _ = require('lodash')
const {
  calculateExtent,
  getGeometryTypeFromGeojson,
  getSpatialReference,
  normalizeExtent,
  normalizeInputData
} = require('./helpers')
const {
  LayerFields
} = require('./helpers/fields')
const { layerMetadata: layerMetadataDefaults, renderers: rendererDefaults } = require('./defaults')
 
module.exports = function relationshipsMetadata (providerResponse, queryParams = {}) {
  const { layers: layersInput, tables: tablesInput } = normalizeInputData(providerResponse)
 
  const layers = layersInput.map((layer, i) => {
    return formatResponse(layer, { queryParams, layerId: i, isLayer: true })
  })
 
  const tables = tablesInput.map((table, i) => {
    return formatResponse(table, { queryParams, layerId: layers.length + i })
  })
 
  return { layers, tables }
}
 
function formatResponse (geojson = {}, options = {}) {
  const { layerId, isLayer, queryParams } = options
 
  const {
    metadata = {},
    capabilities: {
      quantization,
      extract
    } = {}
  } = geojson
 
  const {
    id,
    name,
    description,
    idField,
    displayField,
    timeInfo,
    maxRecordCount,
    renderer,
    defaultVisibility,
    minScale,
    maxScale,
    hasStaticData
  } = metadata
  const geometryType = isLayer ? getGeometryTypeFromGeojson(geojson) : undefined
  const spatialReference = getSpatialReference(geojson, queryParams)
  const extent = metadata.extent ? normalizeExtent(metadata.extent, spatialReference) : calculateExtent({ isLayer, geojson, spatialReference })
 
  const json = {
    id: id || layerId,
    fields: LayerFields.create({ ...geojson, ...queryParams }) || [],
    type: isLayer ? 'Feature Layer' : 'Table',
    geometryType,
    drawingInfo: {
      renderer: renderer || rendererDefaults[geometryType],
      labelingInfo: null
    },
    spatialReference,
    extent,
    defaultVisibility,
    minScale,
    maxScale,
    quantization,
    extract,
    hasStaticData,
    name,
    description,
    objectIdField: idField,
    displayField: displayField || idField,
    uniqueIdField: idField,
    timeInfo,
    maxRecordCount,
    supportsCoordinatesQuantization: !!quantization
  }
 
  return _.defaults(json, {
    capabilities: extract ? `${layerMetadataDefaults.capabilities},Extract` : layerMetadataDefaults.capabilities
  }, layerMetadataDefaults)
}