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 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 | 1x 1x 1x 38x 38x 35x 35x 35x 35x 31x 35x 32x 4x 3x 11x 18x 14x 11x 11x 11x 24x 25x 24x 17x 24x 24x 11x 18x 11x 4x 7x 1x | const _ = require('lodash')
const chalk = require('chalk')
const {
ObjectIdField,
FieldFromKeyValue,
FieldFromFieldDefinition,
ObjectIdFieldFromDefinition
} = require('./field-classes')
class Fields {
static normalizeOptions (inputOptions) {
const {
features,
metadata: {
fields,
idField
} = {},
attributeSample,
...options
} = inputOptions
return {
idField: options.idField || idField,
fieldDefinitions: options.fieldDefinitions || options.fields || fields,
attributeSample: attributeSample || getAttributeSample(features, attributeSample),
...options
}
}
constructor (options = {}) {
const {
fieldDefinitions,
idField,
attributeSample = {}
} = options
Iif (shouldWarnAboutMissingIdFieldDefinition(idField, fieldDefinitions)) {
console.warn(
chalk.yellow(`WARNING: provider's "idField" is set to ${idField}, but this field is not found in field-definitions`)
)
}
const normalizedIdField = idField || 'OBJECTID'
this.fields = fieldDefinitions
? setFieldsFromDefinitions(fieldDefinitions, normalizedIdField)
: setFieldsFromProperties(attributeSample, normalizedIdField)
}
}
function getAttributeSample (features) {
return _.get(features, '[0].properties') || _.get(features, '[0].attributes', {})
}
function shouldWarnAboutMissingIdFieldDefinition (idField, fieldDefinitions) {
if (!idField || !fieldDefinitions) {
return
}
const fieldNames = fieldDefinitions.map(field => field.name)
return !fieldNames.includes(idField)
}
function setFieldsFromDefinitions (fieldDefinitions, idField) {
const fields = fieldDefinitions
.filter(fieldDefinition => fieldDefinition.name !== idField)
.map(fieldDefinition => {
return new FieldFromFieldDefinition(fieldDefinition)
})
const idFieldDefinition = getIdFieldDefinition(fieldDefinitions, idField)
fields.unshift(new ObjectIdFieldFromDefinition(idFieldDefinition))
return fields
}
function setFieldsFromProperties (propertiesSample, idField) {
const fieldNames = Object.keys(propertiesSample)
const simpleFieldNames = fieldNames.filter(name => name !== idField)
const fields = simpleFieldNames.map((key) => {
return new FieldFromKeyValue(key, propertiesSample[key])
})
fields.unshift(new ObjectIdField(idField))
return fields
}
function getIdFieldDefinition (fieldDefinitions, idField) {
const idFieldDefinition = fieldDefinitions.find(definition => {
return definition.name === idField
})
if (idFieldDefinition) {
return idFieldDefinition
}
return { name: 'OBJECTID' }
}
module.exports = Fields
|