UNPKG

infrastructure-components

Version:

Infrastructure-Components configure the infrastructure of your React-App as part of your React-Components.

208 lines • 9.99 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); const types_1 = __importDefault(require("../types")); const datalayer_libs_1 = require("./datalayer-libs"); const middleware_component_1 = __importDefault(require("../middleware/middleware-component")); const graphql_1 = require("graphql"); exports.ENTRY_INSTANCE_TYPE = "EntryComponent"; ; exports.createEntryProps = (props) => { const entryProps = { createEntryFields: () => { const fields = Object.keys(props.data).reduce((result, key) => { result[key] = { type: props.data[key] }; return result; }, {}); if (props.primaryKey) { fields[props.primaryKey] = { type: graphql_1.GraphQLString }; } if (props.rangeKey) { fields[props.rangeKey] = { type: graphql_1.GraphQLString }; } return fields; }, createEntryType: (prefix) => { return new graphql_1.GraphQLObjectType({ name: prefix + props.id, fields: () => entryProps.createEntryFields() }); }, createKeyArgs: () => { const args = {}; if (props.primaryKey) { args[props.primaryKey] = { name: props.primaryKey, type: graphql_1.GraphQLString }; } if (props.rangeKey) { args[props.rangeKey] = { name: props.rangeKey, type: graphql_1.GraphQLString }; } return args; }, createEntryArgs: () => { const args = Object.keys(props.data).reduce((result, key) => { result[key] = { name: key, type: graphql_1.GraphQLString }; return result; }, {}); if (props.primaryKey) { args[props.primaryKey] = { name: props.primaryKey, type: graphql_1.GraphQLString }; } if (props.rangeKey) { args[props.rangeKey] = { name: props.rangeKey, type: graphql_1.GraphQLString }; } return args; }, getEntryListQuery: (dictKey) => { const fields = entryProps.createEntryFields(); //console.log("fields: ", fields); return datalayer_libs_1.getEntryListQuery(props.id, dictKey, fields); }, getEntryQuery: (dictKey) => { const fields = entryProps.createEntryFields(); //console.log("fields: ", fields); return datalayer_libs_1.getEntryQuery(props.id, dictKey, fields); }, getEntryScanQuery: (dictKey) => { const fields = entryProps.createEntryFields(); //console.log("fields: ", fields); return datalayer_libs_1.getEntryScanQuery(props.id, dictKey, fields); }, setEntryMutation: (values) => { const fields = entryProps.createEntryFields(); //console.log("fields: ", fields); return datalayer_libs_1.setEntryMutation(props.id, values, fields); }, setEntry: (args, context, tableName, isOffline) => { //console.log("setEntry: ", args, "offline: ", isOffline); return datalayer_libs_1.setEntry(tableName, //"code-architect-dev-data-layer", props.primaryKey, // schema.Entry.ENTITY, //pkEntity args[props.primaryKey], // pkId props.rangeKey, //schema.Data.ENTITY, // skEntity args[props.rangeKey], // skId Object.keys(args).reduce((result, key) => { if (Object.keys(props.data).find(datakey => datakey === key) !== undefined) { result[key] = args[key]; } return result; }, {}), // jsonData isOffline // do we run offline? ); }, listEntries: (args, context, tableName, key, isOffline) => { const entity = key === "pk" ? props.primaryKey : props.rangeKey; const range = key === "pk" ? props.rangeKey : props.primaryKey; //console.log("listEntries: offline? ", isOffline) return datalayer_libs_1.ddbListEntries(tableName, //tablename key, // key entity, //entity args[entity], //value range, //rangeEntity isOffline).then(results => { //console.log("promised: ", results); return results.map(item => { const data = item.jsonData !== undefined ? JSON.parse(item.jsonData) : {}; data[props.primaryKey] = item.pk.substring(item.pk.indexOf("|") + 1); data[props.rangeKey] = item.sk.substring(item.sk.indexOf("|") + 1); return data; }); }); }, getEntry: (args, context, tableName, isOffline) => { return datalayer_libs_1.ddbGetEntry(tableName, //tablename props.primaryKey, // pkEntity, args[props.primaryKey], // pkValue, props.rangeKey, // skEntity, args[props.rangeKey], // skValue isOffline).then((result) => { //console.log("entry-component getEntry result: ", result); const data = result.jsonData !== undefined ? JSON.parse(result.jsonData) : {}; if (result && result.pk && result.sk) { data[props.primaryKey] = result.pk.substring(result.pk.indexOf("|") + 1); data[props.rangeKey] = result.sk.substring(result.sk.indexOf("|") + 1); } return data; }); }, scan: (args, context, tableName, key, isOffline) => { //console.log("scan entry! ", args, "offline: ", isOffline) return datalayer_libs_1.ddbScan(tableName, //tablename key, // key key === "pk" ? props.primaryKey : props.rangeKey, // pkEntity, args.scanall ? undefined : args[`start_${key === "pk" ? props.primaryKey : props.rangeKey}`], // start_value, args.scanall ? undefined : args[`end_${key === "pk" ? props.primaryKey : props.rangeKey}`], // end_Value, key === "pk" ? props.rangeKey : props.primaryKey, // skEntity, isOffline).then((result) => { //console.log("entry-component scan result: ", result); return result.map(entry => { //console.log("scanned entry: ", entry); const data = entry.jsonData !== undefined ? JSON.parse(entry.jsonData) : {}; if (entry && entry.pk && entry.sk) { data[props.primaryKey] = entry.pk.substring(entry.pk.indexOf("|") + 1); data[props.rangeKey] = entry.sk.substring(entry.sk.indexOf("|") + 1); } //console.log("returned data: ", data); return data; }); }); }, deleteEntryMutation: (values) => { const fields = entryProps.createEntryFields(); //const fields = entryProps.createEntryFields(); //console.log("fields: ", fields); return datalayer_libs_1.deleteEntryMutation(props.id, values, fields); }, deleteEntry: (args, context, tableName, isOffline) => { return datalayer_libs_1.deleteEntry(tableName, //"code-architect-dev-data-layer", props.primaryKey, // schema.Entry.ENTITY, //pkEntity args[props.primaryKey], // pkId props.rangeKey, //schema.Data.ENTITY, // skEntity args[props.rangeKey], // skId isOffline); }, middleware: middleware_component_1.default({ callback: (req, res, next) => { //console.log("this is the mw of the entry: ", props.id) return next(); } }), getPrimaryListQueryName: () => "list_" + props.id + "_" + props.primaryKey, getRangeListQueryName: () => "list_" + props.id + "_" + props.rangeKey, getGetQueryName: () => "get_" + props.id, getSetMutationName: () => "set_" + props.id, getDeleteMutationName: () => "delete_" + props.id, getPrimaryScanName: () => "scan_" + props.id + "_" + props.primaryKey, getRangeScanName: () => "scan_" + props.id + "_" + props.rangeKey, getScanName: () => "scan_" + props.id, /** * Returns whether this entry provides the query/mutation with the specified name * @param name */ providesQuery: (name) => { const result = name === entryProps.getPrimaryListQueryName() || name === entryProps.getRangeListQueryName() || name === entryProps.getSetMutationName() || name === entryProps.getDeleteMutationName() || name === entryProps.getPrimaryScanName() || name === entryProps.getRangeScanName() || name === entryProps.getScanName(); //console.log("does ", props.id , " provide ", name, "? ", result) return result; } }; return Object.assign({}, props, entryProps); }; /** * an entry specifies a kind of data that can be stored in a line of the table */ exports.default = (props) => { // the component must have the properties of IComponent const componentProps = { infrastructureType: types_1.default.INFRASTRUCTURE_TYPE_COMPONENT, instanceType: exports.ENTRY_INSTANCE_TYPE, instanceId: props.id }; return exports.createEntryProps(Object.assign({}, props, componentProps)); }; exports.isEntry = (component) => { return component !== undefined && component.instanceType === exports.ENTRY_INSTANCE_TYPE; }; //# sourceMappingURL=entry-component.js.map