@subsquid/openreader 0.5.1 → 0.6.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 (102) hide show
  1. package/dist/dialect.d.ts +2 -0
  2. package/dist/dialect.d.ts.map +1 -0
  3. package/dist/dialect.js +3 -0
  4. package/dist/dialect.js.map +1 -0
  5. package/dist/gql/opencrud.d.ts +4 -3
  6. package/dist/gql/opencrud.d.ts.map +1 -1
  7. package/dist/gql/opencrud.js +8 -5
  8. package/dist/gql/opencrud.js.map +1 -1
  9. package/dist/gql/scalars/BigInt.d.ts +3 -0
  10. package/dist/gql/scalars/BigInt.d.ts.map +1 -0
  11. package/dist/gql/scalars/BigInt.js +36 -0
  12. package/dist/gql/scalars/BigInt.js.map +1 -0
  13. package/dist/gql/scalars/Bytes.d.ts +3 -0
  14. package/dist/gql/scalars/Bytes.d.ts.map +1 -0
  15. package/dist/gql/scalars/Bytes.js +32 -0
  16. package/dist/gql/scalars/Bytes.js.map +1 -0
  17. package/dist/gql/scalars/DateTime.d.ts +3 -0
  18. package/dist/gql/scalars/DateTime.d.ts.map +1 -0
  19. package/dist/gql/scalars/DateTime.js +44 -0
  20. package/dist/gql/scalars/DateTime.js.map +1 -0
  21. package/dist/gql/scalars/index.d.ts +6 -0
  22. package/dist/gql/scalars/index.d.ts.map +1 -0
  23. package/dist/gql/scalars/index.js +12 -0
  24. package/dist/gql/scalars/index.js.map +1 -0
  25. package/dist/gql/schema.d.ts.map +1 -1
  26. package/dist/gql/schema.js +3 -2
  27. package/dist/gql/schema.js.map +1 -1
  28. package/dist/queryBuilder.d.ts +3 -1
  29. package/dist/queryBuilder.d.ts.map +1 -1
  30. package/dist/queryBuilder.js +104 -22
  31. package/dist/queryBuilder.js.map +1 -1
  32. package/dist/resolver.d.ts +2 -1
  33. package/dist/resolver.d.ts.map +1 -1
  34. package/dist/resolver.js +12 -12
  35. package/dist/resolver.js.map +1 -1
  36. package/dist/server.d.ts +2 -0
  37. package/dist/server.d.ts.map +1 -1
  38. package/dist/server.js +3 -2
  39. package/dist/server.js.map +1 -1
  40. package/dist/test/basic.test.js +3 -3
  41. package/dist/test/basic.test.js.map +1 -1
  42. package/dist/test/connection.test.js +1 -1
  43. package/dist/test/connection.test.js.map +1 -1
  44. package/dist/test/fts.test.js +2 -2
  45. package/dist/test/fts.test.js.map +1 -1
  46. package/dist/test/isNull.test.js +1 -1
  47. package/dist/test/isNull.test.js.map +1 -1
  48. package/dist/test/lists.test.js +3 -3
  49. package/dist/test/lists.test.js.map +1 -1
  50. package/dist/test/lookup.test.js +13 -7
  51. package/dist/test/lookup.test.js.map +1 -1
  52. package/dist/test/scalars.test.js +12 -9
  53. package/dist/test/scalars.test.js.map +1 -1
  54. package/dist/test/{util/setup.d.ts → setup.d.ts} +8 -1
  55. package/dist/test/setup.d.ts.map +1 -0
  56. package/dist/test/{util/setup.js → setup.js} +19 -8
  57. package/dist/test/setup.js.map +1 -0
  58. package/dist/test/typed-json.test.js +1 -1
  59. package/dist/test/typed-json.test.js.map +1 -1
  60. package/dist/test/unions.test.js +1 -1
  61. package/dist/test/unions.test.js.map +1 -1
  62. package/dist/test/where.test.js +1 -1
  63. package/dist/test/where.test.js.map +1 -1
  64. package/dist/util.d.ts +1 -0
  65. package/dist/util.d.ts.map +1 -1
  66. package/dist/util.js +5 -1
  67. package/dist/util.js.map +1 -1
  68. package/dist/where.d.ts +1 -1
  69. package/dist/where.d.ts.map +1 -1
  70. package/dist/where.js +2 -0
  71. package/dist/where.js.map +1 -1
  72. package/package.json +4 -4
  73. package/src/dialect.ts +2 -0
  74. package/src/gql/opencrud.ts +10 -6
  75. package/src/gql/scalars/BigInt.ts +34 -0
  76. package/src/gql/scalars/Bytes.ts +28 -0
  77. package/src/gql/scalars/DateTime.ts +45 -0
  78. package/src/gql/scalars/index.ts +10 -0
  79. package/src/gql/schema.ts +3 -2
  80. package/src/queryBuilder.ts +98 -18
  81. package/src/resolver.ts +13 -11
  82. package/src/server.ts +5 -2
  83. package/src/test/basic.test.ts +3 -3
  84. package/src/test/connection.test.ts +1 -1
  85. package/src/test/fts.test.ts +4 -2
  86. package/src/test/isNull.test.ts +1 -1
  87. package/src/test/lists.test.ts +3 -3
  88. package/src/test/lookup.test.ts +13 -7
  89. package/src/test/scalars.test.ts +12 -9
  90. package/src/test/{util/setup.ts → setup.ts} +21 -7
  91. package/src/test/typed-json.test.ts +1 -1
  92. package/src/test/unions.test.ts +1 -1
  93. package/src/test/where.test.ts +1 -1
  94. package/src/util.ts +5 -0
  95. package/src/where.ts +3 -0
  96. package/dist/scalars.d.ts +0 -36
  97. package/dist/scalars.d.ts.map +0 -1
  98. package/dist/scalars.js +0 -229
  99. package/dist/scalars.js.map +0 -1
  100. package/dist/test/util/setup.d.ts.map +0 -1
  101. package/dist/test/util/setup.js.map +0 -1
  102. package/src/scalars.ts +0 -247
@@ -1,4 +1,4 @@
1
- import {useDatabase, useServer} from "./util/setup"
1
+ import {useDatabase, useServer} from "./setup"
2
2
 
3
3
  describe('unions', function () {
4
4
  useDatabase([
@@ -1,4 +1,4 @@
1
- import {useDatabase, useServer} from "./util/setup"
1
+ import {useDatabase, useServer} from "./setup"
2
2
 
3
3
  describe('AND, OR on entity filters', function () {
4
4
  useDatabase([
package/src/util.ts CHANGED
@@ -37,3 +37,8 @@ export function toInt(val: number | string): number {
37
37
  assert(!isNaN(i) && isFinite(i))
38
38
  return i
39
39
  }
40
+
41
+
42
+ export function invalidFormat(type: string, value: string): Error {
43
+ return new TypeError(`Not a ${type}: ${value}`)
44
+ }
package/src/where.ts CHANGED
@@ -9,6 +9,7 @@ export type WhereOp =
9
9
  'lte' |
10
10
  'in' | 'not_in' |
11
11
  'contains' | 'not_contains' |
12
+ 'containsInsensitive' | 'not_containsInsensitive' |
12
13
  'startsWith' | 'not_startsWith' |
13
14
  'endsWith' | 'not_endsWith' |
14
15
  'containsAll' |
@@ -31,6 +32,8 @@ const ENDINGS = [
31
32
  'not_in',
32
33
  'contains',
33
34
  'not_contains',
35
+ 'containsInsensitive',
36
+ 'not_containsInsensitive',
34
37
  'startsWith',
35
38
  'not_startsWith',
36
39
  'endsWith',
package/dist/scalars.d.ts DELETED
@@ -1,36 +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
- import { GraphQLScalarType } from "graphql";
22
- export interface Scalar {
23
- gql: GraphQLScalarType;
24
- fromStringCast: (sqlExp: string) => string;
25
- toStringCast: (sqlExp: string) => string;
26
- toStringArrayCast: (sqlExp: string) => string;
27
- }
28
- export declare const scalars: Record<string, Scalar>;
29
- export declare const scalars_list: string[];
30
- export declare function getScalarResolvers(): Record<string, GraphQLScalarType>;
31
- export declare function toOutputCast(scalarType: string, sqlExp: string): string;
32
- export declare function fromStringCast(scalarType: string, sqlExp: string): string;
33
- export declare function toOutputArrayCast(scalarType: string, sqlExp: string): string;
34
- export declare function fromJsonCast(scalarType: string, objSqlExp: string, prop: string): string;
35
- export declare function fromJsonToOutputCast(scalarType: string, objSqlExp: string, prop: string): string;
36
- //# sourceMappingURL=scalars.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"scalars.d.ts","sourceRoot":"","sources":["../src/scalars.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,OAAO,EAAC,iBAAiB,EAAC,MAAM,SAAS,CAAA;AAGzC,MAAM,WAAW,MAAM;IACnB,GAAG,EAAE,iBAAiB,CAAA;IACtB,cAAc,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,MAAM,CAAA;IAC1C,YAAY,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,MAAM,CAAA;IACxC,iBAAiB,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,MAAM,CAAA;CAChD;AAGD,eAAO,MAAM,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CA0G1C,CAAA;AAyCD,eAAO,MAAM,YAAY,UAAsC,CAAA;AAG/D,wBAAgB,kBAAkB,IAAI,MAAM,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAMtE;AAGD,wBAAgB,YAAY,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAOvE;AAGD,wBAAgB,cAAc,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAOzE;AAGD,wBAAgB,iBAAiB,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAO5E;AAGD,wBAAgB,YAAY,CAAC,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAWxF;AAGD,wBAAgB,oBAAoB,CAAC,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,UAWvF"}
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
@@ -1 +0,0 @@
1
- {"version":3,"file":"scalars.js","sourceRoot":"","sources":["../src/scalars.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;GAmBG;;;AAEH,qCAAyC;AAW5B,QAAA,OAAO,GAA2B;IAC3C,MAAM,EAAE;QACJ,GAAG,EAAE,IAAI,2BAAiB,CAAC;YACvB,IAAI,EAAE,QAAQ;YACd,WAAW,EAAE,oBAAoB;YACjC,SAAS,CAAC,KAA+B;gBACrC,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,MAAM,CAAC,KAAK,CAAC,CAAA;YACxB,CAAC;YACD,YAAY,CAAC,GAAG;gBACZ,QAAO,GAAG,CAAC,IAAI,EAAE;oBACb,KAAK,aAAa;wBACd,IAAI,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE;4BACrB,OAAO,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAA;yBAC3B;6BAAM;4BACH,MAAM,aAAa,CAAC,QAAQ,EAAE,GAAG,CAAC,KAAK,CAAC,CAAA;yBAC3C;oBACL,KAAK,UAAU;wBACX,OAAO,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAA;oBAC5B;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,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,YAAY,GAAG,wDAAwD,CAAA;QAClF,CAAC;QACD,iBAAiB,CAAC,GAAG;YACjB,OAAO,2FAA2F,GAAG,SAAS,CAAA;QAClH,CAAC;KACJ;IACD,KAAK,EAAE;QACH,GAAG,EAAE,IAAI,2BAAiB,CAAC;YACvB,IAAI,EAAE,OAAO;YACb,WAAW,EAAE,6DAA6D;YAC1E,SAAS,CAAC,KAAsB;gBAC5B,IAAI,OAAO,KAAK,IAAI,QAAQ,EAAE;oBAC1B,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC;wBAAE,MAAM,aAAa,CAAC,OAAO,EAAE,KAAK,CAAC,CAAA;oBAC9D,OAAO,KAAK,CAAC,WAAW,EAAE,CAAA;iBAC7B;qBAAM;oBACH,OAAO,IAAI,GAAG,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAA;iBACtC;YACL,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,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,IAAI,IAAI,CAAC,SAAS,CAAC,CAAA;AAC9B,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,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAA;AACzC,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,GAAsC,EAAE,CAAA;IACrD,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,YAAY,CAAC,UAAkB,EAAE,MAAc;IAC3D,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,oCAOC;AAGD,SAAgB,cAAc,CAAC,UAAkB,EAAE,MAAc;IAC7D,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,wCAOC;AAGD,SAAgB,iBAAiB,CAAC,UAAkB,EAAE,MAAc;IAChE,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,8CAOC;AAGD,SAAgB,YAAY,CAAC,UAAkB,EAAE,SAAiB,EAAE,IAAY;IAC5E,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,KAAK,SAAS;YACV,OAAO,IAAI,SAAS,MAAM,IAAI,UAAU,CAAA;QAC5C;YACI,OAAO,cAAc,CAAC,UAAU,EAAE,GAAG,SAAS,OAAO,IAAI,GAAG,CAAC,CAAA;KACpE;AACL,CAAC;AAXD,oCAWC;AAGD,SAAgB,oBAAoB,CAAC,UAAkB,EAAE,SAAiB,EAAE,IAAY;IACpF,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,KAAK,SAAS;YACV,OAAO,IAAI,SAAS,MAAM,IAAI,UAAU,CAAA;QAC5C;YACI,OAAO,GAAG,SAAS,OAAO,IAAI,GAAG,CAAA;KACxC;AACL,CAAC;AAXD,oDAWC"}
@@ -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
- }