@subsquid/openreader 0.4.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 (104) 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 +22 -7
  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 +121 -25
  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.d.ts +2 -0
  47. package/dist/test/isNull.test.d.ts.map +1 -0
  48. package/dist/test/isNull.test.js +75 -0
  49. package/dist/test/isNull.test.js.map +1 -0
  50. package/dist/test/lists.test.js +3 -3
  51. package/dist/test/lists.test.js.map +1 -1
  52. package/dist/test/lookup.test.js +13 -7
  53. package/dist/test/lookup.test.js.map +1 -1
  54. package/dist/test/scalars.test.js +12 -9
  55. package/dist/test/scalars.test.js.map +1 -1
  56. package/dist/test/{util/setup.d.ts → setup.d.ts} +8 -1
  57. package/dist/test/setup.d.ts.map +1 -0
  58. package/dist/test/{util/setup.js → setup.js} +19 -8
  59. package/dist/test/setup.js.map +1 -0
  60. package/dist/test/typed-json.test.js +1 -1
  61. package/dist/test/typed-json.test.js.map +1 -1
  62. package/dist/test/unions.test.js +1 -1
  63. package/dist/test/unions.test.js.map +1 -1
  64. package/dist/test/where.test.js +1 -1
  65. package/dist/test/where.test.js.map +1 -1
  66. package/dist/util.d.ts +1 -0
  67. package/dist/util.d.ts.map +1 -1
  68. package/dist/util.js +5 -1
  69. package/dist/util.js.map +1 -1
  70. package/dist/where.d.ts +1 -1
  71. package/dist/where.d.ts.map +1 -1
  72. package/dist/where.js +3 -0
  73. package/dist/where.js.map +1 -1
  74. package/package.json +4 -4
  75. package/src/dialect.ts +2 -0
  76. package/src/gql/opencrud.ts +24 -8
  77. package/src/gql/scalars/BigInt.ts +34 -0
  78. package/src/gql/scalars/Bytes.ts +28 -0
  79. package/src/gql/scalars/DateTime.ts +45 -0
  80. package/src/gql/scalars/index.ts +10 -0
  81. package/src/gql/schema.ts +3 -2
  82. package/src/queryBuilder.ts +114 -22
  83. package/src/resolver.ts +13 -11
  84. package/src/server.ts +5 -2
  85. package/src/test/basic.test.ts +3 -3
  86. package/src/test/connection.test.ts +1 -1
  87. package/src/test/fts.test.ts +4 -2
  88. package/src/test/isNull.test.ts +79 -0
  89. package/src/test/lists.test.ts +3 -3
  90. package/src/test/lookup.test.ts +13 -7
  91. package/src/test/scalars.test.ts +12 -9
  92. package/src/test/{util/setup.ts → setup.ts} +21 -7
  93. package/src/test/typed-json.test.ts +1 -1
  94. package/src/test/unions.test.ts +1 -1
  95. package/src/test/where.test.ts +1 -1
  96. package/src/util.ts +5 -0
  97. package/src/where.ts +5 -0
  98. package/dist/scalars.d.ts +0 -36
  99. package/dist/scalars.d.ts.map +0 -1
  100. package/dist/scalars.js +0 -229
  101. package/dist/scalars.js.map +0 -1
  102. package/dist/test/util/setup.d.ts.map +0 -1
  103. package/dist/test/util/setup.js.map +0 -1
  104. 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('relay connections', function () {
4
4
  useDatabase([
@@ -1,10 +1,12 @@
1
- import {useDatabase, useServer} from "./util/setup"
1
+ import {isCockroach, useDatabase, useServer} from "./setup"
2
+
2
3
 
3
4
  function tsvector(columns: string[]) {
4
5
  return columns.map(col => `setweight(to_tsvector('english', coalesce(${col}, '')), 'A')`).join(' || ')
5
6
  }
6
7
 
7
- describe('full text search', function () {
8
+
9
+ isCockroach() || describe('full text search', function () {
8
10
  useDatabase([
9
11
  `create table foo (
10
12
  id text primary key,
@@ -0,0 +1,79 @@
1
+ import {useDatabase, useServer} from "./setup"
2
+
3
+
4
+ describe('isNull operator', function() {
5
+ useDatabase([
6
+ `create table meta (id text primary key)`,
7
+ `create table entity (id text primary key, scalar text, json jsonb, meta_id text)`,
8
+ `insert into meta (id) values ('1')`,
9
+ `insert into entity (id, json, meta_id) values ('1', '{"a": 1}', '1')`,
10
+ `insert into entity (id, scalar, meta_id) values ('2', 'foo', '1')`,
11
+ `insert into entity (id, scalar, json) values ('3', 'foo', '{"a": 2}')`,
12
+ `insert into entity (id, scalar, json, meta_id) values ('4', 'foo', '{}', '1')`,
13
+ ])
14
+
15
+ const client = useServer(`
16
+ type Meta @entity {
17
+ id: ID!
18
+ }
19
+
20
+ type Entity @entity {
21
+ id: ID!
22
+ scalar: String
23
+ json: JsonObject
24
+ meta: Meta
25
+ }
26
+
27
+ type JsonObject {
28
+ a: Int
29
+ }
30
+ `)
31
+
32
+ it("on scalar", function() {
33
+ return client.test(`
34
+ query {
35
+ entities(where: {scalar_isNull: true}) {
36
+ id
37
+ }
38
+ }
39
+ `, {
40
+ entities: [{id: '1'}]
41
+ })
42
+ })
43
+
44
+ it("on json", function() {
45
+ return client.test(`
46
+ query {
47
+ entities(where: {json_isNull: true}) {
48
+ id
49
+ }
50
+ }
51
+ `, {
52
+ entities: [{id: '2'}]
53
+ })
54
+ })
55
+
56
+ it("on nested json prop", function() {
57
+ return client.test(`
58
+ query {
59
+ entities(where: {json: {a_isNull: true}} orderBy: id_ASC) {
60
+ id
61
+ }
62
+ }
63
+ `, {
64
+ entities: [{id: '2'}, {id: '4'}]
65
+ })
66
+ })
67
+
68
+ it("on fk", function() {
69
+ return client.test(`
70
+ query {
71
+ entities(where: {meta_isNull: true}) {
72
+ id
73
+ }
74
+ }
75
+ `, {
76
+ entities: [{id: '3'}]
77
+ })
78
+ })
79
+ })
@@ -1,4 +1,4 @@
1
- import {useDatabase, useServer} from "./util/setup"
1
+ import {useDatabase, useServer} from "./setup"
2
2
 
3
3
 
4
4
  describe('lists', function () {
@@ -172,8 +172,8 @@ describe('lists', function () {
172
172
  `, {
173
173
  lists: [{
174
174
  datetimeArray: [
175
- '2020-01-01T00:00:00.000Z',
176
- '2021-01-01T00:00:00.000Z'
175
+ '2020-01-01T00:00:00.000000Z',
176
+ '2021-01-01T00:00:00.000000Z'
177
177
  ]
178
178
  }]
179
179
  })
@@ -1,4 +1,4 @@
1
- import {useDatabase, useServer} from "./util/setup"
1
+ import {isCockroach, useDatabase, useServer} from "./setup"
2
2
 
3
3
  describe('lookup test', function () {
4
4
  useDatabase([
@@ -82,16 +82,22 @@ describe('lookup test', function () {
82
82
  it('supports sorting on lookup fields', function () {
83
83
  return client.test(`
84
84
  query {
85
- issues(orderBy: [payment_amount_DESC]) {
85
+ issues(orderBy: [payment_amount_ASC]) {
86
86
  id
87
87
  }
88
88
  }
89
89
  `, {
90
- issues: [
91
- {id: '3'},
92
- {id: '1'},
93
- {id: '2'}
94
- ]
90
+ issues: isCockroach()
91
+ ? [
92
+ {id: '3'},
93
+ {id: '2'},
94
+ {id: '1'}
95
+ ]
96
+ : [
97
+ {id: '2'},
98
+ {id: '1'},
99
+ {id: '3'}
100
+ ]
95
101
  })
96
102
  })
97
103
 
@@ -1,4 +1,4 @@
1
- import {useDatabase, useServer} from "./util/setup"
1
+ import {useDatabase, useServer} from "./setup"
2
2
 
3
3
  describe('scalars', function() {
4
4
  useDatabase([
@@ -12,6 +12,7 @@ describe('scalars', function() {
12
12
  `insert into scalar (id, "string") values ('7', 'bar baz foo')`,
13
13
  `insert into scalar (id, "string") values ('8', 'baz foo bar')`,
14
14
  `insert into scalar (id, "string") values ('9', 'hello')`,
15
+ `insert into scalar (id, "string") values ('9-1', 'A fOo B')`,
15
16
  `insert into scalar (id, "date_time", deep) values ('10', '2021-09-24T15:43:13.400Z', '{"dateTime": "2021-09-24T00:00:00.120Z"}'::jsonb)`,
16
17
  `insert into scalar (id, "date_time", deep) values ('11', '2021-09-24T00:00:00.000Z', '{"dateTime": "2021-09-24T00:00:00Z"}'::jsonb)`,
17
18
  `insert into scalar (id, "date_time", deep) values ('12', '2021-09-24 02:00:00.001 +01:00', '{"dateTime": "2021-09-24T00:00:00.1Z"}'::jsonb)`,
@@ -106,16 +107,18 @@ describe('scalars', function() {
106
107
  not_ends_with: scalars(where: {string_not_endsWith: "foo"} orderBy: id_ASC) { id }
107
108
  contains: scalars(where: {string_contains: "foo"} orderBy: id_ASC) { id }
108
109
  not_contains: scalars(where: {string_not_contains: "foo"} orderBy: id_ASC) { id }
109
- case_sensitive: scalars(where: {string_contains: "Foo"} orderBy: id_ASC) { id }
110
+ contains_insensitive: scalars(where: {string_containsInsensitive: "FoO"} orderBy: id_ASC) { id }
111
+ not_contains_insensitive: scalars(where: {string_not_containsInsensitive: "FoO"} orderBy: id_ASC) { id }
110
112
  }
111
113
  `, {
112
114
  starts_with: [{id: '6'}],
113
- not_starts_with: [{id: '7'}, {id: '8'}, {id: '9'}],
115
+ not_starts_with: [{id: '7'}, {id: '8'}, {id: '9'}, {id: '9-1'}],
114
116
  ends_with: [{id: '7'}],
115
- not_ends_with: [{id: '6'}, {id: '8'}, {id: '9'}],
117
+ not_ends_with: [{id: '6'}, {id: '8'}, {id: '9'}, {id: '9-1'}],
116
118
  contains: [{id: '6'}, {id: '7'}, {id: '8'}],
117
- not_contains: [{id: '9'}],
118
- case_sensitive: []
119
+ not_contains: [{id: '9'}, {id: '9-1'}],
120
+ contains_insensitive: [{id: '6'}, {id: '7'}, {id: '8'}, {id: '9-1'}],
121
+ not_contains_insensitive: [{id: '9'}]
119
122
  })
120
123
  })
121
124
  })
@@ -239,9 +242,9 @@ describe('scalars', function() {
239
242
  }
240
243
  `, {
241
244
  scalars: [
242
- {id: '10', dateTime: '2021-09-24T15:43:13.400Z', deep: {dateTime: '2021-09-24T00:00:00.120Z'}},
243
- {id: '11', dateTime: '2021-09-24T00:00:00.000Z', deep: {dateTime: '2021-09-24T00:00:00Z'}},
244
- {id: '12', dateTime: '2021-09-24T01:00:00.001Z', deep: {dateTime: '2021-09-24T00:00:00.1Z'}}
245
+ {id: '10', dateTime: '2021-09-24T15:43:13.400000Z', deep: {dateTime: '2021-09-24T00:00:00.120Z'}},
246
+ {id: '11', dateTime: '2021-09-24T00:00:00.000000Z', deep: {dateTime: '2021-09-24T00:00:00Z'}},
247
+ {id: '12', dateTime: '2021-09-24T01:00:00.001000Z', deep: {dateTime: '2021-09-24T00:00:00.1Z'}}
245
248
  ]
246
249
  })
247
250
  })
@@ -1,12 +1,25 @@
1
+ import {assertNotNull} from "@subsquid/util"
1
2
  import {Client} from "gql-test-client"
2
3
  import {parse} from "graphql"
3
4
  import {Client as PgClient, ClientBase, Pool} from "pg"
4
- import {createPoolConfig} from "../../db"
5
- import {buildModel, buildSchema} from "../../gql/schema"
6
- import {ListeningServer, serve} from "../../server"
5
+ import {buildModel, buildSchema} from "../gql/schema"
6
+ import {ListeningServer, serve} from "../server"
7
7
 
8
8
 
9
- export const db_config = createPoolConfig()
9
+ export function isCockroach(): boolean {
10
+ return process.env.DB_TYPE == 'cockroach'
11
+ }
12
+
13
+
14
+ export const db_config = {
15
+ host: 'localhost',
16
+ port: parseInt(assertNotNull(
17
+ isCockroach() ? process.env.DB_PORT_COCKROACH : process.env.DB_PORT_PG
18
+ )),
19
+ user: 'root',
20
+ password: 'root',
21
+ database: 'defaultdb'
22
+ }
10
23
 
11
24
 
12
25
  async function withClient(block: (client: ClientBase) => Promise<void>): Promise<void> {
@@ -31,8 +44,8 @@ export function databaseInit(sql: string[]): Promise<void> {
31
44
 
32
45
  export function databaseDelete(): Promise<void> {
33
46
  return withClient(async client => {
34
- await client.query(`DROP SCHEMA IF EXISTS public CASCADE`)
35
- await client.query(`CREATE SCHEMA public`)
47
+ await client.query(`DROP SCHEMA IF EXISTS root CASCADE`)
48
+ await client.query(`CREATE SCHEMA root`)
36
49
  })
37
50
  }
38
51
 
@@ -53,7 +66,8 @@ export function useServer(schema: string): Client {
53
66
  info = await serve({
54
67
  db,
55
68
  model: buildModel(buildSchema(parse(schema))),
56
- port: 0
69
+ port: 0,
70
+ dialect: isCockroach() ? 'cockroach' : 'postgres'
57
71
  })
58
72
  client.endpoint = `http://localhost:${info.port}/graphql`
59
73
  })
@@ -1,4 +1,4 @@
1
- import {useDatabase, useServer} from "./util/setup"
1
+ import {useDatabase, useServer} from "./setup"
2
2
 
3
3
  describe('typed json fields', 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('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
@@ -1,6 +1,7 @@
1
1
 
2
2
  export type WhereOp =
3
3
  '-' | // no operator
4
+ 'isNull' |
4
5
  'eq' | 'not_eq' |
5
6
  'gt' |
6
7
  'gte' |
@@ -8,6 +9,7 @@ export type WhereOp =
8
9
  'lte' |
9
10
  'in' | 'not_in' |
10
11
  'contains' | 'not_contains' |
12
+ 'containsInsensitive' | 'not_containsInsensitive' |
11
13
  'startsWith' | 'not_startsWith' |
12
14
  'endsWith' | 'not_endsWith' |
13
15
  'containsAll' |
@@ -19,6 +21,7 @@ export type WhereOp =
19
21
 
20
22
 
21
23
  const ENDINGS = [
24
+ 'isNull',
22
25
  'eq',
23
26
  'not_eq',
24
27
  'gt',
@@ -29,6 +32,8 @@ const ENDINGS = [
29
32
  'not_in',
30
33
  'contains',
31
34
  'not_contains',
35
+ 'containsInsensitive',
36
+ 'not_containsInsensitive',
32
37
  'startsWith',
33
38
  'not_startsWith',
34
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":"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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"}