@subsquid/openreader 0.5.1 → 0.7.1
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.
- package/README.md +1 -1
- package/dist/dialect.d.ts +2 -0
- package/dist/dialect.d.ts.map +1 -0
- package/dist/dialect.js +3 -0
- package/dist/dialect.js.map +1 -0
- package/dist/gql/opencrud.d.ts +4 -3
- package/dist/gql/opencrud.d.ts.map +1 -1
- package/dist/gql/opencrud.js +12 -5
- package/dist/gql/opencrud.js.map +1 -1
- package/dist/gql/scalars/BigInt.d.ts +3 -0
- package/dist/gql/scalars/BigInt.d.ts.map +1 -0
- package/dist/gql/scalars/BigInt.js +36 -0
- package/dist/gql/scalars/BigInt.js.map +1 -0
- package/dist/gql/scalars/Bytes.d.ts +3 -0
- package/dist/gql/scalars/Bytes.d.ts.map +1 -0
- package/dist/gql/scalars/Bytes.js +32 -0
- package/dist/gql/scalars/Bytes.js.map +1 -0
- package/dist/gql/scalars/DateTime.d.ts +3 -0
- package/dist/gql/scalars/DateTime.d.ts.map +1 -0
- package/dist/gql/scalars/DateTime.js +44 -0
- package/dist/gql/scalars/DateTime.js.map +1 -0
- package/dist/gql/scalars/JSON.d.ts +3 -0
- package/dist/gql/scalars/JSON.d.ts.map +1 -0
- package/dist/gql/scalars/JSON.js +9 -0
- package/dist/gql/scalars/JSON.js.map +1 -0
- package/dist/gql/scalars/index.d.ts +7 -0
- package/dist/gql/scalars/index.d.ts.map +1 -0
- package/dist/gql/scalars/index.js +14 -0
- package/dist/gql/scalars/index.js.map +1 -0
- package/dist/gql/schema.d.ts.map +1 -1
- package/dist/gql/schema.js +3 -2
- package/dist/gql/schema.js.map +1 -1
- package/dist/orderBy.d.ts.map +1 -1
- package/dist/orderBy.js +4 -2
- package/dist/orderBy.js.map +1 -1
- package/dist/queryBuilder.d.ts +3 -1
- package/dist/queryBuilder.d.ts.map +1 -1
- package/dist/queryBuilder.js +121 -24
- package/dist/queryBuilder.js.map +1 -1
- package/dist/resolver.d.ts +2 -1
- package/dist/resolver.d.ts.map +1 -1
- package/dist/resolver.js +12 -12
- package/dist/resolver.js.map +1 -1
- package/dist/server.d.ts +2 -0
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +3 -2
- package/dist/server.js.map +1 -1
- package/dist/test/basic.test.js +3 -3
- package/dist/test/basic.test.js.map +1 -1
- package/dist/test/connection.test.js +1 -1
- package/dist/test/connection.test.js.map +1 -1
- package/dist/test/fts.test.js +2 -2
- package/dist/test/fts.test.js.map +1 -1
- package/dist/test/isNull.test.js +1 -1
- package/dist/test/isNull.test.js.map +1 -1
- package/dist/test/lists.test.js +3 -3
- package/dist/test/lists.test.js.map +1 -1
- package/dist/test/lookup.test.js +13 -7
- package/dist/test/lookup.test.js.map +1 -1
- package/dist/test/regressions.test.d.ts +2 -0
- package/dist/test/regressions.test.d.ts.map +1 -0
- package/dist/test/regressions.test.js +39 -0
- package/dist/test/regressions.test.js.map +1 -0
- package/dist/test/scalars.test.js +47 -10
- package/dist/test/scalars.test.js.map +1 -1
- package/dist/test/{util/setup.d.ts → setup.d.ts} +8 -1
- package/dist/test/setup.d.ts.map +1 -0
- package/dist/test/{util/setup.js → setup.js} +19 -8
- package/dist/test/setup.js.map +1 -0
- package/dist/test/typed-json.test.js +16 -2
- package/dist/test/typed-json.test.js.map +1 -1
- package/dist/test/unions.test.js +1 -1
- package/dist/test/unions.test.js.map +1 -1
- package/dist/test/where.test.js +1 -1
- package/dist/test/where.test.js.map +1 -1
- package/dist/util.d.ts +1 -0
- package/dist/util.d.ts.map +1 -1
- package/dist/util.js +5 -1
- package/dist/util.js.map +1 -1
- package/dist/where.d.ts +1 -1
- package/dist/where.d.ts.map +1 -1
- package/dist/where.js +5 -1
- package/dist/where.js.map +1 -1
- package/package.json +5 -5
- package/src/dialect.ts +2 -0
- package/src/gql/opencrud.ts +15 -6
- package/src/gql/scalars/BigInt.ts +34 -0
- package/src/gql/scalars/Bytes.ts +28 -0
- package/src/gql/scalars/DateTime.ts +45 -0
- package/src/gql/scalars/JSON.ts +7 -0
- package/src/gql/scalars/index.ts +12 -0
- package/src/gql/schema.ts +3 -2
- package/src/orderBy.ts +4 -2
- package/src/queryBuilder.ts +114 -20
- package/src/resolver.ts +13 -11
- package/src/server.ts +5 -2
- package/src/test/basic.test.ts +3 -3
- package/src/test/connection.test.ts +1 -1
- package/src/test/fts.test.ts +4 -2
- package/src/test/isNull.test.ts +1 -1
- package/src/test/lists.test.ts +3 -3
- package/src/test/lookup.test.ts +13 -7
- package/src/test/regressions.test.ts +39 -0
- package/src/test/scalars.test.ts +49 -10
- package/src/test/{util/setup.ts → setup.ts} +21 -7
- package/src/test/typed-json.test.ts +17 -2
- package/src/test/unions.test.ts +1 -1
- package/src/test/where.test.ts +1 -1
- package/src/util.ts +5 -0
- package/src/where.ts +9 -2
- package/dist/scalars.d.ts +0 -36
- package/dist/scalars.d.ts.map +0 -1
- package/dist/scalars.js +0 -229
- package/dist/scalars.js.map +0 -1
- package/dist/test/util/setup.d.ts.map +0 -1
- package/dist/test/util/setup.js.map +0 -1
- package/src/scalars.ts +0 -247
package/dist/scalars.js
DELETED
|
@@ -1,229 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
/**
|
|
3
|
-
* The current concept of custom scalars is as follows:
|
|
4
|
-
*
|
|
5
|
-
* Each custom scalar has a canonical string representation which is used almost everywhere:
|
|
6
|
-
* in JSON responses
|
|
7
|
-
* in graphql queries/schemas
|
|
8
|
-
* in jsonb database columns
|
|
9
|
-
* in database results
|
|
10
|
-
*
|
|
11
|
-
* Database must support 2 way coercion between underlying database type and canonical representation
|
|
12
|
-
* of a corresponding scalar.
|
|
13
|
-
*
|
|
14
|
-
* We receive from database canonical strings and use them within our resolvers as is.
|
|
15
|
-
*
|
|
16
|
-
* GraphQL parsing procedures convert canonical string representation to corresponding js type.
|
|
17
|
-
* This is for compatibility with possible extensions which would like to reuse our scalars.
|
|
18
|
-
*
|
|
19
|
-
* In GraphQL serialization procedures we accept both a canonical string representation
|
|
20
|
-
* and corresponding js type.
|
|
21
|
-
*/
|
|
22
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
23
|
-
exports.fromJsonToOutputCast = exports.fromJsonCast = exports.toOutputArrayCast = exports.fromStringCast = exports.toOutputCast = exports.getScalarResolvers = exports.scalars_list = exports.scalars = void 0;
|
|
24
|
-
const graphql_1 = require("graphql");
|
|
25
|
-
exports.scalars = {
|
|
26
|
-
BigInt: {
|
|
27
|
-
gql: new graphql_1.GraphQLScalarType({
|
|
28
|
-
name: 'BigInt',
|
|
29
|
-
description: 'Big number integer',
|
|
30
|
-
serialize(value) {
|
|
31
|
-
return '' + value;
|
|
32
|
-
},
|
|
33
|
-
parseValue(value) {
|
|
34
|
-
if (!isBigInt(value))
|
|
35
|
-
throw invalidFormat('BigInt', value);
|
|
36
|
-
return BigInt(value);
|
|
37
|
-
},
|
|
38
|
-
parseLiteral(ast) {
|
|
39
|
-
switch (ast.kind) {
|
|
40
|
-
case "StringValue":
|
|
41
|
-
if (isBigInt(ast.value)) {
|
|
42
|
-
return BigInt(ast.value);
|
|
43
|
-
}
|
|
44
|
-
else {
|
|
45
|
-
throw invalidFormat('BigInt', ast.value);
|
|
46
|
-
}
|
|
47
|
-
case "IntValue":
|
|
48
|
-
return BigInt(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
|
-
toStringArrayCast(exp) {
|
|
61
|
-
return `(${exp})::text[]`;
|
|
62
|
-
}
|
|
63
|
-
},
|
|
64
|
-
DateTime: {
|
|
65
|
-
gql: new graphql_1.GraphQLScalarType({
|
|
66
|
-
name: 'DateTime',
|
|
67
|
-
description: 'A date-time string in simplified extended ISO 8601 format (YYYY-MM-DDTHH:mm:ss.sssZ)',
|
|
68
|
-
serialize(value) {
|
|
69
|
-
if (value instanceof Date) {
|
|
70
|
-
return value.toISOString();
|
|
71
|
-
}
|
|
72
|
-
else {
|
|
73
|
-
if (!isIsoDateTimeString(value))
|
|
74
|
-
throw invalidFormat('DateTime', value);
|
|
75
|
-
return value;
|
|
76
|
-
}
|
|
77
|
-
},
|
|
78
|
-
parseValue(value) {
|
|
79
|
-
return parseDateTime(value);
|
|
80
|
-
},
|
|
81
|
-
parseLiteral(ast) {
|
|
82
|
-
switch (ast.kind) {
|
|
83
|
-
case "StringValue":
|
|
84
|
-
return parseDateTime(ast.value);
|
|
85
|
-
default:
|
|
86
|
-
return null;
|
|
87
|
-
}
|
|
88
|
-
}
|
|
89
|
-
}),
|
|
90
|
-
fromStringCast(exp) {
|
|
91
|
-
return `(${exp})::timestamptz`;
|
|
92
|
-
},
|
|
93
|
-
toStringCast(exp) {
|
|
94
|
-
return `to_char((${exp}) at time zone 'UTC', 'YYYY-MM-DD"T"HH24:MI:SS.MS"Z"')`;
|
|
95
|
-
},
|
|
96
|
-
toStringArrayCast(exp) {
|
|
97
|
-
return `array(select to_char(i at time zone 'UTC', 'YYYY-MM-DD"T"HH24:MI:SS.MS"Z"') from unnest(${exp}) as i)`;
|
|
98
|
-
}
|
|
99
|
-
},
|
|
100
|
-
Bytes: {
|
|
101
|
-
gql: new graphql_1.GraphQLScalarType({
|
|
102
|
-
name: 'Bytes',
|
|
103
|
-
description: 'Binary data encoded as a hex string always prefixed with 0x',
|
|
104
|
-
serialize(value) {
|
|
105
|
-
if (typeof value == 'string') {
|
|
106
|
-
if (!isBytesString(value))
|
|
107
|
-
throw invalidFormat('Bytes', value);
|
|
108
|
-
return value.toLowerCase();
|
|
109
|
-
}
|
|
110
|
-
else {
|
|
111
|
-
return '0x' + value.toString('hex');
|
|
112
|
-
}
|
|
113
|
-
},
|
|
114
|
-
parseValue(value) {
|
|
115
|
-
return parseBytes(value);
|
|
116
|
-
},
|
|
117
|
-
parseLiteral(ast) {
|
|
118
|
-
switch (ast.kind) {
|
|
119
|
-
case "StringValue":
|
|
120
|
-
return parseBytes(ast.value);
|
|
121
|
-
default:
|
|
122
|
-
return null;
|
|
123
|
-
}
|
|
124
|
-
}
|
|
125
|
-
}),
|
|
126
|
-
fromStringCast(exp) {
|
|
127
|
-
return `decode(substr(${exp}, 3), 'hex')`;
|
|
128
|
-
},
|
|
129
|
-
toStringCast(exp) {
|
|
130
|
-
return `'0x' || encode(${exp}, 'hex')`;
|
|
131
|
-
},
|
|
132
|
-
toStringArrayCast(exp) {
|
|
133
|
-
return `array(select '0x' || encode(i, 'hex') from unnest(${exp}) as i)`;
|
|
134
|
-
}
|
|
135
|
-
}
|
|
136
|
-
};
|
|
137
|
-
function isBigInt(s) {
|
|
138
|
-
return /^[+\-]?\d+$/.test(s);
|
|
139
|
-
}
|
|
140
|
-
// credit - https://github.com/Urigo/graphql-scalars/blob/91b4ea8df891be8af7904cf84751930cc0c6613d/src/scalars/iso-date/validator.ts#L122
|
|
141
|
-
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])$/;
|
|
142
|
-
function isIsoDateTimeString(s) {
|
|
143
|
-
return RFC_3339_REGEX.test(s);
|
|
144
|
-
}
|
|
145
|
-
function parseDateTime(s) {
|
|
146
|
-
if (!isIsoDateTimeString(s))
|
|
147
|
-
throw invalidFormat('DateTime', s);
|
|
148
|
-
let timestamp = Date.parse(s);
|
|
149
|
-
if (isNaN(timestamp))
|
|
150
|
-
throw invalidFormat('DateTime', s);
|
|
151
|
-
return new Date(timestamp);
|
|
152
|
-
}
|
|
153
|
-
function isBytesString(s) {
|
|
154
|
-
return s.length % 2 == 0 && /^0x[a-f0-9]+$/i.test(s);
|
|
155
|
-
}
|
|
156
|
-
function parseBytes(s) {
|
|
157
|
-
if (!isBytesString(s))
|
|
158
|
-
throw invalidFormat('Bytes', s);
|
|
159
|
-
return Buffer.from(s.slice(2), 'hex');
|
|
160
|
-
}
|
|
161
|
-
function invalidFormat(type, value) {
|
|
162
|
-
return new TypeError(`Not a ${type}: ${value}`);
|
|
163
|
-
}
|
|
164
|
-
exports.scalars_list = ['ID'].concat(Object.keys(exports.scalars));
|
|
165
|
-
function getScalarResolvers() {
|
|
166
|
-
let resolvers = {};
|
|
167
|
-
for (let type in exports.scalars) {
|
|
168
|
-
resolvers[type] = exports.scalars[type].gql;
|
|
169
|
-
}
|
|
170
|
-
return resolvers;
|
|
171
|
-
}
|
|
172
|
-
exports.getScalarResolvers = getScalarResolvers;
|
|
173
|
-
function toOutputCast(scalarType, sqlExp) {
|
|
174
|
-
let s = exports.scalars[scalarType];
|
|
175
|
-
if (s) {
|
|
176
|
-
return s.toStringCast(sqlExp);
|
|
177
|
-
}
|
|
178
|
-
else {
|
|
179
|
-
return sqlExp;
|
|
180
|
-
}
|
|
181
|
-
}
|
|
182
|
-
exports.toOutputCast = toOutputCast;
|
|
183
|
-
function fromStringCast(scalarType, sqlExp) {
|
|
184
|
-
let s = exports.scalars[scalarType];
|
|
185
|
-
if (s) {
|
|
186
|
-
return s.fromStringCast(sqlExp);
|
|
187
|
-
}
|
|
188
|
-
else {
|
|
189
|
-
return sqlExp;
|
|
190
|
-
}
|
|
191
|
-
}
|
|
192
|
-
exports.fromStringCast = fromStringCast;
|
|
193
|
-
function toOutputArrayCast(scalarType, sqlExp) {
|
|
194
|
-
let s = exports.scalars[scalarType];
|
|
195
|
-
if (s) {
|
|
196
|
-
return s.toStringArrayCast(sqlExp);
|
|
197
|
-
}
|
|
198
|
-
else {
|
|
199
|
-
return sqlExp;
|
|
200
|
-
}
|
|
201
|
-
}
|
|
202
|
-
exports.toOutputArrayCast = toOutputArrayCast;
|
|
203
|
-
function fromJsonCast(scalarType, objSqlExp, prop) {
|
|
204
|
-
switch (scalarType) {
|
|
205
|
-
case 'Int':
|
|
206
|
-
return `(${objSqlExp}->'${prop}')::integer`;
|
|
207
|
-
case 'Float':
|
|
208
|
-
return `(${objSqlExp}->'${prop}')::numeric`;
|
|
209
|
-
case 'Boolean':
|
|
210
|
-
return `(${objSqlExp}->'${prop}')::bool`;
|
|
211
|
-
default:
|
|
212
|
-
return fromStringCast(scalarType, `${objSqlExp}->>'${prop}'`);
|
|
213
|
-
}
|
|
214
|
-
}
|
|
215
|
-
exports.fromJsonCast = fromJsonCast;
|
|
216
|
-
function fromJsonToOutputCast(scalarType, objSqlExp, prop) {
|
|
217
|
-
switch (scalarType) {
|
|
218
|
-
case 'Int':
|
|
219
|
-
return `(${objSqlExp}->'${prop}')::integer`;
|
|
220
|
-
case 'Float':
|
|
221
|
-
return `(${objSqlExp}->'${prop}')::numeric`;
|
|
222
|
-
case 'Boolean':
|
|
223
|
-
return `(${objSqlExp}->'${prop}')::bool`;
|
|
224
|
-
default:
|
|
225
|
-
return `${objSqlExp}->>'${prop}'`;
|
|
226
|
-
}
|
|
227
|
-
}
|
|
228
|
-
exports.fromJsonToOutputCast = fromJsonToOutputCast;
|
|
229
|
-
//# sourceMappingURL=scalars.js.map
|
package/dist/scalars.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"scalars.js","sourceRoot":"","sources":["../src/scalars.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"setup.d.ts","sourceRoot":"","sources":["../../../src/test/util/setup.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,MAAM,EAAC,MAAM,iBAAiB,CAAA;AAQtC,eAAO,MAAM,SAAS,yBAAqB,CAAA;AAc3C,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAMzD;AAGD,wBAAgB,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC,CAK9C;AAGD,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,IAAI,CAK/C;AAGD,wBAAgB,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAehD"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"setup.js","sourceRoot":"","sources":["../../../src/test/util/setup.ts"],"names":[],"mappings":";;;AAAA,qDAAsC;AACtC,qCAA6B;AAC7B,2BAAuD;AACvD,iCAAyC;AACzC,6CAAwD;AACxD,yCAAmD;AAGtC,QAAA,SAAS,GAAG,IAAA,qBAAgB,GAAE,CAAA;AAG3C,KAAK,UAAU,UAAU,CAAC,KAA4C;IAClE,IAAI,MAAM,GAAG,IAAI,WAAQ,CAAC,iBAAS,CAAC,CAAA;IACpC,MAAM,MAAM,CAAC,OAAO,EAAE,CAAA;IACtB,IAAI;QACA,MAAM,KAAK,CAAC,MAAM,CAAC,CAAA;KACtB;YAAS;QACN,MAAM,MAAM,CAAC,GAAG,EAAE,CAAA;KACrB;AACL,CAAC;AAGD,SAAgB,YAAY,CAAC,GAAa;IACtC,OAAO,UAAU,CAAC,KAAK,EAAC,MAAM,EAAC,EAAE;QAC7B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YACjC,MAAM,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAA;SAC7B;IACL,CAAC,CAAC,CAAA;AACN,CAAC;AAND,oCAMC;AAGD,SAAgB,cAAc;IAC1B,OAAO,UAAU,CAAC,KAAK,EAAC,MAAM,EAAC,EAAE;QAC7B,MAAM,MAAM,CAAC,KAAK,CAAC,sCAAsC,CAAC,CAAA;QAC1D,MAAM,MAAM,CAAC,KAAK,CAAC,sBAAsB,CAAC,CAAA;IAC9C,CAAC,CAAC,CAAA;AACN,CAAC;AALD,wCAKC;AAGD,SAAgB,WAAW,CAAC,GAAa;IACrC,MAAM,CAAC,KAAK,IAAI,EAAE;QACd,MAAM,cAAc,EAAE,CAAA;QACtB,MAAM,YAAY,CAAC,GAAG,CAAC,CAAA;IAC3B,CAAC,CAAC,CAAA;AACN,CAAC;AALD,kCAKC;AAGD,SAAgB,SAAS,CAAC,MAAc;IACpC,IAAI,MAAM,GAAG,IAAI,wBAAM,CAAC,aAAa,CAAC,CAAA;IACtC,IAAI,EAAE,GAAG,IAAI,SAAI,CAAC,iBAAS,CAAC,CAAA;IAC5B,IAAI,IAAiC,CAAA;IACrC,MAAM,CAAC,KAAK,IAAI,EAAE;QACd,IAAI,GAAG,MAAM,IAAA,cAAK,EAAC;YACf,EAAE;YACF,KAAK,EAAE,IAAA,mBAAU,EAAC,IAAA,oBAAW,EAAC,IAAA,eAAK,EAAC,MAAM,CAAC,CAAC,CAAC;YAC7C,IAAI,EAAE,CAAC;SACV,CAAC,CAAA;QACF,MAAM,CAAC,QAAQ,GAAG,oBAAoB,IAAI,CAAC,IAAI,UAAU,CAAA;IAC7D,CAAC,CAAC,CAAA;IACF,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAA;IACzB,KAAK,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,CAAA;IACrB,OAAO,MAAM,CAAA;AACjB,CAAC;AAfD,8BAeC"}
|
package/src/scalars.ts
DELETED
|
@@ -1,247 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* The current concept of custom scalars is as follows:
|
|
3
|
-
*
|
|
4
|
-
* Each custom scalar has a canonical string representation which is used almost everywhere:
|
|
5
|
-
* in JSON responses
|
|
6
|
-
* in graphql queries/schemas
|
|
7
|
-
* in jsonb database columns
|
|
8
|
-
* in database results
|
|
9
|
-
*
|
|
10
|
-
* Database must support 2 way coercion between underlying database type and canonical representation
|
|
11
|
-
* of a corresponding scalar.
|
|
12
|
-
*
|
|
13
|
-
* We receive from database canonical strings and use them within our resolvers as is.
|
|
14
|
-
*
|
|
15
|
-
* GraphQL parsing procedures convert canonical string representation to corresponding js type.
|
|
16
|
-
* This is for compatibility with possible extensions which would like to reuse our scalars.
|
|
17
|
-
*
|
|
18
|
-
* In GraphQL serialization procedures we accept both a canonical string representation
|
|
19
|
-
* and corresponding js type.
|
|
20
|
-
*/
|
|
21
|
-
|
|
22
|
-
import {GraphQLScalarType} from "graphql"
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
export interface Scalar {
|
|
26
|
-
gql: GraphQLScalarType
|
|
27
|
-
fromStringCast: (sqlExp: string) => string
|
|
28
|
-
toStringCast: (sqlExp: string) => string
|
|
29
|
-
toStringArrayCast: (sqlExp: string) => string
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
export const scalars: Record<string, Scalar> = {
|
|
34
|
-
BigInt: {
|
|
35
|
-
gql: new GraphQLScalarType({
|
|
36
|
-
name: 'BigInt',
|
|
37
|
-
description: 'Big number integer',
|
|
38
|
-
serialize(value: number | string | bigint) {
|
|
39
|
-
return ''+value
|
|
40
|
-
},
|
|
41
|
-
parseValue(value: string) {
|
|
42
|
-
if (!isBigInt(value)) throw invalidFormat('BigInt', value)
|
|
43
|
-
return BigInt(value)
|
|
44
|
-
},
|
|
45
|
-
parseLiteral(ast) {
|
|
46
|
-
switch(ast.kind) {
|
|
47
|
-
case "StringValue":
|
|
48
|
-
if (isBigInt(ast.value)) {
|
|
49
|
-
return BigInt(ast.value)
|
|
50
|
-
} else {
|
|
51
|
-
throw invalidFormat('BigInt', ast.value)
|
|
52
|
-
}
|
|
53
|
-
case "IntValue":
|
|
54
|
-
return BigInt(ast.value)
|
|
55
|
-
default:
|
|
56
|
-
return null
|
|
57
|
-
}
|
|
58
|
-
}
|
|
59
|
-
}),
|
|
60
|
-
fromStringCast(exp) {
|
|
61
|
-
return `(${exp})::numeric`
|
|
62
|
-
},
|
|
63
|
-
toStringCast(exp) {
|
|
64
|
-
return `(${exp})::text`
|
|
65
|
-
},
|
|
66
|
-
toStringArrayCast(exp) {
|
|
67
|
-
return `(${exp})::text[]`
|
|
68
|
-
}
|
|
69
|
-
},
|
|
70
|
-
DateTime: {
|
|
71
|
-
gql: new GraphQLScalarType({
|
|
72
|
-
name: 'DateTime',
|
|
73
|
-
description:
|
|
74
|
-
'A date-time string in simplified extended ISO 8601 format (YYYY-MM-DDTHH:mm:ss.sssZ)',
|
|
75
|
-
serialize(value: Date | string) {
|
|
76
|
-
if (value instanceof Date) {
|
|
77
|
-
return value.toISOString()
|
|
78
|
-
} else {
|
|
79
|
-
if (!isIsoDateTimeString(value)) throw invalidFormat('DateTime', value)
|
|
80
|
-
return value
|
|
81
|
-
}
|
|
82
|
-
},
|
|
83
|
-
parseValue(value: string) {
|
|
84
|
-
return parseDateTime(value)
|
|
85
|
-
},
|
|
86
|
-
parseLiteral(ast) {
|
|
87
|
-
switch(ast.kind) {
|
|
88
|
-
case "StringValue":
|
|
89
|
-
return parseDateTime(ast.value)
|
|
90
|
-
default:
|
|
91
|
-
return null
|
|
92
|
-
}
|
|
93
|
-
}
|
|
94
|
-
}),
|
|
95
|
-
fromStringCast(exp) {
|
|
96
|
-
return `(${exp})::timestamptz`
|
|
97
|
-
},
|
|
98
|
-
toStringCast(exp) {
|
|
99
|
-
return `to_char((${exp}) at time zone 'UTC', 'YYYY-MM-DD"T"HH24:MI:SS.MS"Z"')`
|
|
100
|
-
},
|
|
101
|
-
toStringArrayCast(exp) {
|
|
102
|
-
return `array(select to_char(i at time zone 'UTC', 'YYYY-MM-DD"T"HH24:MI:SS.MS"Z"') from unnest(${exp}) as i)`
|
|
103
|
-
}
|
|
104
|
-
},
|
|
105
|
-
Bytes: {
|
|
106
|
-
gql: new GraphQLScalarType({
|
|
107
|
-
name: 'Bytes',
|
|
108
|
-
description: 'Binary data encoded as a hex string always prefixed with 0x',
|
|
109
|
-
serialize(value: string | Buffer) {
|
|
110
|
-
if (typeof value == 'string') {
|
|
111
|
-
if (!isBytesString(value)) throw invalidFormat('Bytes', value)
|
|
112
|
-
return value.toLowerCase()
|
|
113
|
-
} else {
|
|
114
|
-
return '0x' + value.toString('hex')
|
|
115
|
-
}
|
|
116
|
-
},
|
|
117
|
-
parseValue(value: string) {
|
|
118
|
-
return parseBytes(value)
|
|
119
|
-
},
|
|
120
|
-
parseLiteral(ast) {
|
|
121
|
-
switch(ast.kind) {
|
|
122
|
-
case "StringValue":
|
|
123
|
-
return parseBytes(ast.value)
|
|
124
|
-
default:
|
|
125
|
-
return null
|
|
126
|
-
}
|
|
127
|
-
}
|
|
128
|
-
}),
|
|
129
|
-
fromStringCast(exp) {
|
|
130
|
-
return `decode(substr(${exp}, 3), 'hex')`
|
|
131
|
-
},
|
|
132
|
-
toStringCast(exp) {
|
|
133
|
-
return `'0x' || encode(${exp}, 'hex')`
|
|
134
|
-
},
|
|
135
|
-
toStringArrayCast(exp) {
|
|
136
|
-
return `array(select '0x' || encode(i, 'hex') from unnest(${exp}) as i)`
|
|
137
|
-
}
|
|
138
|
-
}
|
|
139
|
-
}
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
function isBigInt(s: string): boolean {
|
|
143
|
-
return /^[+\-]?\d+$/.test(s)
|
|
144
|
-
}
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
// credit - https://github.com/Urigo/graphql-scalars/blob/91b4ea8df891be8af7904cf84751930cc0c6613d/src/scalars/iso-date/validator.ts#L122
|
|
148
|
-
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])$/
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
function isIsoDateTimeString(s: string): boolean {
|
|
152
|
-
return RFC_3339_REGEX.test(s)
|
|
153
|
-
}
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
function parseDateTime(s: string): Date {
|
|
157
|
-
if (!isIsoDateTimeString(s)) throw invalidFormat('DateTime', s)
|
|
158
|
-
let timestamp = Date.parse(s)
|
|
159
|
-
if (isNaN(timestamp)) throw invalidFormat('DateTime', s)
|
|
160
|
-
return new Date(timestamp)
|
|
161
|
-
}
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
function isBytesString(s: string): boolean {
|
|
165
|
-
return s.length % 2 == 0 && /^0x[a-f0-9]+$/i.test(s)
|
|
166
|
-
}
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
function parseBytes(s: string): Buffer {
|
|
170
|
-
if (!isBytesString(s)) throw invalidFormat('Bytes', s)
|
|
171
|
-
return Buffer.from(s.slice(2), 'hex')
|
|
172
|
-
}
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
function invalidFormat(type: string, value: string): Error {
|
|
176
|
-
return new TypeError(`Not a ${type}: ${value}`)
|
|
177
|
-
}
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
export const scalars_list = ['ID'].concat(Object.keys(scalars))
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
export function getScalarResolvers(): Record<string, GraphQLScalarType> {
|
|
184
|
-
let resolvers: Record<string, GraphQLScalarType> = {}
|
|
185
|
-
for (let type in scalars) {
|
|
186
|
-
resolvers[type] = scalars[type].gql
|
|
187
|
-
}
|
|
188
|
-
return resolvers
|
|
189
|
-
}
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
export function toOutputCast(scalarType: string, sqlExp: string): string {
|
|
193
|
-
let s = scalars[scalarType]
|
|
194
|
-
if (s) {
|
|
195
|
-
return s.toStringCast(sqlExp)
|
|
196
|
-
} else {
|
|
197
|
-
return sqlExp
|
|
198
|
-
}
|
|
199
|
-
}
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
export function fromStringCast(scalarType: string, sqlExp: string): string {
|
|
203
|
-
let s = scalars[scalarType]
|
|
204
|
-
if (s) {
|
|
205
|
-
return s.fromStringCast(sqlExp)
|
|
206
|
-
} else {
|
|
207
|
-
return sqlExp
|
|
208
|
-
}
|
|
209
|
-
}
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
export function toOutputArrayCast(scalarType: string, sqlExp: string): string {
|
|
213
|
-
let s = scalars[scalarType]
|
|
214
|
-
if (s) {
|
|
215
|
-
return s.toStringArrayCast(sqlExp)
|
|
216
|
-
} else {
|
|
217
|
-
return sqlExp
|
|
218
|
-
}
|
|
219
|
-
}
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
export function fromJsonCast(scalarType: string, objSqlExp: string, prop: string): string {
|
|
223
|
-
switch(scalarType) {
|
|
224
|
-
case 'Int':
|
|
225
|
-
return `(${objSqlExp}->'${prop}')::integer`
|
|
226
|
-
case 'Float':
|
|
227
|
-
return `(${objSqlExp}->'${prop}')::numeric`
|
|
228
|
-
case 'Boolean':
|
|
229
|
-
return `(${objSqlExp}->'${prop}')::bool`
|
|
230
|
-
default:
|
|
231
|
-
return fromStringCast(scalarType, `${objSqlExp}->>'${prop}'`)
|
|
232
|
-
}
|
|
233
|
-
}
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
export function fromJsonToOutputCast(scalarType: string, objSqlExp: string, prop: string) {
|
|
237
|
-
switch(scalarType) {
|
|
238
|
-
case 'Int':
|
|
239
|
-
return `(${objSqlExp}->'${prop}')::integer`
|
|
240
|
-
case 'Float':
|
|
241
|
-
return `(${objSqlExp}->'${prop}')::numeric`
|
|
242
|
-
case 'Boolean':
|
|
243
|
-
return `(${objSqlExp}->'${prop}')::bool`
|
|
244
|
-
default:
|
|
245
|
-
return `${objSqlExp}->>'${prop}'`
|
|
246
|
-
}
|
|
247
|
-
}
|