@subsquid/openreader 0.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (44) hide show
  1. package/README.md +34 -0
  2. package/dist/gql/opencrud.d.ts +4 -0
  3. package/dist/gql/opencrud.js +301 -0
  4. package/dist/gql/opencrud.js.map +1 -0
  5. package/dist/gql/schema.d.ts +4 -0
  6. package/dist/gql/schema.js +271 -0
  7. package/dist/gql/schema.js.map +1 -0
  8. package/dist/main.d.ts +3 -0
  9. package/dist/main.js +97 -0
  10. package/dist/main.js.map +1 -0
  11. package/dist/model.d.ts +70 -0
  12. package/dist/model.js +3 -0
  13. package/dist/model.js.map +1 -0
  14. package/dist/model.tools.d.ts +9 -0
  15. package/dist/model.tools.js +120 -0
  16. package/dist/model.tools.js.map +1 -0
  17. package/dist/orderBy.d.ts +16 -0
  18. package/dist/orderBy.js +80 -0
  19. package/dist/orderBy.js.map +1 -0
  20. package/dist/queryBuilder.d.ts +52 -0
  21. package/dist/queryBuilder.js +605 -0
  22. package/dist/queryBuilder.js.map +1 -0
  23. package/dist/relayConnection.d.ts +36 -0
  24. package/dist/relayConnection.js +43 -0
  25. package/dist/relayConnection.js.map +1 -0
  26. package/dist/requestedFields.d.ts +32 -0
  27. package/dist/requestedFields.js +172 -0
  28. package/dist/requestedFields.js.map +1 -0
  29. package/dist/resolver.d.ts +8 -0
  30. package/dist/resolver.js +142 -0
  31. package/dist/resolver.js.map +1 -0
  32. package/dist/scalars.d.ts +33 -0
  33. package/dist/scalars.js +239 -0
  34. package/dist/scalars.js.map +1 -0
  35. package/dist/server.d.ts +25 -0
  36. package/dist/server.js +119 -0
  37. package/dist/server.js.map +1 -0
  38. package/dist/util.d.ts +19 -0
  39. package/dist/util.js +89 -0
  40. package/dist/util.js.map +1 -0
  41. package/dist/where.d.ts +8 -0
  42. package/dist/where.js +96 -0
  43. package/dist/where.js.map +1 -0
  44. package/package.json +39 -0
@@ -0,0 +1,239 @@
1
+ "use strict";
2
+ /**
3
+ * The current concept of custom scalars is as follows:
4
+ *
5
+ * Each custom scalar type has canonical string representation which is used every where:
6
+ * in JSON requests/responses
7
+ * in graphql schemas
8
+ * for database io
9
+ * for intermediate resolver values
10
+ *
11
+ * Because our canonical representations are used in SQL query parameters and results,
12
+ * database must support 2 way coercions between those and underlying database types.
13
+ *
14
+ * One exception is DateTime. We receive it from database in native format (getting Date objects from driver),
15
+ * then convert it to string with gql resolver.
16
+ */
17
+ Object.defineProperty(exports, "__esModule", { value: true });
18
+ exports.fromJsonToTransportCast = exports.fromJsonCast = exports.fromTransportArrayCast = exports.toTransportArrayCast = exports.fromTransportCast = exports.toTransportCast = exports.getScalarResolvers = exports.scalars_list = exports.scalars = void 0;
19
+ const graphql_1 = require("graphql");
20
+ exports.scalars = {
21
+ BigInt: {
22
+ gql: new graphql_1.GraphQLScalarType({
23
+ name: 'BigInt',
24
+ description: 'Big number integer',
25
+ serialize(value) {
26
+ return '' + value;
27
+ },
28
+ parseValue(value) {
29
+ if (!isBigInt(value))
30
+ throw invalidFormat('BigInt', value);
31
+ return value;
32
+ },
33
+ parseLiteral(ast) {
34
+ switch (ast.kind) {
35
+ case "StringValue":
36
+ if (isBigInt(ast.value)) {
37
+ if (ast.value[0] == '+') {
38
+ return ast.value.slice(1);
39
+ }
40
+ else {
41
+ return ast.value;
42
+ }
43
+ }
44
+ else {
45
+ throw invalidFormat('BigInt', ast.value);
46
+ }
47
+ case "IntValue":
48
+ return '' + ast.value;
49
+ default:
50
+ return null;
51
+ }
52
+ }
53
+ }),
54
+ fromStringCast(exp) {
55
+ return `(${exp})::numeric`;
56
+ },
57
+ toStringCast(exp) {
58
+ return `(${exp})::text`;
59
+ },
60
+ fromStringArrayCast(exp) {
61
+ return `(${exp})::numeric[]`;
62
+ },
63
+ toStringArrayCast(exp) {
64
+ return `(${exp})::text[]`;
65
+ }
66
+ },
67
+ DateTime: {
68
+ gql: new graphql_1.GraphQLScalarType({
69
+ name: 'DateTime',
70
+ description: 'A date-time string in simplified extended ISO 8601 format (YYYY-MM-DDTHH:mm:ss.sssZ)',
71
+ serialize(value) {
72
+ if (value instanceof Date) {
73
+ return value.toISOString();
74
+ }
75
+ else {
76
+ if (!isIsoDateTimeString(value))
77
+ throw invalidFormat('DateTime', value);
78
+ return value;
79
+ }
80
+ },
81
+ parseValue(value) {
82
+ return parseDateTime(value);
83
+ },
84
+ parseLiteral(ast) {
85
+ switch (ast.kind) {
86
+ case "StringValue":
87
+ return parseDateTime(ast.value);
88
+ default:
89
+ return null;
90
+ }
91
+ }
92
+ }),
93
+ fromStringCast(exp) {
94
+ return `(${exp})::timestamptz`;
95
+ },
96
+ toStringCast(exp) {
97
+ return exp;
98
+ },
99
+ fromStringArrayCast(exp) {
100
+ return `(${exp})::timestamptz[]`;
101
+ },
102
+ toStringArrayCast(exp) {
103
+ return exp;
104
+ }
105
+ },
106
+ Bytes: {
107
+ gql: new graphql_1.GraphQLScalarType({
108
+ name: 'Bytes',
109
+ description: 'Binary data encoded as a hex string always prefixed with 0x',
110
+ serialize(value) {
111
+ if (!isBytesString(value))
112
+ throw invalidFormat('Bytes', value);
113
+ return value.toLowerCase();
114
+ },
115
+ parseValue(value) {
116
+ return parseBytes(value);
117
+ },
118
+ parseLiteral(ast) {
119
+ switch (ast.kind) {
120
+ case "StringValue":
121
+ return parseBytes(ast.value);
122
+ default:
123
+ return null;
124
+ }
125
+ }
126
+ }),
127
+ fromStringCast(exp) {
128
+ return `decode(substr(${exp}, 3), 'hex')`;
129
+ },
130
+ toStringCast(exp) {
131
+ return `'0x' || encode(${exp}, 'hex')`;
132
+ },
133
+ fromStringArrayCast(exp) {
134
+ return `array(select decode(substr(i, 3), 'hex') from unnest((${exp})::text[]) as i)`;
135
+ },
136
+ toStringArrayCast(exp) {
137
+ return `array(select '0x' || encode(i, 'hex') from unnest(${exp}) as i)`;
138
+ }
139
+ }
140
+ };
141
+ function isBigInt(s) {
142
+ return /^[+\-]?\d+$/.test(s);
143
+ }
144
+ // credit - https://github.com/Urigo/graphql-scalars/blob/91b4ea8df891be8af7904cf84751930cc0c6613d/src/scalars/iso-date/validator.ts#L122
145
+ const RFC_3339_REGEX = /^(\d{4}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):([0-5][0-9]):([0-5][0-9]|60))(\.\d{1,})?([Z])$/;
146
+ function isIsoDateTimeString(s) {
147
+ return RFC_3339_REGEX.test(s);
148
+ }
149
+ function parseDateTime(s) {
150
+ if (!isIsoDateTimeString(s))
151
+ throw invalidFormat('DateTime', s);
152
+ let timestamp = Date.parse(s);
153
+ if (isNaN(timestamp))
154
+ throw invalidFormat('DateTime', s);
155
+ return s;
156
+ }
157
+ function isBytesString(s) {
158
+ return s.length % 2 == 0 && /^0x[a-f0-9]+$/i.test(s);
159
+ }
160
+ function parseBytes(s) {
161
+ if (!isBytesString(s))
162
+ throw invalidFormat('Bytes', s);
163
+ return s.toLowerCase();
164
+ }
165
+ function invalidFormat(type, value) {
166
+ return new TypeError(`Not a ${type}: ${value}`);
167
+ }
168
+ exports.scalars_list = ['ID'].concat(Object.keys(exports.scalars));
169
+ function getScalarResolvers() {
170
+ let resolvers = {};
171
+ for (let type in exports.scalars) {
172
+ resolvers[type] = exports.scalars[type].gql;
173
+ }
174
+ return resolvers;
175
+ }
176
+ exports.getScalarResolvers = getScalarResolvers;
177
+ function toTransportCast(scalarType, sqlExp) {
178
+ let s = exports.scalars[scalarType];
179
+ if (s) {
180
+ return s.toStringCast(sqlExp);
181
+ }
182
+ else {
183
+ return sqlExp;
184
+ }
185
+ }
186
+ exports.toTransportCast = toTransportCast;
187
+ function fromTransportCast(scalarType, sqlExp) {
188
+ let s = exports.scalars[scalarType];
189
+ if (s) {
190
+ return s.fromStringCast(sqlExp);
191
+ }
192
+ else {
193
+ return sqlExp;
194
+ }
195
+ }
196
+ exports.fromTransportCast = fromTransportCast;
197
+ function toTransportArrayCast(scalarType, sqlExp) {
198
+ let s = exports.scalars[scalarType];
199
+ if (s) {
200
+ return s.toStringArrayCast(sqlExp);
201
+ }
202
+ else {
203
+ return sqlExp;
204
+ }
205
+ }
206
+ exports.toTransportArrayCast = toTransportArrayCast;
207
+ function fromTransportArrayCast(scalarType, sqlExp) {
208
+ let s = exports.scalars[scalarType];
209
+ if (s) {
210
+ return s.fromStringArrayCast(sqlExp);
211
+ }
212
+ else {
213
+ return sqlExp;
214
+ }
215
+ }
216
+ exports.fromTransportArrayCast = fromTransportArrayCast;
217
+ function fromJsonCast(scalarType, objSqlExp, prop) {
218
+ switch (scalarType) {
219
+ case 'Int':
220
+ return `(${objSqlExp}->>'${prop}')::integer`;
221
+ case 'Float':
222
+ return `(${objSqlExp}->>'${prop}')::numeric`;
223
+ default:
224
+ return fromTransportCast(scalarType, `${objSqlExp}->>'${prop}'`);
225
+ }
226
+ }
227
+ exports.fromJsonCast = fromJsonCast;
228
+ function fromJsonToTransportCast(scalarType, objSqlExp, prop) {
229
+ switch (scalarType) {
230
+ case 'Int':
231
+ return `(${objSqlExp}->'${prop}')::integer`;
232
+ case 'Float':
233
+ return `(${objSqlExp}->'${prop}')::numeric`;
234
+ default:
235
+ return `${objSqlExp}->>'${prop}'`;
236
+ }
237
+ }
238
+ exports.fromJsonToTransportCast = fromJsonToTransportCast;
239
+ //# sourceMappingURL=scalars.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scalars.js","sourceRoot":"","sources":["../src/scalars.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;GAcG;;;AAGH,qCAAyC;AAY5B,QAAA,OAAO,GAA2B;IAC3C,MAAM,EAAE;QACJ,GAAG,EAAE,IAAI,2BAAiB,CAAC;YACvB,IAAI,EAAE,QAAQ;YACd,WAAW,EAAE,oBAAoB;YACjC,SAAS,CAAC,KAAsB;gBAC5B,OAAO,EAAE,GAAC,KAAK,CAAA;YACnB,CAAC;YACD,UAAU,CAAC,KAAa;gBACpB,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;oBAAE,MAAM,aAAa,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAA;gBAC1D,OAAO,KAAK,CAAA;YAChB,CAAC;YACD,YAAY,CAAC,GAAG;gBACZ,QAAO,GAAG,CAAC,IAAI,EAAE;oBACb,KAAK,aAAa;wBACd,IAAI,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE;4BACrB,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,GAAG,EAAE;gCACrB,OAAO,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;6BAC5B;iCAAM;gCACH,OAAO,GAAG,CAAC,KAAK,CAAA;6BACnB;yBACJ;6BAAM;4BACH,MAAM,aAAa,CAAC,QAAQ,EAAE,GAAG,CAAC,KAAK,CAAC,CAAA;yBAC3C;oBACL,KAAK,UAAU;wBACX,OAAO,EAAE,GAAC,GAAG,CAAC,KAAK,CAAA;oBACvB;wBACI,OAAO,IAAI,CAAA;iBAClB;YACL,CAAC;SACJ,CAAC;QACF,cAAc,CAAC,GAAG;YACd,OAAO,IAAI,GAAG,YAAY,CAAA;QAC9B,CAAC;QACD,YAAY,CAAC,GAAG;YACZ,OAAO,IAAI,GAAG,SAAS,CAAA;QAC3B,CAAC;QACD,mBAAmB,CAAC,GAAG;YACnB,OAAO,IAAI,GAAG,cAAc,CAAA;QAChC,CAAC;QACD,iBAAiB,CAAC,GAAG;YACjB,OAAO,IAAI,GAAG,WAAW,CAAA;QAC7B,CAAC;KACJ;IACD,QAAQ,EAAE;QACN,GAAG,EAAE,IAAI,2BAAiB,CAAC;YACvB,IAAI,EAAE,UAAU;YAChB,WAAW,EACP,sFAAsF;YAC1F,SAAS,CAAC,KAAoB;gBAC1B,IAAI,KAAK,YAAY,IAAI,EAAE;oBACvB,OAAO,KAAK,CAAC,WAAW,EAAE,CAAA;iBAC7B;qBAAM;oBACH,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC;wBAAE,MAAM,aAAa,CAAC,UAAU,EAAE,KAAK,CAAC,CAAA;oBACvE,OAAO,KAAK,CAAA;iBACf;YACL,CAAC;YACD,UAAU,CAAC,KAAa;gBACpB,OAAO,aAAa,CAAC,KAAK,CAAC,CAAA;YAC/B,CAAC;YACD,YAAY,CAAC,GAAG;gBACZ,QAAO,GAAG,CAAC,IAAI,EAAE;oBACb,KAAK,aAAa;wBACd,OAAO,aAAa,CAAC,GAAG,CAAC,KAAK,CAAC,CAAA;oBACnC;wBACI,OAAO,IAAI,CAAA;iBAClB;YACL,CAAC;SACJ,CAAC;QACF,cAAc,CAAC,GAAG;YACd,OAAO,IAAI,GAAG,gBAAgB,CAAA;QAClC,CAAC;QACD,YAAY,CAAC,GAAG;YACZ,OAAO,GAAG,CAAA;QACd,CAAC;QACD,mBAAmB,CAAC,GAAG;YACnB,OAAO,IAAI,GAAG,kBAAkB,CAAA;QACpC,CAAC;QACD,iBAAiB,CAAC,GAAG;YACjB,OAAO,GAAG,CAAA;QACd,CAAC;KACJ;IACD,KAAK,EAAE;QACH,GAAG,EAAE,IAAI,2BAAiB,CAAC;YACvB,IAAI,EAAE,OAAO;YACb,WAAW,EAAE,6DAA6D;YAC1E,SAAS,CAAC,KAAa;gBACnB,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC;oBAAE,MAAM,aAAa,CAAC,OAAO,EAAE,KAAK,CAAC,CAAA;gBAC9D,OAAO,KAAK,CAAC,WAAW,EAAE,CAAA;YAC9B,CAAC;YACD,UAAU,CAAC,KAAa;gBACpB,OAAO,UAAU,CAAC,KAAK,CAAC,CAAA;YAC5B,CAAC;YACD,YAAY,CAAC,GAAG;gBACZ,QAAO,GAAG,CAAC,IAAI,EAAE;oBACb,KAAK,aAAa;wBACd,OAAO,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,CAAA;oBAChC;wBACI,OAAO,IAAI,CAAA;iBAClB;YACL,CAAC;SACJ,CAAC;QACF,cAAc,CAAC,GAAG;YACd,OAAO,iBAAiB,GAAG,cAAc,CAAA;QAC7C,CAAC;QACD,YAAY,CAAC,GAAG;YACZ,OAAO,kBAAkB,GAAG,UAAU,CAAA;QAC1C,CAAC;QACD,mBAAmB,CAAC,GAAG;YACnB,OAAO,yDAAyD,GAAG,kBAAkB,CAAA;QACzF,CAAC;QACD,iBAAiB,CAAC,GAAG;YACjB,OAAO,qDAAqD,GAAG,SAAS,CAAA;QAC5E,CAAC;KACJ;CACJ,CAAA;AAGD,SAAS,QAAQ,CAAC,CAAS;IACvB,OAAO,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;AAChC,CAAC;AAGD,yIAAyI;AACzI,MAAM,cAAc,GAAG,oHAAoH,CAAA;AAG3I,SAAS,mBAAmB,CAAC,CAAS;IAClC,OAAO,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;AACjC,CAAC;AAGD,SAAS,aAAa,CAAC,CAAS;IAC5B,IAAI,CAAC,mBAAmB,CAAC,CAAC,CAAC;QAAE,MAAM,aAAa,CAAC,UAAU,EAAE,CAAC,CAAC,CAAA;IAC/D,IAAI,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;IAC7B,IAAI,KAAK,CAAC,SAAS,CAAC;QAAE,MAAM,aAAa,CAAC,UAAU,EAAE,CAAC,CAAC,CAAA;IACxD,OAAO,CAAC,CAAA;AACZ,CAAC;AAGD,SAAS,aAAa,CAAC,CAAS;IAC5B,OAAO,CAAC,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,IAAI,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;AACxD,CAAC;AAGD,SAAS,UAAU,CAAC,CAAS;IACzB,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC;QAAE,MAAM,aAAa,CAAC,OAAO,EAAE,CAAC,CAAC,CAAA;IACtD,OAAO,CAAC,CAAC,WAAW,EAAE,CAAA;AAC1B,CAAC;AAGD,SAAS,aAAa,CAAC,IAAY,EAAE,KAAa;IAC9C,OAAO,IAAI,SAAS,CAAC,SAAS,IAAI,KAAK,KAAK,EAAE,CAAC,CAAA;AACnD,CAAC;AAGY,QAAA,YAAY,GAAG,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,eAAO,CAAC,CAAC,CAAA;AAG/D,SAAgB,kBAAkB;IAC9B,IAAI,SAAS,GAAe,EAAE,CAAA;IAC9B,KAAK,IAAI,IAAI,IAAI,eAAO,EAAE;QACtB,SAAS,CAAC,IAAI,CAAC,GAAG,eAAO,CAAC,IAAI,CAAC,CAAC,GAAG,CAAA;KACtC;IACD,OAAO,SAAS,CAAA;AACpB,CAAC;AAND,gDAMC;AAGD,SAAgB,eAAe,CAAC,UAAkB,EAAE,MAAc;IAC9D,IAAI,CAAC,GAAG,eAAO,CAAC,UAAU,CAAC,CAAA;IAC3B,IAAI,CAAC,EAAE;QACH,OAAO,CAAC,CAAC,YAAY,CAAC,MAAM,CAAC,CAAA;KAChC;SAAM;QACH,OAAO,MAAM,CAAA;KAChB;AACL,CAAC;AAPD,0CAOC;AAGD,SAAgB,iBAAiB,CAAC,UAAkB,EAAE,MAAc;IAChE,IAAI,CAAC,GAAG,eAAO,CAAC,UAAU,CAAC,CAAA;IAC3B,IAAI,CAAC,EAAE;QACH,OAAO,CAAC,CAAC,cAAc,CAAC,MAAM,CAAC,CAAA;KAClC;SAAM;QACH,OAAO,MAAM,CAAA;KAChB;AACL,CAAC;AAPD,8CAOC;AAGD,SAAgB,oBAAoB,CAAC,UAAkB,EAAE,MAAc;IACnE,IAAI,CAAC,GAAG,eAAO,CAAC,UAAU,CAAC,CAAA;IAC3B,IAAI,CAAC,EAAE;QACH,OAAO,CAAC,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAA;KACrC;SAAM;QACH,OAAO,MAAM,CAAA;KAChB;AACL,CAAC;AAPD,oDAOC;AAGD,SAAgB,sBAAsB,CAAC,UAAkB,EAAE,MAAc;IACrE,IAAI,CAAC,GAAG,eAAO,CAAC,UAAU,CAAC,CAAA;IAC3B,IAAI,CAAC,EAAE;QACH,OAAO,CAAC,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAA;KACvC;SAAM;QACH,OAAO,MAAM,CAAA;KAChB;AACL,CAAC;AAPD,wDAOC;AAGD,SAAgB,YAAY,CAAC,UAAkB,EAAE,SAAiB,EAAE,IAAY;IAC5E,QAAO,UAAU,EAAE;QACf,KAAK,KAAK;YACN,OAAO,IAAI,SAAS,OAAO,IAAI,aAAa,CAAA;QAChD,KAAK,OAAO;YACR,OAAO,IAAI,SAAS,OAAO,IAAI,aAAa,CAAA;QAChD;YACI,OAAO,iBAAiB,CAAC,UAAU,EAAE,GAAG,SAAS,OAAO,IAAI,GAAG,CAAC,CAAA;KACvE;AACL,CAAC;AATD,oCASC;AAGD,SAAgB,uBAAuB,CAAC,UAAkB,EAAE,SAAiB,EAAE,IAAY;IACvF,QAAO,UAAU,EAAE;QACf,KAAK,KAAK;YACN,OAAO,IAAI,SAAS,MAAM,IAAI,aAAa,CAAA;QAC/C,KAAK,OAAO;YACR,OAAO,IAAI,SAAS,MAAM,IAAI,aAAa,CAAA;QAC/C;YACI,OAAO,GAAG,SAAS,OAAO,IAAI,GAAG,CAAA;KACxC;AACL,CAAC;AATD,0DASC"}
@@ -0,0 +1,25 @@
1
+ import { IResolvers } from "@graphql-tools/utils";
2
+ import { PluginDefinition } from "apollo-server-core/src/types";
3
+ import express from "express";
4
+ import { DocumentNode, GraphQLSchema } from "graphql";
5
+ import { Pool } from "pg";
6
+ import { ResolverContext } from "./resolver";
7
+ export interface ListeningServer {
8
+ readonly port: number;
9
+ stop(): Promise<void>;
10
+ }
11
+ export interface ServerOptions {
12
+ schema: GraphQLSchema;
13
+ db: Pool;
14
+ }
15
+ export declare class Server {
16
+ private db;
17
+ private model;
18
+ constructor(options: ServerOptions);
19
+ buildTypeDefs(): DocumentNode;
20
+ buildResolvers(): IResolvers;
21
+ buildContext(): () => Promise<ResolverContext>;
22
+ buildPlugins(): PluginDefinition[];
23
+ applyConsole(app: express.Application): void;
24
+ listen(port?: number | string): Promise<ListeningServer>;
25
+ }
package/dist/server.js ADDED
@@ -0,0 +1,119 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.Server = void 0;
7
+ const apollo_server_core_1 = require("apollo-server-core");
8
+ const apollo_server_express_1 = require("apollo-server-express");
9
+ const assert_1 = __importDefault(require("assert"));
10
+ const express_1 = __importDefault(require("express"));
11
+ const fs_1 = __importDefault(require("fs"));
12
+ const http_1 = __importDefault(require("http"));
13
+ const path_1 = __importDefault(require("path"));
14
+ const opencrud_1 = require("./gql/opencrud");
15
+ const schema_1 = require("./gql/schema");
16
+ const resolver_1 = require("./resolver");
17
+ class Server {
18
+ constructor(options) {
19
+ this.db = options.db;
20
+ this.model = (0, schema_1.buildModel)(options.schema);
21
+ }
22
+ buildTypeDefs() {
23
+ return (0, opencrud_1.buildServerSchema)(this.model);
24
+ }
25
+ buildResolvers() {
26
+ return (0, resolver_1.buildResolvers)(this.model);
27
+ }
28
+ buildContext() {
29
+ return async () => {
30
+ let db = await this.db.connect();
31
+ try {
32
+ await db.query('START TRANSACTION ISOLATION LEVEL SERIALIZABLE READ ONLY');
33
+ }
34
+ catch (e) {
35
+ db.release();
36
+ throw e;
37
+ }
38
+ return { db, model: this.model };
39
+ };
40
+ }
41
+ buildPlugins() {
42
+ return [{
43
+ async requestDidStart() {
44
+ return {
45
+ async willSendResponse(req) {
46
+ let ctx = req.context;
47
+ try {
48
+ await ctx.db.query('COMMIT');
49
+ }
50
+ finally {
51
+ ctx.db.release();
52
+ }
53
+ }
54
+ };
55
+ }
56
+ }];
57
+ }
58
+ applyConsole(app) {
59
+ let assets = path_1.default.join(require.resolve('@subsquid/graphiql-console/package.json'), '../build');
60
+ let indexHtml = fs_1.default.readFileSync(path_1.default.join(assets, 'index.html'), 'utf-8')
61
+ .replace(/\/static\//g, 'console/static/')
62
+ .replace('/manifest.json', 'console/manifest.json')
63
+ .replace('${GRAPHQL_API}', 'graphql')
64
+ .replace('${APP_TITLE}', 'Query node playground');
65
+ app.use('/console', express_1.default.static(assets));
66
+ app.use('/graphql', (req, res, next) => {
67
+ if (req.path != '/')
68
+ return next();
69
+ if (req.method != 'GET' && req.method != 'HEAD')
70
+ return next();
71
+ if (req.query['query'])
72
+ return next();
73
+ res.vary('Accept');
74
+ if (!req.accepts('html'))
75
+ return next();
76
+ res.type('html').send(indexHtml);
77
+ });
78
+ }
79
+ async listen(port) {
80
+ let app = (0, express_1.default)();
81
+ let server = http_1.default.createServer(app);
82
+ let apollo = new apollo_server_express_1.ApolloServer({
83
+ typeDefs: this.buildTypeDefs(),
84
+ resolvers: this.buildResolvers(),
85
+ context: this.buildContext(),
86
+ plugins: [
87
+ ...this.buildPlugins(),
88
+ (0, apollo_server_core_1.ApolloServerPluginDrainHttpServer)({ httpServer: server })
89
+ ]
90
+ });
91
+ await apollo.start();
92
+ this.applyConsole(app);
93
+ apollo.applyMiddleware({ app });
94
+ return new Promise((resolve, reject) => {
95
+ function onerror(err) {
96
+ cleanup();
97
+ reject(err);
98
+ }
99
+ function onlistening() {
100
+ cleanup();
101
+ let address = server.address();
102
+ (0, assert_1.default)(address != null && typeof address == 'object');
103
+ resolve({
104
+ port: address.port,
105
+ stop: () => apollo.stop()
106
+ });
107
+ }
108
+ function cleanup() {
109
+ server.removeListener('error', onerror);
110
+ server.removeListener('listening', onlistening);
111
+ }
112
+ server.on('error', onerror);
113
+ server.on('listening', onlistening);
114
+ server.listen(port);
115
+ });
116
+ }
117
+ }
118
+ exports.Server = Server;
119
+ //# sourceMappingURL=server.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":";;;;;;AACA,2DAAoE;AAEpE,iEAAkD;AAElD,oDAA2B;AAC3B,sDAA6B;AAC7B,4CAAmB;AAEnB,gDAAuB;AACvB,gDAAuB;AAEvB,6CAAgD;AAChD,yCAAuC;AAEvC,yCAA0D;AAe1D,MAAa,MAAM;IAIf,YAAY,OAAsB;QAC9B,IAAI,CAAC,EAAE,GAAG,OAAO,CAAC,EAAE,CAAA;QACpB,IAAI,CAAC,KAAK,GAAG,IAAA,mBAAU,EAAC,OAAO,CAAC,MAAM,CAAC,CAAA;IAC3C,CAAC;IAED,aAAa;QACT,OAAO,IAAA,4BAAiB,EAAC,IAAI,CAAC,KAAK,CAAC,CAAA;IACxC,CAAC;IAED,cAAc;QACV,OAAO,IAAA,yBAAc,EAAC,IAAI,CAAC,KAAK,CAAC,CAAA;IACrC,CAAC;IAED,YAAY;QACR,OAAO,KAAK,IAAI,EAAE;YACd,IAAI,EAAE,GAAG,MAAM,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,CAAA;YAChC,IAAI;gBACA,MAAM,EAAE,CAAC,KAAK,CAAC,0DAA0D,CAAC,CAAA;aAC7E;YAAC,OAAM,CAAC,EAAE;gBACP,EAAE,CAAC,OAAO,EAAE,CAAA;gBACZ,MAAM,CAAC,CAAA;aACV;YACD,OAAO,EAAC,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAC,CAAA;QAClC,CAAC,CAAA;IACL,CAAC;IAED,YAAY;QACR,OAAO,CAAC;gBACJ,KAAK,CAAC,eAAe;oBACjB,OAAO;wBACH,KAAK,CAAC,gBAAgB,CAAC,GAA0B;4BAC7C,IAAI,GAAG,GAAG,GAAG,CAAC,OAA0B,CAAA;4BACxC,IAAI;gCACA,MAAM,GAAG,CAAC,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAA;6BAC/B;oCAAS;gCACL,GAAG,CAAC,EAAiB,CAAC,OAAO,EAAE,CAAA;6BACnC;wBACL,CAAC;qBACJ,CAAA;gBACL,CAAC;aACJ,CAAC,CAAA;IACN,CAAC;IAED,YAAY,CAAC,GAAwB;QACjC,IAAI,MAAM,GAAG,cAAI,CAAC,IAAI,CAClB,OAAO,CAAC,OAAO,CAAC,yCAAyC,CAAC,EAC1D,UAAU,CACb,CAAA;QAED,IAAI,SAAS,GAAG,YAAE,CAAC,YAAY,CAAC,cAAI,CAAC,IAAI,CAAC,MAAM,EAAE,YAAY,CAAC,EAAE,OAAO,CAAC;aACpE,OAAO,CAAC,aAAa,EAAE,iBAAiB,CAAC;aACzC,OAAO,CAAC,gBAAgB,EAAE,uBAAuB,CAAC;aAClD,OAAO,CAAC,gBAAgB,EAAE,SAAS,CAAC;aACpC,OAAO,CAAC,cAAc,EAAE,uBAAuB,CAAC,CAAA;QAErD,GAAG,CAAC,GAAG,CAAC,UAAU,EAAE,iBAAO,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAA;QAE3C,GAAG,CAAC,GAAG,CAAC,UAAU,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE;YACnC,IAAI,GAAG,CAAC,IAAI,IAAI,GAAG;gBAAE,OAAO,IAAI,EAAE,CAAA;YAClC,IAAI,GAAG,CAAC,MAAM,IAAI,KAAK,IAAI,GAAG,CAAC,MAAM,IAAI,MAAM;gBAAE,OAAO,IAAI,EAAE,CAAA;YAC9D,IAAI,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC;gBAAE,OAAO,IAAI,EAAE,CAAA;YACrC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;YAClB,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC;gBAAE,OAAO,IAAI,EAAE,CAAA;YACvC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;QACpC,CAAC,CAAC,CAAA;IACN,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,IAAsB;QAC/B,IAAI,GAAG,GAAG,IAAA,iBAAO,GAAE,CAAA;QACnB,IAAI,MAAM,GAAG,cAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAA;QACnC,IAAI,MAAM,GAAG,IAAI,oCAAY,CAAC;YAC1B,QAAQ,EAAE,IAAI,CAAC,aAAa,EAAE;YAC9B,SAAS,EAAE,IAAI,CAAC,cAAc,EAAE;YAChC,OAAO,EAAE,IAAI,CAAC,YAAY,EAAE;YAC5B,OAAO,EAAE;gBACL,GAAG,IAAI,CAAC,YAAY,EAAE;gBACtB,IAAA,sDAAiC,EAAC,EAAC,UAAU,EAAE,MAAM,EAAC,CAAC;aAC1D;SACJ,CAAC,CAAA;QAEF,MAAM,MAAM,CAAC,KAAK,EAAE,CAAA;QACpB,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAA;QACtB,MAAM,CAAC,eAAe,CAAC,EAAC,GAAG,EAAC,CAAC,CAAA;QAE7B,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACnC,SAAS,OAAO,CAAC,GAAU;gBACvB,OAAO,EAAE,CAAA;gBACT,MAAM,CAAC,GAAG,CAAC,CAAA;YACf,CAAC;YAED,SAAS,WAAW;gBAChB,OAAO,EAAE,CAAA;gBACT,IAAI,OAAO,GAAG,MAAM,CAAC,OAAO,EAAE,CAAA;gBAC9B,IAAA,gBAAM,EAAC,OAAO,IAAI,IAAI,IAAI,OAAO,OAAO,IAAI,QAAQ,CAAC,CAAA;gBACrD,OAAO,CAAC;oBACJ,IAAI,EAAE,OAAO,CAAC,IAAI;oBAClB,IAAI,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,EAAE;iBAC5B,CAAC,CAAA;YACN,CAAC;YAED,SAAS,OAAO;gBACZ,MAAM,CAAC,cAAc,CAAC,OAAO,EAAE,OAAO,CAAC,CAAA;gBACvC,MAAM,CAAC,cAAc,CAAC,WAAW,EAAE,WAAW,CAAC,CAAA;YACnD,CAAC;YAED,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,CAAC,CAAA;YAC3B,MAAM,CAAC,EAAE,CAAC,WAAW,EAAE,WAAW,CAAC,CAAA;YACnC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;QACvB,CAAC,CAAC,CAAA;IACN,CAAC;CACJ;AAlHD,wBAkHC"}
package/dist/util.d.ts ADDED
@@ -0,0 +1,19 @@
1
+ import { pluralize } from "inflected";
2
+ export { pluralize };
3
+ export declare function snakeCase(name: string): string;
4
+ export declare function lowerCaseFirst(s: string): string;
5
+ export declare function upperCaseFirst(s: string): string;
6
+ export declare function toQueryListField(entityName: string): string;
7
+ export declare function toColumn(gqlFieldName: string): string;
8
+ export declare function toFkColumn(gqlFieldName: string): string;
9
+ export declare function toTable(entityName: string): string;
10
+ export declare function ensureArray<T>(item: T | T[]): T[];
11
+ export declare function unsupportedCase(value: string): Error;
12
+ export declare function toInt(val: number | string): number;
13
+ export declare class Output {
14
+ private out;
15
+ private indent;
16
+ line(s?: string): void;
17
+ block(start: string, cb: () => void): void;
18
+ toString(): string;
19
+ }
package/dist/util.js ADDED
@@ -0,0 +1,89 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.Output = exports.toInt = exports.unsupportedCase = exports.ensureArray = exports.toTable = exports.toFkColumn = exports.toColumn = exports.toQueryListField = exports.upperCaseFirst = exports.lowerCaseFirst = exports.snakeCase = exports.pluralize = void 0;
7
+ const assert_1 = __importDefault(require("assert"));
8
+ const inflected_1 = require("inflected");
9
+ Object.defineProperty(exports, "pluralize", { enumerable: true, get: function () { return inflected_1.pluralize; } });
10
+ function snakeCase(name) {
11
+ return (0, inflected_1.underscore)(name);
12
+ }
13
+ exports.snakeCase = snakeCase;
14
+ function lowerCaseFirst(s) {
15
+ if (s) {
16
+ return s[0].toLowerCase() + s.slice(1);
17
+ }
18
+ else {
19
+ return s;
20
+ }
21
+ }
22
+ exports.lowerCaseFirst = lowerCaseFirst;
23
+ function upperCaseFirst(s) {
24
+ if (s) {
25
+ return s[0].toUpperCase() + s.slice(1);
26
+ }
27
+ else {
28
+ return s;
29
+ }
30
+ }
31
+ exports.upperCaseFirst = upperCaseFirst;
32
+ function toQueryListField(entityName) {
33
+ return (0, inflected_1.pluralize)(lowerCaseFirst(entityName));
34
+ }
35
+ exports.toQueryListField = toQueryListField;
36
+ function toColumn(gqlFieldName) {
37
+ return snakeCase(gqlFieldName);
38
+ }
39
+ exports.toColumn = toColumn;
40
+ function toFkColumn(gqlFieldName) {
41
+ return snakeCase(gqlFieldName) + '_id';
42
+ }
43
+ exports.toFkColumn = toFkColumn;
44
+ function toTable(entityName) {
45
+ return snakeCase(entityName);
46
+ }
47
+ exports.toTable = toTable;
48
+ function ensureArray(item) {
49
+ return Array.isArray(item) ? item : [item];
50
+ }
51
+ exports.ensureArray = ensureArray;
52
+ function unsupportedCase(value) {
53
+ return new Error(`Unsupported case: ${value}`);
54
+ }
55
+ exports.unsupportedCase = unsupportedCase;
56
+ function toInt(val) {
57
+ let i = parseInt(val);
58
+ (0, assert_1.default)(!isNaN(i) && isFinite(i));
59
+ return i;
60
+ }
61
+ exports.toInt = toInt;
62
+ class Output {
63
+ constructor() {
64
+ this.out = '';
65
+ this.indent = '';
66
+ }
67
+ line(s) {
68
+ if (s) {
69
+ this.out += this.indent + s;
70
+ }
71
+ this.out += '\n';
72
+ }
73
+ block(start, cb) {
74
+ this.line(start + ' {');
75
+ this.indent += ' ';
76
+ try {
77
+ cb();
78
+ }
79
+ finally {
80
+ this.indent = this.indent.slice(0, this.indent.length - 2);
81
+ }
82
+ this.line('}');
83
+ }
84
+ toString() {
85
+ return this.out;
86
+ }
87
+ }
88
+ exports.Output = Output;
89
+ //# sourceMappingURL=util.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"util.js","sourceRoot":"","sources":["../src/util.ts"],"names":[],"mappings":";;;;;;AAAA,oDAA2B;AAC3B,yCAA+C;AAGvC,0FAHA,qBAAS,OAGA;AAGjB,SAAgB,SAAS,CAAC,IAAY;IAClC,OAAO,IAAA,sBAAU,EAAC,IAAI,CAAC,CAAA;AAC3B,CAAC;AAFD,8BAEC;AAGD,SAAgB,cAAc,CAAC,CAAS;IACpC,IAAI,CAAC,EAAE;QACH,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;KACzC;SAAM;QACH,OAAO,CAAC,CAAA;KACX;AACL,CAAC;AAND,wCAMC;AAGD,SAAgB,cAAc,CAAC,CAAS;IACpC,IAAI,CAAC,EAAE;QACH,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;KACzC;SAAM;QACH,OAAO,CAAC,CAAA;KACX;AACL,CAAC;AAND,wCAMC;AAGD,SAAgB,gBAAgB,CAAC,UAAkB;IAC/C,OAAO,IAAA,qBAAS,EAAC,cAAc,CAAC,UAAU,CAAC,CAAC,CAAA;AAChD,CAAC;AAFD,4CAEC;AAGD,SAAgB,QAAQ,CAAC,YAAoB;IACzC,OAAO,SAAS,CAAC,YAAY,CAAC,CAAA;AAClC,CAAC;AAFD,4BAEC;AAGD,SAAgB,UAAU,CAAC,YAAoB;IAC3C,OAAO,SAAS,CAAC,YAAY,CAAC,GAAG,KAAK,CAAA;AAC1C,CAAC;AAFD,gCAEC;AAGD,SAAgB,OAAO,CAAC,UAAkB;IACtC,OAAO,SAAS,CAAC,UAAU,CAAC,CAAA;AAChC,CAAC;AAFD,0BAEC;AAGD,SAAgB,WAAW,CAAI,IAAa;IACxC,OAAO,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAA;AAC9C,CAAC;AAFD,kCAEC;AAGD,SAAgB,eAAe,CAAC,KAAa;IACzC,OAAO,IAAI,KAAK,CAAC,qBAAqB,KAAK,EAAE,CAAC,CAAA;AAClD,CAAC;AAFD,0CAEC;AAGD,SAAgB,KAAK,CAAC,GAAoB;IACtC,IAAI,CAAC,GAAG,QAAQ,CAAC,GAAa,CAAC,CAAA;IAC/B,IAAA,gBAAM,EAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAA;IAChC,OAAO,CAAC,CAAA;AACZ,CAAC;AAJD,sBAIC;AAGD,MAAa,MAAM;IAAnB;QACY,QAAG,GAAG,EAAE,CAAA;QACR,WAAM,GAAG,EAAE,CAAA;IAuBvB,CAAC;IArBG,IAAI,CAAC,CAAU;QACX,IAAI,CAAC,EAAE;YACH,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,CAAA;SAC9B;QACD,IAAI,CAAC,GAAG,IAAI,IAAI,CAAA;IACpB,CAAC;IAED,KAAK,CAAC,KAAa,EAAE,EAAc;QAC/B,IAAI,CAAC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,CAAA;QACvB,IAAI,CAAC,MAAM,IAAI,IAAI,CAAA;QACnB,IAAI;YACA,EAAE,EAAE,CAAA;SACP;gBAAS;YACN,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAA;SAC7D;QACD,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;IAClB,CAAC;IAED,QAAQ;QACJ,OAAO,IAAI,CAAC,GAAG,CAAA;IACnB,CAAC;CACJ;AAzBD,wBAyBC"}
@@ -0,0 +1,8 @@
1
+ export declare type WhereOp = '-' | // no operator
2
+ 'eq' | 'not_eq' | 'gt' | 'gte' | 'lt' | 'lte' | 'in' | 'not_in' | 'contains' | 'not_contains' | 'startsWith' | 'not_startsWith' | 'endsWith' | 'not_endsWith' | 'containsAll' | 'containsAny' | 'containsNone' | 'some' | 'every' | 'none';
3
+ export declare function parseWhereField(field: string): {
4
+ op: WhereOp;
5
+ field: string;
6
+ };
7
+ export declare function hasConditions(where?: any): where is any;
8
+ export declare function whereOpToSqlOperator(op: WhereOp): string;
package/dist/where.js ADDED
@@ -0,0 +1,96 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.whereOpToSqlOperator = exports.hasConditions = exports.parseWhereField = void 0;
4
+ const ENDINGS = [
5
+ 'eq',
6
+ 'not_eq',
7
+ 'gt',
8
+ 'gte',
9
+ 'lt',
10
+ 'lte',
11
+ 'in',
12
+ 'not_in',
13
+ 'contains',
14
+ 'not_contains',
15
+ 'startsWith',
16
+ 'not_startsWith',
17
+ 'endsWith',
18
+ 'not_endsWith',
19
+ 'containsAll',
20
+ 'containsAny',
21
+ 'containsNone',
22
+ 'some',
23
+ 'every',
24
+ 'none'
25
+ ].sort((a, b) => b.length - a.length).map(e => '_' + e);
26
+ function parseEnding(field) {
27
+ for (let i = 0; i < ENDINGS.length; i++) {
28
+ if (field.endsWith(ENDINGS[i]))
29
+ return ENDINGS[i].slice(1);
30
+ }
31
+ return '';
32
+ }
33
+ function parseWhereField(field) {
34
+ let ending = parseEnding(field);
35
+ if (!ending)
36
+ return { op: '-', field };
37
+ let fieldName = field.slice(0, -(ending.length + 1));
38
+ return {
39
+ op: ending,
40
+ field: fieldName
41
+ };
42
+ }
43
+ exports.parseWhereField = parseWhereField;
44
+ function hasConditions(where) {
45
+ if (where == null)
46
+ return false;
47
+ for (let key in where) {
48
+ switch (key) {
49
+ case 'AND':
50
+ case 'OR':
51
+ break;
52
+ default:
53
+ return true;
54
+ }
55
+ }
56
+ if (Array.isArray(where.AND)) {
57
+ if (where.AND.some(hasConditions))
58
+ return true;
59
+ }
60
+ else if (where.AND && hasConditions(where.AND)) {
61
+ return true;
62
+ }
63
+ if (Array.isArray(where.OR)) {
64
+ if (where.OR.some(hasConditions))
65
+ return true;
66
+ }
67
+ else if (where.OR && hasConditions(where.OR)) {
68
+ return true;
69
+ }
70
+ return false;
71
+ }
72
+ exports.hasConditions = hasConditions;
73
+ function whereOpToSqlOperator(op) {
74
+ switch (op) {
75
+ case 'eq':
76
+ return '=';
77
+ case 'not_eq':
78
+ return '!=';
79
+ case 'gt':
80
+ return '>';
81
+ case 'gte':
82
+ return '>=';
83
+ case 'lt':
84
+ return '<';
85
+ case 'lte':
86
+ return '<=';
87
+ case 'in':
88
+ return 'IN';
89
+ case 'not_in':
90
+ return 'NOT IN';
91
+ default:
92
+ throw new Error(`Operator ${op} doesn't have SQL analog`);
93
+ }
94
+ }
95
+ exports.whereOpToSqlOperator = whereOpToSqlOperator;
96
+ //# sourceMappingURL=where.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"where.js","sourceRoot":"","sources":["../src/where.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,39 @@
1
+ {
2
+ "name": "@subsquid/openreader",
3
+ "version": "0.0.0",
4
+ "description": "GraphQL server for Hydra",
5
+ "keywords": ["graphql", "opencrud"],
6
+ "license": "MIT",
7
+ "repository": "git@github.com:subsquid/openreader.git",
8
+ "publishConfig": {
9
+ "access": "public"
10
+ },
11
+ "bin": {
12
+ "openreader": "./dist/main.js"
13
+ },
14
+ "files": [
15
+ "dist",
16
+ "!dist/test"
17
+ ],
18
+ "dependencies": {
19
+ "@subsquid/graphiql-console": "^0.2.0",
20
+ "apollo-server-core": "^3.3.0",
21
+ "apollo-server-express": "^3.3.0",
22
+ "express": "^4.17.1",
23
+ "graphql": "^15.5.2",
24
+ "graphql-parse-resolve-info": "^4.12.0",
25
+ "inflected": "^2.1.0",
26
+ "pg": "^8.7.1"
27
+ },
28
+ "devDependencies": {
29
+ "@types/inflected": "^1.1.29",
30
+ "@types/mocha": "^9.0.0",
31
+ "@types/node-fetch": "^2.5.12",
32
+ "@types/pg": "^8.6.1",
33
+ "dotenv": "^10.0.0",
34
+ "expect": "^27.2.1",
35
+ "mocha": "^9.1.1",
36
+ "node-fetch": "^2.6.3",
37
+ "typescript": "^4.4.2"
38
+ }
39
+ }