UNPKG

9.99 kBJavaScriptView Raw
1"use strict";
2var __importDefault = (this && this.__importDefault) || function (mod) {
3 return (mod && mod.__esModule) ? mod : { "default": mod };
4};
5Object.defineProperty(exports, "__esModule", { value: true });
6const types_1 = __importDefault(require("../types"));
7const datalayer_libs_1 = require("./datalayer-libs");
8const middleware_component_1 = __importDefault(require("../middleware/middleware-component"));
9const graphql_1 = require("graphql");
10exports.ENTRY_INSTANCE_TYPE = "EntryComponent";
11;
12exports.createEntryProps = (props) => {
13 const entryProps = {
14 createEntryFields: () => {
15 const fields = Object.keys(props.data).reduce((result, key) => {
16 result[key] = { type: props.data[key] };
17 return result;
18 }, {});
19 if (props.primaryKey) {
20 fields[props.primaryKey] = { type: graphql_1.GraphQLString };
21 }
22 if (props.rangeKey) {
23 fields[props.rangeKey] = { type: graphql_1.GraphQLString };
24 }
25 return fields;
26 },
27 createEntryType: (prefix) => {
28 return new graphql_1.GraphQLObjectType({
29 name: prefix + props.id,
30 fields: () => entryProps.createEntryFields()
31 });
32 },
33 createKeyArgs: () => {
34 const args = {};
35 if (props.primaryKey) {
36 args[props.primaryKey] = { name: props.primaryKey, type: graphql_1.GraphQLString };
37 }
38 if (props.rangeKey) {
39 args[props.rangeKey] = { name: props.rangeKey, type: graphql_1.GraphQLString };
40 }
41 return args;
42 },
43 createEntryArgs: () => {
44 const args = Object.keys(props.data).reduce((result, key) => {
45 result[key] = { name: key, type: graphql_1.GraphQLString };
46 return result;
47 }, {});
48 if (props.primaryKey) {
49 args[props.primaryKey] = { name: props.primaryKey, type: graphql_1.GraphQLString };
50 }
51 if (props.rangeKey) {
52 args[props.rangeKey] = { name: props.rangeKey, type: graphql_1.GraphQLString };
53 }
54 return args;
55 },
56 getEntryListQuery: (dictKey) => {
57 const fields = entryProps.createEntryFields();
58 //console.log("fields: ", fields);
59 return datalayer_libs_1.getEntryListQuery(props.id, dictKey, fields);
60 },
61 getEntryQuery: (dictKey) => {
62 const fields = entryProps.createEntryFields();
63 //console.log("fields: ", fields);
64 return datalayer_libs_1.getEntryQuery(props.id, dictKey, fields);
65 },
66 getEntryScanQuery: (dictKey) => {
67 const fields = entryProps.createEntryFields();
68 //console.log("fields: ", fields);
69 return datalayer_libs_1.getEntryScanQuery(props.id, dictKey, fields);
70 },
71 setEntryMutation: (values) => {
72 const fields = entryProps.createEntryFields();
73 //console.log("fields: ", fields);
74 return datalayer_libs_1.setEntryMutation(props.id, values, fields);
75 },
76 setEntry: (args, context, tableName, isOffline) => {
77 //console.log("setEntry: ", args, "offline: ", isOffline);
78 return datalayer_libs_1.setEntry(tableName, //"code-architect-dev-data-layer",
79 props.primaryKey, // schema.Entry.ENTITY, //pkEntity
80 args[props.primaryKey], // pkId
81 props.rangeKey, //schema.Data.ENTITY, // skEntity
82 args[props.rangeKey], // skId
83 Object.keys(args).reduce((result, key) => {
84 if (Object.keys(props.data).find(datakey => datakey === key) !== undefined) {
85 result[key] = args[key];
86 }
87 return result;
88 }, {}), // jsonData
89 isOffline // do we run offline?
90 );
91 },
92 listEntries: (args, context, tableName, key, isOffline) => {
93 const entity = key === "pk" ? props.primaryKey : props.rangeKey;
94 const range = key === "pk" ? props.rangeKey : props.primaryKey;
95 //console.log("listEntries: offline? ", isOffline)
96 return datalayer_libs_1.ddbListEntries(tableName, //tablename
97 key, // key
98 entity, //entity
99 args[entity], //value
100 range, //rangeEntity
101 isOffline).then(results => {
102 //console.log("promised: ", results);
103 return results.map(item => {
104 const data = item.jsonData !== undefined ? JSON.parse(item.jsonData) : {};
105 data[props.primaryKey] = item.pk.substring(item.pk.indexOf("|") + 1);
106 data[props.rangeKey] = item.sk.substring(item.sk.indexOf("|") + 1);
107 return data;
108 });
109 });
110 },
111 getEntry: (args, context, tableName, isOffline) => {
112 return datalayer_libs_1.ddbGetEntry(tableName, //tablename
113 props.primaryKey, // pkEntity,
114 args[props.primaryKey], // pkValue,
115 props.rangeKey, // skEntity,
116 args[props.rangeKey], // skValue
117 isOffline).then((result) => {
118 //console.log("entry-component getEntry result: ", result);
119 const data = result.jsonData !== undefined ? JSON.parse(result.jsonData) : {};
120 if (result && result.pk && result.sk) {
121 data[props.primaryKey] = result.pk.substring(result.pk.indexOf("|") + 1);
122 data[props.rangeKey] = result.sk.substring(result.sk.indexOf("|") + 1);
123 }
124 return data;
125 });
126 },
127 scan: (args, context, tableName, key, isOffline) => {
128 //console.log("scan entry! ", args, "offline: ", isOffline)
129 return datalayer_libs_1.ddbScan(tableName, //tablename
130 key, // key
131 key === "pk" ? props.primaryKey : props.rangeKey, // pkEntity,
132 args.scanall ? undefined : args[`start_${key === "pk" ? props.primaryKey : props.rangeKey}`], // start_value,
133 args.scanall ? undefined : args[`end_${key === "pk" ? props.primaryKey : props.rangeKey}`], // end_Value,
134 key === "pk" ? props.rangeKey : props.primaryKey, // skEntity,
135 isOffline).then((result) => {
136 //console.log("entry-component scan result: ", result);
137 return result.map(entry => {
138 //console.log("scanned entry: ", entry);
139 const data = entry.jsonData !== undefined ? JSON.parse(entry.jsonData) : {};
140 if (entry && entry.pk && entry.sk) {
141 data[props.primaryKey] = entry.pk.substring(entry.pk.indexOf("|") + 1);
142 data[props.rangeKey] = entry.sk.substring(entry.sk.indexOf("|") + 1);
143 }
144 //console.log("returned data: ", data);
145 return data;
146 });
147 });
148 },
149 deleteEntryMutation: (values) => {
150 const fields = entryProps.createEntryFields();
151 //const fields = entryProps.createEntryFields();
152 //console.log("fields: ", fields);
153 return datalayer_libs_1.deleteEntryMutation(props.id, values, fields);
154 },
155 deleteEntry: (args, context, tableName, isOffline) => {
156 return datalayer_libs_1.deleteEntry(tableName, //"code-architect-dev-data-layer",
157 props.primaryKey, // schema.Entry.ENTITY, //pkEntity
158 args[props.primaryKey], // pkId
159 props.rangeKey, //schema.Data.ENTITY, // skEntity
160 args[props.rangeKey], // skId
161 isOffline);
162 },
163 middleware: middleware_component_1.default({ callback: (req, res, next) => {
164 //console.log("this is the mw of the entry: ", props.id)
165 return next();
166 } }),
167 getPrimaryListQueryName: () => "list_" + props.id + "_" + props.primaryKey,
168 getRangeListQueryName: () => "list_" + props.id + "_" + props.rangeKey,
169 getGetQueryName: () => "get_" + props.id,
170 getSetMutationName: () => "set_" + props.id,
171 getDeleteMutationName: () => "delete_" + props.id,
172 getPrimaryScanName: () => "scan_" + props.id + "_" + props.primaryKey,
173 getRangeScanName: () => "scan_" + props.id + "_" + props.rangeKey,
174 getScanName: () => "scan_" + props.id,
175 /**
176 * Returns whether this entry provides the query/mutation with the specified name
177 * @param name
178 */
179 providesQuery: (name) => {
180 const result = name === entryProps.getPrimaryListQueryName() ||
181 name === entryProps.getRangeListQueryName() ||
182 name === entryProps.getSetMutationName() ||
183 name === entryProps.getDeleteMutationName() ||
184 name === entryProps.getPrimaryScanName() ||
185 name === entryProps.getRangeScanName() ||
186 name === entryProps.getScanName();
187 //console.log("does ", props.id , " provide ", name, "? ", result)
188 return result;
189 }
190 };
191 return Object.assign({}, props, entryProps);
192};
193/**
194 * an entry specifies a kind of data that can be stored in a line of the table
195 */
196exports.default = (props) => {
197 // the component must have the properties of IComponent
198 const componentProps = {
199 infrastructureType: types_1.default.INFRASTRUCTURE_TYPE_COMPONENT,
200 instanceType: exports.ENTRY_INSTANCE_TYPE,
201 instanceId: props.id
202 };
203 return exports.createEntryProps(Object.assign({}, props, componentProps));
204};
205exports.isEntry = (component) => {
206 return component !== undefined && component.instanceType === exports.ENTRY_INSTANCE_TYPE;
207};
208//# sourceMappingURL=entry-component.js.map
\No newline at end of file