UNPKG

@blessingefkt/fibery-pipedream-integration

Version:

Pipedream is a platform for running hosted, backend components. An HTTP Event Source is essentially a [RequestBin](https://requestbin.com) that can be managed via API.

173 lines (157 loc) 6.35 kB
const FIBERY_META = { complexTypes: [ "fibery/file", "Collaboration~Documents/Document" ], standardFields: [ 'fibery/id', 'fibery/public-id', 'fibery/creation-date', 'fibery/url', 'fibery/type', ], hiddenTypes: [ "Collaboration~Documents/Reference" ], invalidFieldNames: [ "fibery/id", "fibery/rank", "fibery/public-id" ], validFieldNames: [ "workflow/state", "Files/Files" ] }; const uniqueArray = (values) => Array.from(new Set(values)); function getDefaultFieldNames(fields) { return (fields || []) .filter(f => f['fibery/type'] === 'fibery/url' || (f['fibery/meta'] && f['fibery/meta']['ui/title?']) || FIBERY_META.standardFields.includes(f['fibery/name']) ) .map(f => f['fibery/name']) } function appendSelects(schema, typeNameOrId, fieldNames) { console.debug('appendSelects for', typeNameOrId, !!schema[typeNameOrId]); const typeFields = schema[typeNameOrId]['fibery/fields']; const selects = getDefaultFieldNames(typeFields); typeFields .filter(fibField => fieldNames.includes(fibField['fibery/name']) || FIBERY_META.standardFields.includes(fibField['fibery/name'])) .map(fibField => { const fieldName = fibField['fibery/name']; const fieldTypeName = fibField['fibery/type']; const fieldType = schema[fieldTypeName]; const typeMeta = fieldType['fibery/meta'] || {}; const fieldMeta = fibField['fibery/meta'] || {}; // console.debug('FIELD', fieldName, fibField['fibery/id'], fibField); const isComplexType = FIBERY_META.complexTypes.some(t => t === fieldTypeName || fieldTypeName.startsWith(t)); const isEnum = typeMeta['fibery/enum?']; const isFileType = fieldTypeName === 'fibery/file'; const isPrimitive = typeMeta['fibery/primitive?']; const isRelation = fieldMeta['fibery/relation']; const isCollection = fieldMeta['fibery/collection?']; // console.debug('FIELD', fieldName, { // isPrimitive, // isComplexType, // isRelation, // isCollection, // isEnum, // typeMeta, // fieldMeta // }); if (isPrimitive) { selects.push(fieldName); } else if (!fieldTypeName.endsWith('/Reference')) { const fields = []; if (isFileType) { fields.push(...fieldType['fibery/fields'].map(f => f['fibery/name'])); } if (isEnum) { fields.push(...fieldType['fibery/fields'].map(f => f['fibery/name']).filter(f => f.startsWith('enum/'))) } if (isRelation) { fields.push(...getDefaultFieldNames(fieldType['fibery/fields'])); } if (isComplexType) { fields.push(fieldTypeName.split('/', 2)[0] + "/secret") } if (fields.length > 0) selects.push({ [fieldName]: isCollection ? { "q/select": uniqueArray(fields), "q/limit": 'q/no-limit', } : uniqueArray(fields) }) } }); return uniqueArray(selects); } module.exports.uniqueArray = uniqueArray; module.exports.getSchemaMap = function getSchemaMap(schema) { return Array.from(schema).reduce( (schemaMap, _type) => { const name = _type['fibery/name']; schemaMap[name] = _type; return schemaMap; }, {} ); } module.exports.getQueryObject = function getQueryObject(schemaMap, typeNameOrId, {fields, dateFields, limit, lastMaxTimestamp}) { const type = schemaMap[typeNameOrId]; const fieldNames = fields .map(value => { if (String(value).includes('/')) return value; if (typeof value === 'object') return value.label; const field = type['fibery/fields'].find(f => f['fibery/id'] === value); return field ? field['fibery/name'] : null; }) .filter(value => !!value); const selectedFields = appendSelects(schemaMap, typeNameOrId, fieldNames); const queryObject = { query: { 'q/from': type['fibery/name'], 'q/select': Array.from(selectedFields), 'q/limit': limit > 0 ? limit : 'q/no-limit' }, params: {}, }; if (dateFields && lastMaxTimestamp) { queryObject.params['$lastMaxTimestamp'] = lastMaxTimestamp; queryObject.query['q/order-by'] = dateFields.map(dateField => [[dateField], 'q/asc']); if (dateFields.length > 1) queryObject.query['q/where'] = ['q/or'] .concat(dateFields.map(dateField => ['>', [dateField], '$lastMaxTimestamp'])); else queryObject.query['q/where'] = ['>', dateFields, '$lastMaxTimestamp']; } return queryObject; } module.exports.getRelatedFields = function getRelatedFields(fields) { return (fields || []) .filter(f => !f['fibery/meta']['fibery/relation'] && !FIBERY_META.standardFields.includes(f['fibery/name']) && ( f['fibery/name'].startsWith('fibery/') || FIBERY_META.complexTypes.includes(f['fibery/type']) )); } module.exports.getSimpleFields = function getSimpleFields(fields) { return (fields || []) .filter(f => !FIBERY_META.hiddenTypes.includes(f['fibery/type']) && !FIBERY_META.invalidFieldNames.includes(f['fibery/name']) && ( FIBERY_META.validFieldNames.includes(f['fibery/name']) || f['fibery/name'].startsWith('fibery/') || f['fibery/meta']['fibery/collection?'] || f['fibery/meta']['fibery/relation'] || FIBERY_META.complexTypes.includes(f['fibery/type']) )); } module.exports.isHiddenType = function (name) { return FIBERY_META.hiddenTypes.includes(name); }