UNPKG

@digifi-los/reactapp

Version:
95 lines (91 loc) 5.02 kB
'use strict'; const periodic = require('periodicjs'); const pluralize = require('pluralize'); const helpers = require('./helpers'); const containers = require('./containers'); const mockSchemas = require('./schema/mock_schemas'); const JSONDictionary = require('./schema/dictionary'); const flatten = require('flat'); function generateManifestsFromCoreData(options = {}) { const extsettings = periodic.settings.extensions['@digifi-los/reactapp']; const adminRoute = options.customAdminRoute || helpers.getManifestPathPrefix(extsettings.adminPath); const { indexOptions, newOptions, showOptions, schema, schemaName, allSchemas, detailOptions, } = options; // options.extsettings = extsettings; options.adminRoute = adminRoute; return { [helpers.getContainerPath(options)]: containers.constructIndex({ schema, schemaName, allSchemas, adminRoute, indexOptions, extsettings, }), [`${helpers.getContainerPath(options)}/new`]: containers.constructDetail({ schema, schemaName, allSchemas, adminRoute, detailOptions, newEntity: true, extsettings, }), [`${helpers.getContainerPath(options)}/:id`]: containers.constructDetail({ schema, schemaName, allSchemas, adminRoute, detailOptions, extsettings, }), }; } function generateCoreDataManifests(options = {}) { const Sequelize = require('sequelize'); const allSchemas = Array.from(periodic.models.keys()).reduce((result, key) => { let modelSchema = periodic.models.get(key).scheme; if ((modelSchema._id && modelSchema._id.primaryKey) || (modelSchema._id && modelSchema._id.type )) { modelSchema = Object.keys(modelSchema).reduce((newModelSchema, modelSchemaProp) => { if (modelSchema[ modelSchemaProp ] instanceof Sequelize.STRING || modelSchema[ modelSchemaProp ].type instanceof Sequelize.STRING || modelSchema[ modelSchemaProp ] instanceof Sequelize.TEXT || modelSchema[ modelSchemaProp ].type instanceof Sequelize.TEXT) { newModelSchema[ modelSchemaProp ] = 'String'; } else if (modelSchema[ modelSchemaProp ] instanceof Sequelize.INTEGER || modelSchema[ modelSchemaProp ].type instanceof Sequelize.INTEGER || modelSchema[ modelSchemaProp ] instanceof Sequelize.BIGINT || modelSchema[ modelSchemaProp ].type instanceof Sequelize.BIGINT || modelSchema[ modelSchemaProp ] instanceof Sequelize.FLOAT || modelSchema[ modelSchemaProp ].type instanceof Sequelize.FLOAT || modelSchema[ modelSchemaProp ] instanceof Sequelize.REAL || modelSchema[ modelSchemaProp ].type instanceof Sequelize.REAL || modelSchema[ modelSchemaProp ] instanceof Sequelize.DOUBLE || modelSchema[ modelSchemaProp ].type instanceof Sequelize.DOUBLE) { newModelSchema[ modelSchemaProp ] = 'Number'; } else if (modelSchema[ modelSchemaProp ] instanceof Sequelize.DATE || modelSchema[ modelSchemaProp ].type instanceof Sequelize.DATE || modelSchema[ modelSchemaProp ] instanceof Sequelize.DATEONLY || modelSchema[ modelSchemaProp ].type instanceof Sequelize.DATEONLY) { newModelSchema[ modelSchemaProp ] = 'Date'; } else if (modelSchema[ modelSchemaProp ] instanceof Sequelize.BOOLEAN || modelSchema[ modelSchemaProp ].type instanceof Sequelize.BOOLEAN) { newModelSchema[ modelSchemaProp ] = 'Boolean'; } else if (modelSchema[ modelSchemaProp ] instanceof Sequelize.ARRAY || modelSchema[ modelSchemaProp ].type instanceof Sequelize.ARRAY) { newModelSchema[ modelSchemaProp ] = 'Array'; } else { newModelSchema[ modelSchemaProp ] = 'String'; } return newModelSchema; }, {}); } // console.log({modelSchema}) const flattenedSchema = flatten(modelSchema, { maxDepth: 3, }); // console.log({ flattenedSchema }); for (let key in flattenedSchema) { if (JSONDictionary[ Symbol.for(flattenedSchema[ key ]) ]) { flattenedSchema[ key ] = JSONDictionary[ Symbol.for(flattenedSchema[ key ]) ]; } if (JSONDictionary[ flattenedSchema[ key ] ]) { flattenedSchema[ key ] = JSONDictionary[ flattenedSchema[ key ]]; } } // console.log({ flattenedSchema }); result[key] =flatten.unflatten(flattenedSchema); return result; }, {}); allSchemas.configuration = mockSchemas.configuration; allSchemas.extension = mockSchemas.extension; // console.log({ allSchemas }); const coreDataGeneratedContainers = Array.from(Object.keys(allSchemas)).reduce((result, key) => { return result = Object.assign(result, generateManifestsFromCoreData({ schemaName: key, schema: allSchemas[key], allSchemas, })); }, {}); // console.log({ coreDataGeneratedContainers }) return coreDataGeneratedContainers; } module.exports = { generateManifestsFromCoreData, generateCoreDataManifests, };