@subsquid/openreader 1.0.2 → 2.1.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 (295) hide show
  1. package/bin/main.js +1 -1
  2. package/lib/context.d.ts +14 -0
  3. package/lib/context.d.ts.map +1 -0
  4. package/lib/context.js +3 -0
  5. package/lib/context.js.map +1 -0
  6. package/lib/db.d.ts +23 -0
  7. package/lib/db.d.ts.map +1 -0
  8. package/lib/db.js +57 -0
  9. package/lib/db.js.map +1 -0
  10. package/{dist → lib}/dialect.d.ts +0 -0
  11. package/{dist → lib}/dialect.d.ts.map +0 -0
  12. package/{dist → lib}/dialect.js +0 -0
  13. package/{dist → lib}/dialect.js.map +0 -0
  14. package/lib/ir/args.d.ts +47 -0
  15. package/lib/ir/args.d.ts.map +1 -0
  16. package/lib/ir/args.js +3 -0
  17. package/lib/ir/args.js.map +1 -0
  18. package/lib/ir/connection.d.ts +30 -0
  19. package/lib/ir/connection.d.ts.map +1 -0
  20. package/lib/ir/connection.js +17 -0
  21. package/lib/ir/connection.js.map +1 -0
  22. package/lib/ir/fields.d.ts +22 -0
  23. package/lib/ir/fields.d.ts.map +1 -0
  24. package/lib/ir/fields.js +3 -0
  25. package/lib/ir/fields.js.map +1 -0
  26. package/lib/limit.size.d.ts +8 -0
  27. package/lib/limit.size.d.ts.map +1 -0
  28. package/lib/limit.size.js +107 -0
  29. package/lib/limit.size.js.map +1 -0
  30. package/{dist → lib}/main.d.ts +0 -0
  31. package/{dist → lib}/main.d.ts.map +0 -0
  32. package/lib/main.js +59 -0
  33. package/lib/main.js.map +1 -0
  34. package/{dist → lib}/model.d.ts +11 -1
  35. package/lib/model.d.ts.map +1 -0
  36. package/{dist → lib}/model.js +0 -0
  37. package/{dist → lib}/model.js.map +0 -0
  38. package/{dist/gql/schema.d.ts → lib/model.schema.d.ts} +2 -2
  39. package/lib/model.schema.d.ts.map +1 -0
  40. package/{dist/gql/schema.js → lib/model.schema.js} +62 -8
  41. package/lib/model.schema.js.map +1 -0
  42. package/{dist → lib}/model.tools.d.ts +0 -0
  43. package/{dist → lib}/model.tools.d.ts.map +0 -0
  44. package/{dist → lib}/model.tools.js +0 -0
  45. package/{dist → lib}/model.tools.js.map +0 -0
  46. package/{dist → lib/opencrud}/orderBy.d.ts +2 -5
  47. package/lib/opencrud/orderBy.d.ts.map +1 -0
  48. package/{dist → lib/opencrud}/orderBy.js +1 -1
  49. package/lib/opencrud/orderBy.js.map +1 -0
  50. package/lib/opencrud/schema.d.ts +31 -0
  51. package/lib/opencrud/schema.d.ts.map +1 -0
  52. package/lib/opencrud/schema.js +527 -0
  53. package/lib/opencrud/schema.js.map +1 -0
  54. package/lib/opencrud/tree.d.ts +8 -0
  55. package/lib/opencrud/tree.d.ts.map +1 -0
  56. package/lib/opencrud/tree.js +131 -0
  57. package/lib/opencrud/tree.js.map +1 -0
  58. package/lib/opencrud/where.d.ts +7 -0
  59. package/lib/opencrud/where.d.ts.map +1 -0
  60. package/lib/opencrud/where.js +141 -0
  61. package/lib/opencrud/where.js.map +1 -0
  62. package/{dist/gql → lib}/scalars/BigInt.d.ts +0 -0
  63. package/lib/scalars/BigInt.d.ts.map +1 -0
  64. package/{dist/gql → lib}/scalars/BigInt.js +1 -1
  65. package/lib/scalars/BigInt.js.map +1 -0
  66. package/{dist/gql → lib}/scalars/Bytes.d.ts +0 -0
  67. package/lib/scalars/Bytes.d.ts.map +1 -0
  68. package/{dist/gql → lib}/scalars/Bytes.js +2 -2
  69. package/lib/scalars/Bytes.js.map +1 -0
  70. package/{dist/gql → lib}/scalars/DateTime.d.ts +0 -0
  71. package/lib/scalars/DateTime.d.ts.map +1 -0
  72. package/{dist/gql → lib}/scalars/DateTime.js +1 -1
  73. package/lib/scalars/DateTime.js.map +1 -0
  74. package/{dist/gql → lib}/scalars/JSON.d.ts +0 -0
  75. package/lib/scalars/JSON.d.ts.map +1 -0
  76. package/{dist/gql → lib}/scalars/JSON.js +0 -0
  77. package/lib/scalars/JSON.js.map +1 -0
  78. package/{dist/gql → lib}/scalars/index.d.ts +0 -0
  79. package/lib/scalars/index.d.ts.map +1 -0
  80. package/{dist/gql → lib}/scalars/index.js +0 -0
  81. package/lib/scalars/index.js.map +1 -0
  82. package/lib/server.d.ts +42 -0
  83. package/lib/server.d.ts.map +1 -0
  84. package/lib/server.js +171 -0
  85. package/lib/server.js.map +1 -0
  86. package/lib/sql/cursor.d.ts +52 -0
  87. package/lib/sql/cursor.d.ts.map +1 -0
  88. package/lib/sql/cursor.js +234 -0
  89. package/lib/sql/cursor.js.map +1 -0
  90. package/lib/sql/mapping.d.ts +4 -0
  91. package/lib/sql/mapping.d.ts.map +1 -0
  92. package/lib/sql/mapping.js +71 -0
  93. package/lib/sql/mapping.js.map +1 -0
  94. package/lib/sql/printer.d.ts +37 -0
  95. package/lib/sql/printer.d.ts.map +1 -0
  96. package/lib/sql/printer.js +311 -0
  97. package/lib/sql/printer.js.map +1 -0
  98. package/lib/sql/query.d.ts +46 -0
  99. package/lib/sql/query.d.ts.map +1 -0
  100. package/lib/sql/query.js +134 -0
  101. package/lib/sql/query.js.map +1 -0
  102. package/lib/sql/util.d.ts +30 -0
  103. package/lib/sql/util.d.ts.map +1 -0
  104. package/lib/sql/util.js +75 -0
  105. package/lib/sql/util.js.map +1 -0
  106. package/lib/subscription.d.ts +18 -0
  107. package/lib/subscription.d.ts.map +1 -0
  108. package/lib/subscription.js +47 -0
  109. package/lib/subscription.js.map +1 -0
  110. package/{dist → lib}/test/basic.test.d.ts +0 -0
  111. package/{dist → lib}/test/basic.test.d.ts.map +0 -0
  112. package/{dist → lib}/test/basic.test.js +0 -0
  113. package/{dist → lib}/test/basic.test.js.map +0 -0
  114. package/{dist → lib}/test/connection.test.d.ts +0 -0
  115. package/{dist → lib}/test/connection.test.d.ts.map +0 -0
  116. package/{dist → lib}/test/connection.test.js +0 -0
  117. package/{dist → lib}/test/connection.test.js.map +0 -0
  118. package/{dist → lib}/test/fts.test.d.ts +0 -0
  119. package/{dist → lib}/test/fts.test.d.ts.map +0 -0
  120. package/{dist → lib}/test/fts.test.js +1 -1
  121. package/lib/test/fts.test.js.map +1 -0
  122. package/{dist → lib}/test/isNull.test.d.ts +0 -0
  123. package/{dist → lib}/test/isNull.test.d.ts.map +0 -0
  124. package/{dist → lib}/test/isNull.test.js +0 -0
  125. package/{dist → lib}/test/isNull.test.js.map +0 -0
  126. package/lib/test/limits.test.d.ts +2 -0
  127. package/lib/test/limits.test.d.ts.map +1 -0
  128. package/lib/test/limits.test.js +159 -0
  129. package/lib/test/limits.test.js.map +1 -0
  130. package/{dist → lib}/test/lists.test.d.ts +0 -0
  131. package/{dist → lib}/test/lists.test.d.ts.map +0 -0
  132. package/{dist → lib}/test/lists.test.js +0 -0
  133. package/{dist → lib}/test/lists.test.js.map +0 -0
  134. package/{dist → lib}/test/lookup.test.d.ts +0 -0
  135. package/{dist → lib}/test/lookup.test.d.ts.map +0 -0
  136. package/{dist → lib}/test/lookup.test.js +0 -0
  137. package/{dist → lib}/test/lookup.test.js.map +0 -0
  138. package/{dist → lib}/test/regressions.test.d.ts +0 -0
  139. package/{dist → lib}/test/regressions.test.d.ts.map +0 -0
  140. package/{dist → lib}/test/regressions.test.js +0 -0
  141. package/{dist → lib}/test/regressions.test.js.map +0 -0
  142. package/{dist → lib}/test/scalars.test.d.ts +0 -0
  143. package/{dist → lib}/test/scalars.test.d.ts.map +0 -0
  144. package/{dist → lib}/test/scalars.test.js +0 -0
  145. package/{dist → lib}/test/scalars.test.js.map +0 -0
  146. package/lib/test/setup.d.ts +17 -0
  147. package/lib/test/setup.d.ts.map +1 -0
  148. package/{dist → lib}/test/setup.js +18 -13
  149. package/lib/test/setup.js.map +1 -0
  150. package/lib/test/subscription.test.d.ts +2 -0
  151. package/lib/test/subscription.test.d.ts.map +1 -0
  152. package/lib/test/subscription.test.js +99 -0
  153. package/lib/test/subscription.test.js.map +1 -0
  154. package/{dist → lib}/test/tools.test.d.ts +0 -0
  155. package/{dist → lib}/test/tools.test.d.ts.map +0 -0
  156. package/{dist → lib}/test/tools.test.js +0 -0
  157. package/{dist → lib}/test/tools.test.js.map +0 -0
  158. package/{dist → lib}/test/typed-json.test.d.ts +0 -0
  159. package/{dist → lib}/test/typed-json.test.d.ts.map +0 -0
  160. package/{dist → lib}/test/typed-json.test.js +0 -0
  161. package/{dist → lib}/test/typed-json.test.js.map +0 -0
  162. package/{dist → lib}/test/unions.test.d.ts +0 -0
  163. package/{dist → lib}/test/unions.test.d.ts.map +0 -0
  164. package/{dist → lib}/test/unions.test.js +0 -0
  165. package/{dist → lib}/test/unions.test.js.map +0 -0
  166. package/{dist → lib}/test/where.test.d.ts +0 -0
  167. package/{dist → lib}/test/where.test.d.ts.map +0 -0
  168. package/{dist → lib}/test/where.test.js +0 -0
  169. package/{dist → lib}/test/where.test.js.map +0 -0
  170. package/{dist → lib}/tools.d.ts +0 -0
  171. package/{dist → lib}/tools.d.ts.map +0 -0
  172. package/{dist → lib}/tools.js +3 -3
  173. package/{dist → lib}/tools.js.map +1 -1
  174. package/lib/util/error-handling.d.ts +11 -0
  175. package/lib/util/error-handling.d.ts.map +1 -0
  176. package/lib/util/error-handling.js +42 -0
  177. package/lib/util/error-handling.js.map +1 -0
  178. package/lib/util/execute.d.ts +5 -0
  179. package/lib/util/execute.d.ts.map +1 -0
  180. package/lib/util/execute.js +28 -0
  181. package/lib/util/execute.js.map +1 -0
  182. package/lib/util/lazy-transaction.d.ts +10 -0
  183. package/lib/util/lazy-transaction.d.ts.map +1 -0
  184. package/lib/util/lazy-transaction.js +43 -0
  185. package/lib/util/lazy-transaction.js.map +1 -0
  186. package/lib/util/limit.d.ts +11 -0
  187. package/lib/util/limit.d.ts.map +1 -0
  188. package/lib/util/limit.js +39 -0
  189. package/lib/util/limit.js.map +1 -0
  190. package/lib/util/resolve-tree.d.ts +14 -0
  191. package/lib/util/resolve-tree.d.ts.map +1 -0
  192. package/lib/util/resolve-tree.js +52 -0
  193. package/lib/util/resolve-tree.js.map +1 -0
  194. package/{dist → lib/util}/util.d.ts +2 -3
  195. package/lib/util/util.d.ts.map +1 -0
  196. package/{dist → lib/util}/util.js +9 -13
  197. package/lib/util/util.js.map +1 -0
  198. package/package.json +18 -10
  199. package/src/context.ts +17 -0
  200. package/src/db.ts +46 -57
  201. package/src/ir/args.ts +85 -0
  202. package/src/ir/connection.ts +48 -0
  203. package/src/ir/fields.ts +40 -0
  204. package/src/limit.size.ts +130 -0
  205. package/src/main.ts +74 -42
  206. package/src/{gql/schema.ts → model.schema.ts} +72 -9
  207. package/src/model.ts +13 -1
  208. package/src/{orderBy.ts → opencrud/orderBy.ts} +3 -10
  209. package/src/opencrud/schema.ts +639 -0
  210. package/src/opencrud/tree.ts +144 -0
  211. package/src/opencrud/where.ts +141 -0
  212. package/src/{gql/scalars → scalars}/BigInt.ts +1 -1
  213. package/src/{gql/scalars → scalars}/Bytes.ts +4 -4
  214. package/src/{gql/scalars → scalars}/DateTime.ts +1 -1
  215. package/src/{gql/scalars → scalars}/JSON.ts +0 -0
  216. package/src/{gql/scalars → scalars}/index.ts +0 -0
  217. package/src/server.ts +175 -55
  218. package/src/sql/cursor.ts +291 -0
  219. package/src/sql/mapping.ts +66 -0
  220. package/src/sql/printer.ts +328 -0
  221. package/src/sql/query.ts +194 -0
  222. package/src/sql/util.ts +89 -0
  223. package/src/subscription.ts +46 -0
  224. package/src/test/fts.test.ts +1 -1
  225. package/src/test/limits.test.ts +163 -0
  226. package/src/test/setup.ts +16 -11
  227. package/src/test/subscription.test.ts +98 -0
  228. package/src/tools.ts +1 -1
  229. package/src/util/error-handling.ts +40 -0
  230. package/src/util/execute.ts +53 -0
  231. package/src/util/lazy-transaction.ts +49 -0
  232. package/src/util/limit.ts +34 -0
  233. package/src/util/resolve-tree.ts +65 -0
  234. package/src/{util.ts → util/util.ts} +9 -14
  235. package/dist/db.d.ts +0 -28
  236. package/dist/db.d.ts.map +0 -1
  237. package/dist/db.js +0 -69
  238. package/dist/db.js.map +0 -1
  239. package/dist/gql/opencrud.d.ts +0 -6
  240. package/dist/gql/opencrud.d.ts.map +0 -1
  241. package/dist/gql/opencrud.js +0 -326
  242. package/dist/gql/opencrud.js.map +0 -1
  243. package/dist/gql/scalars/BigInt.d.ts.map +0 -1
  244. package/dist/gql/scalars/BigInt.js.map +0 -1
  245. package/dist/gql/scalars/Bytes.d.ts.map +0 -1
  246. package/dist/gql/scalars/Bytes.js.map +0 -1
  247. package/dist/gql/scalars/DateTime.d.ts.map +0 -1
  248. package/dist/gql/scalars/DateTime.js.map +0 -1
  249. package/dist/gql/scalars/JSON.d.ts.map +0 -1
  250. package/dist/gql/scalars/JSON.js.map +0 -1
  251. package/dist/gql/scalars/index.d.ts.map +0 -1
  252. package/dist/gql/scalars/index.js.map +0 -1
  253. package/dist/gql/schema.d.ts.map +0 -1
  254. package/dist/gql/schema.js.map +0 -1
  255. package/dist/main.js +0 -44
  256. package/dist/main.js.map +0 -1
  257. package/dist/model.d.ts.map +0 -1
  258. package/dist/orderBy.d.ts.map +0 -1
  259. package/dist/orderBy.js.map +0 -1
  260. package/dist/queryBuilder.d.ts +0 -56
  261. package/dist/queryBuilder.d.ts.map +0 -1
  262. package/dist/queryBuilder.js +0 -733
  263. package/dist/queryBuilder.js.map +0 -1
  264. package/dist/relayConnection.d.ts +0 -37
  265. package/dist/relayConnection.d.ts.map +0 -1
  266. package/dist/relayConnection.js +0 -43
  267. package/dist/relayConnection.js.map +0 -1
  268. package/dist/requestedFields.d.ts +0 -33
  269. package/dist/requestedFields.d.ts.map +0 -1
  270. package/dist/requestedFields.js +0 -179
  271. package/dist/requestedFields.js.map +0 -1
  272. package/dist/resolver.d.ts +0 -9
  273. package/dist/resolver.d.ts.map +0 -1
  274. package/dist/resolver.js +0 -158
  275. package/dist/resolver.js.map +0 -1
  276. package/dist/server.d.ts +0 -22
  277. package/dist/server.d.ts.map +0 -1
  278. package/dist/server.js +0 -96
  279. package/dist/server.js.map +0 -1
  280. package/dist/test/fts.test.js.map +0 -1
  281. package/dist/test/setup.d.ts +0 -14
  282. package/dist/test/setup.d.ts.map +0 -1
  283. package/dist/test/setup.js.map +0 -1
  284. package/dist/util.d.ts.map +0 -1
  285. package/dist/util.js.map +0 -1
  286. package/dist/where.d.ts +0 -9
  287. package/dist/where.d.ts.map +0 -1
  288. package/dist/where.js +0 -101
  289. package/dist/where.js.map +0 -1
  290. package/src/gql/opencrud.ts +0 -350
  291. package/src/queryBuilder.ts +0 -891
  292. package/src/relayConnection.ts +0 -80
  293. package/src/requestedFields.ts +0 -246
  294. package/src/resolver.ts +0 -201
  295. package/src/where.ts +0 -119
@@ -0,0 +1,40 @@
1
+ import {Logger, LogLevel} from "@subsquid/logger"
2
+ import {GraphQLError, printError} from "graphql"
3
+
4
+
5
+ export function logGraphQLError(log: Logger, err: GraphQLError, level: LogLevel = LogLevel.ERROR): void {
6
+ if (log.level > level) return
7
+ let msg = printError(err) + '\n'
8
+ log.write(level, {
9
+ graphqlOriginalError: err.originalError,
10
+ graphqlPath: err.path?.join('.'),
11
+ graphqlQuery: err.source?.body,
12
+ }, msg)
13
+ }
14
+
15
+
16
+ export function withErrorContext(ctx: object): (err: unknown) => never {
17
+ return function(err): never {
18
+ throw addErrorContext(err, ctx)
19
+ }
20
+ }
21
+
22
+
23
+ export function addErrorContext(error: unknown, ctx: object): Error {
24
+ let e = ensureError(error)
25
+ Object.assign(e, ctx)
26
+ return e
27
+ }
28
+
29
+
30
+ export function ensureError(err: unknown): Error {
31
+ if (err instanceof Error) return err
32
+ return new NonErrorThrown(err)
33
+ }
34
+
35
+
36
+ export class NonErrorThrown extends Error {
37
+ constructor(public readonly value: unknown) {
38
+ super('Non error object thrown')
39
+ }
40
+ }
@@ -0,0 +1,53 @@
1
+ import {getOperationRootType, GraphQLError} from 'graphql'
2
+ import {ExecutionResult} from 'graphql-ws'
3
+ import {
4
+ assertValidExecutionArguments,
5
+ buildExecutionContext,
6
+ collectFields,
7
+ execute as graphqlExecute,
8
+ ExecutionArgs,
9
+ ExecutionContext
10
+ } from 'graphql/execution/execute'
11
+ import {PromiseOrValue} from 'graphql/jsutils/PromiseOrValue'
12
+
13
+
14
+ export function executeWithLimit(maxQueries: number, args: ExecutionArgs): PromiseOrValue<ExecutionResult> {
15
+ assertValidExecutionArguments(args.schema, args.document, args.variableValues)
16
+
17
+ let xtx = buildExecutionContext(
18
+ args.schema,
19
+ args.document,
20
+ args.rootValue,
21
+ args.contextValue,
22
+ args.variableValues,
23
+ args.operationName,
24
+ args.fieldResolver,
25
+ args.typeResolver
26
+ )
27
+
28
+ if (Array.isArray(xtx)) {
29
+ return {errors: xtx}
30
+ }
31
+
32
+ let etx = xtx as ExecutionContext
33
+ if (etx.operation.operation == 'query') {
34
+ let query = getOperationRootType(etx.schema, etx.operation)
35
+ let fields = collectFields(
36
+ etx,
37
+ query,
38
+ etx.operation.selectionSet,
39
+ Object.create(null),
40
+ Object.create(null)
41
+ )
42
+ let fieldsCount = Object.keys(fields).length
43
+ if (fieldsCount > maxQueries) {
44
+ return {
45
+ errors: [
46
+ new GraphQLError(`only ${maxQueries} root query fields allowed, but got ${fieldsCount}`)
47
+ ]
48
+ }
49
+ }
50
+ }
51
+
52
+ return graphqlExecute(args)
53
+ }
@@ -0,0 +1,49 @@
1
+ interface Tx<T> {
2
+ close(): void
3
+ ctx: T
4
+ }
5
+
6
+
7
+ export class LazyTransaction<T> {
8
+ private closed = false
9
+
10
+ private tx?: Promise<Tx<T>>
11
+
12
+ constructor(private transact: (f: (ctx: T) => Promise<void>) => Promise<void>) {
13
+ }
14
+
15
+ async get(): Promise<T> {
16
+ if (this.closed) {
17
+ throw new Error("Too late to request transaction")
18
+ }
19
+ this.tx = this.tx || this.startTransaction()
20
+ let {ctx} = await this.tx
21
+ return ctx
22
+ }
23
+
24
+ private async startTransaction(): Promise<Tx<T>> {
25
+ return new Promise((resolve, reject) => {
26
+ let promise = this.transact(ctx => {
27
+ return new Promise<void>(close => {
28
+ resolve({
29
+ ctx,
30
+ close: () => {
31
+ close()
32
+ return promise
33
+ }
34
+ })
35
+ })
36
+ })
37
+ promise.catch(err => reject(err))
38
+ })
39
+ }
40
+
41
+ async close(): Promise<void> {
42
+ this.closed = true
43
+ if (this.tx) {
44
+ let tx = this.tx
45
+ this.tx = undefined
46
+ await tx.then(tx => tx.close())
47
+ }
48
+ }
49
+ }
@@ -0,0 +1,34 @@
1
+ import assert from 'assert'
2
+ import {GraphQLError} from 'graphql'
3
+
4
+
5
+ export class Limit {
6
+ constructor(private error: Error, private value: number) {
7
+ assert(this.value > 0)
8
+ }
9
+
10
+ get left(): number {
11
+ return Math.max(this.value, 0)
12
+ }
13
+
14
+ check(cb: (left: number) => number): void {
15
+ if (this.value < 0) throw this.error
16
+ let left = this.value - cb(this.value)
17
+ if (left < 0) {
18
+ throw this.error
19
+ } else {
20
+ this.value = left
21
+ }
22
+ }
23
+ }
24
+
25
+
26
+ const SIZE_LIMIT = new GraphQLError('response might exceed the size limit')
27
+ SIZE_LIMIT.stack = undefined
28
+
29
+
30
+ export class ResponseSizeLimit extends Limit {
31
+ constructor(maxNodes: number) {
32
+ super(SIZE_LIMIT, maxNodes)
33
+ }
34
+ }
@@ -0,0 +1,65 @@
1
+ import {UserInputError} from "apollo-server-core"
2
+ import assert from "assert"
3
+ import {GraphQLResolveInfo, GraphQLSchema} from "graphql"
4
+ import {
5
+ FieldsByTypeName,
6
+ parseResolveInfo,
7
+ ResolveTree,
8
+ simplifyParsedResolveInfoFragmentWithType
9
+ } from "graphql-parse-resolve-info"
10
+
11
+
12
+ export type ResolveTreeFields = {
13
+ [alias: string]: ResolveTree
14
+ }
15
+
16
+
17
+ export interface ResolveTreeWithFields extends ResolveTree {
18
+ fields: ResolveTreeFields
19
+ }
20
+
21
+
22
+ export function simplifyResolveTree(schema: GraphQLSchema, tree: ResolveTree, typeName: string): ResolveTreeWithFields {
23
+ let type = schema.getType(typeName)
24
+ assert(type != null)
25
+ return simplifyParsedResolveInfoFragmentWithType(tree, type)
26
+ }
27
+
28
+
29
+ export function getResolveTree(info: GraphQLResolveInfo): ResolveTree
30
+ export function getResolveTree(info: GraphQLResolveInfo, typeName: string): ResolveTreeWithFields
31
+ export function getResolveTree(info: GraphQLResolveInfo, typeName?: string): ResolveTree {
32
+ let tree = parseResolveInfo(info)
33
+ assert(isResolveTree(tree))
34
+ if (typeName) {
35
+ return simplifyResolveTree(info.schema, tree, typeName)
36
+ } else {
37
+ return tree
38
+ }
39
+ }
40
+
41
+
42
+ function isResolveTree(resolveInfo: ResolveTree | FieldsByTypeName | null | undefined): resolveInfo is ResolveTree {
43
+ return resolveInfo != null && resolveInfo.fieldsByTypeName != null
44
+ }
45
+
46
+
47
+ export function getTreeRequest(treeFields: ResolveTreeFields, fieldName: string): ResolveTree | undefined {
48
+ let req: ResolveTree | undefined
49
+ for (let alias in treeFields) {
50
+ let e = treeFields[alias]
51
+ if (e.name != fieldName) continue
52
+ if (req != null) throw new UserInputError(`multiple aliases for field '${fieldName}' are not supported`)
53
+ req = e
54
+ }
55
+ return req
56
+ }
57
+
58
+
59
+ export function hasTreeRequest(treeFields: ResolveTreeFields, fieldName: string): boolean {
60
+ for (let alias in treeFields) {
61
+ let e = treeFields[alias]
62
+ if (e.name == fieldName) return true
63
+ }
64
+ return false
65
+ }
@@ -1,12 +1,7 @@
1
- import {toCamelCase, toPlural, toSnakeCase} from "@subsquid/util-naming"
1
+ import {toSnakeCase} from "@subsquid/util-naming"
2
2
  import assert from "assert"
3
3
 
4
4
 
5
- export function toQueryListField(entityName: string): string {
6
- return toPlural(toCamelCase(entityName))
7
- }
8
-
9
-
10
5
  export function toColumn(gqlFieldName: string): string {
11
6
  return toSnakeCase(gqlFieldName)
12
7
  }
@@ -27,14 +22,9 @@ export function ensureArray<T>(item: T | T[]): T[] {
27
22
  }
28
23
 
29
24
 
30
- export function unsupportedCase(value: string): Error {
31
- return new Error(`Unsupported case: ${value}`)
32
- }
33
-
34
-
35
- export function toInt(val: number | string): number {
36
- let i = parseInt(val as string)
37
- assert(!isNaN(i) && isFinite(i))
25
+ export function toSafeInteger(s: number | string): number {
26
+ let i = parseInt(s as string, 10)
27
+ assert(Number.isSafeInteger(i))
38
28
  return i
39
29
  }
40
30
 
@@ -42,3 +32,8 @@ export function toInt(val: number | string): number {
42
32
  export function invalidFormat(type: string, value: string): Error {
43
33
  return new TypeError(`Not a ${type}: ${value}`)
44
34
  }
35
+
36
+
37
+ export function identity<T>(x: T): T {
38
+ return x
39
+ }
package/dist/db.d.ts DELETED
@@ -1,28 +0,0 @@
1
- import type { ClientBase, Pool, PoolConfig } from "pg";
2
- export interface Database {
3
- query(sql: string, parameters?: any[]): Promise<any[][]>;
4
- escapeIdentifier(name: string): string;
5
- }
6
- /**
7
- * This is an interface OpenReader uses to interact with underling database.
8
- */
9
- export interface Transaction {
10
- get(): Promise<Database>;
11
- }
12
- export declare class PgDatabase implements Database {
13
- private client;
14
- constructor(client: ClientBase);
15
- query(sql: string, parameters?: any[]): Promise<any[]>;
16
- escapeIdentifier(name: string): string;
17
- }
18
- export declare class PoolTransaction implements Transaction {
19
- private pool;
20
- private tx;
21
- private closed;
22
- constructor(pool: Pool);
23
- get(): Promise<Database>;
24
- private startTransaction;
25
- close(): Promise<void>;
26
- }
27
- export declare function createPoolConfig(): PoolConfig;
28
- //# sourceMappingURL=db.d.ts.map
package/dist/db.d.ts.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"db.d.ts","sourceRoot":"","sources":["../src/db.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,UAAU,EAAE,IAAI,EAAc,UAAU,EAAC,MAAM,IAAI,CAAA;AAGhE,MAAM,WAAW,QAAQ;IACrB,KAAK,CAAC,GAAG,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,GAAG,EAAE,GAAG,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC,CAAA;IACxD,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAAA;CACzC;AAGD;;GAEG;AACH,MAAM,WAAW,WAAW;IACxB,GAAG,IAAI,OAAO,CAAC,QAAQ,CAAC,CAAA;CAC3B;AAGD,qBAAa,UAAW,YAAW,QAAQ;IAC3B,OAAO,CAAC,MAAM;gBAAN,MAAM,EAAE,UAAU;IAEtC,KAAK,CAAC,GAAG,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,GAAG,EAAE,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IAItD,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;CAGzC;AAGD,qBAAa,eAAgB,YAAW,WAAW;IAInC,OAAO,CAAC,IAAI;IAHxB,OAAO,CAAC,EAAE,CAAyD;IACnE,OAAO,CAAC,MAAM,CAAQ;gBAEF,IAAI,EAAE,IAAI;IAExB,GAAG,IAAI,OAAO,CAAC,QAAQ,CAAC;YAShB,gBAAgB;IAc9B,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAYzB;AAGD,wBAAgB,gBAAgB,IAAI,UAAU,CAQ7C"}
package/dist/db.js DELETED
@@ -1,69 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.createPoolConfig = exports.PoolTransaction = exports.PgDatabase = void 0;
4
- class PgDatabase {
5
- constructor(client) {
6
- this.client = client;
7
- }
8
- query(sql, parameters) {
9
- return this.client.query({ text: sql, rowMode: 'array' }, parameters).then(result => result.rows);
10
- }
11
- escapeIdentifier(name) {
12
- return this.client.escapeIdentifier(name);
13
- }
14
- }
15
- exports.PgDatabase = PgDatabase;
16
- class PoolTransaction {
17
- constructor(pool) {
18
- this.pool = pool;
19
- this.closed = false;
20
- }
21
- async get() {
22
- if (this.closed) {
23
- throw new Error('Too late to request transaction');
24
- }
25
- this.tx = this.tx || this.startTransaction();
26
- let { db } = await this.tx;
27
- return db;
28
- }
29
- async startTransaction() {
30
- let client = await this.pool.connect();
31
- try {
32
- await client.query('START TRANSACTION ISOLATION LEVEL SERIALIZABLE READ ONLY');
33
- return {
34
- client,
35
- db: new PgDatabase(client)
36
- };
37
- }
38
- catch (e) {
39
- client.release();
40
- throw e;
41
- }
42
- }
43
- close() {
44
- this.closed = true;
45
- return this.tx?.then(async ({ client }) => {
46
- try {
47
- await client.query('COMMIT');
48
- }
49
- catch (e) {
50
- // ignore
51
- }
52
- finally {
53
- client.release();
54
- }
55
- }) || Promise.resolve();
56
- }
57
- }
58
- exports.PoolTransaction = PoolTransaction;
59
- function createPoolConfig() {
60
- return {
61
- host: process.env.DB_HOST || 'localhost',
62
- port: process.env.DB_PORT ? parseInt(process.env.DB_PORT) : 5432,
63
- database: process.env.DB_NAME || 'postgres',
64
- user: process.env.DB_USER || 'postgres',
65
- password: process.env.DB_PASS || 'postgres'
66
- };
67
- }
68
- exports.createPoolConfig = createPoolConfig;
69
- //# sourceMappingURL=db.js.map
package/dist/db.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"db.js","sourceRoot":"","sources":["../src/db.ts"],"names":[],"mappings":";;;AAiBA,MAAa,UAAU;IACnB,YAAoB,MAAkB;QAAlB,WAAM,GAAN,MAAM,CAAY;IAAG,CAAC;IAE1C,KAAK,CAAC,GAAW,EAAE,UAAkB;QACjC,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,EAAC,IAAI,EAAE,GAAG,EAAE,OAAO,EAAE,OAAO,EAAC,EAAE,UAAU,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;IACnG,CAAC;IAED,gBAAgB,CAAC,IAAY;QACzB,OAAO,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAA;IAC7C,CAAC;CACJ;AAVD,gCAUC;AAGD,MAAa,eAAe;IAIxB,YAAoB,IAAU;QAAV,SAAI,GAAJ,IAAI,CAAM;QAFtB,WAAM,GAAG,KAAK,CAAA;IAEW,CAAC;IAElC,KAAK,CAAC,GAAG;QACL,IAAI,IAAI,CAAC,MAAM,EAAE;YACb,MAAM,IAAI,KAAK,CAAC,iCAAiC,CAAC,CAAA;SACrD;QACD,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,EAAE,IAAI,IAAI,CAAC,gBAAgB,EAAE,CAAA;QAC5C,IAAI,EAAC,EAAE,EAAC,GAAG,MAAM,IAAI,CAAC,EAAE,CAAA;QACxB,OAAO,EAAE,CAAA;IACb,CAAC;IAEO,KAAK,CAAC,gBAAgB;QAC1B,IAAI,MAAM,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAA;QACtC,IAAI;YACA,MAAM,MAAM,CAAC,KAAK,CAAC,0DAA0D,CAAC,CAAA;YAC9E,OAAO;gBACH,MAAM;gBACN,EAAE,EAAE,IAAI,UAAU,CAAC,MAAM,CAAC;aAC7B,CAAA;SACJ;QAAC,OAAM,CAAM,EAAE;YACZ,MAAM,CAAC,OAAO,EAAE,CAAA;YAChB,MAAM,CAAC,CAAA;SACV;IACL,CAAC;IAED,KAAK;QACD,IAAI,CAAC,MAAM,GAAG,IAAI,CAAA;QAClB,OAAO,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,KAAK,EAAE,EAAC,MAAM,EAAC,EAAE,EAAE;YACpC,IAAI;gBACA,MAAM,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAA;aAC/B;YAAC,OAAM,CAAM,EAAE;gBACZ,SAAS;aACZ;oBAAS;gBACN,MAAM,CAAC,OAAO,EAAE,CAAA;aACnB;QACL,CAAC,CAAC,IAAI,OAAO,CAAC,OAAO,EAAE,CAAA;IAC3B,CAAC;CACJ;AAzCD,0CAyCC;AAGD,SAAgB,gBAAgB;IAC5B,OAAO;QACH,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC,OAAO,IAAI,WAAW;QACxC,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI;QAChE,QAAQ,EAAE,OAAO,CAAC,GAAG,CAAC,OAAO,IAAI,UAAU;QAC3C,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC,OAAO,IAAI,UAAU;QACvC,QAAQ,EAAE,OAAO,CAAC,GAAG,CAAC,OAAO,IAAI,UAAU;KAC9C,CAAA;AACL,CAAC;AARD,4CAQC"}
@@ -1,6 +0,0 @@
1
- import { DocumentNode } from "graphql";
2
- import type { Dialect } from "../dialect";
3
- import type { Model } from "../model";
4
- export declare function generateOpenCrudQueries(model: Model, dialect: Dialect): string;
5
- export declare function buildServerSchema(model: Model, dialect: Dialect): DocumentNode;
6
- //# sourceMappingURL=opencrud.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"opencrud.d.ts","sourceRoot":"","sources":["../../src/gql/opencrud.ts"],"names":[],"mappings":"AAGA,OAAO,EAAC,YAAY,EAAe,MAAM,SAAS,CAAA;AAClD,OAAO,KAAK,EAAC,OAAO,EAAC,MAAM,YAAY,CAAA;AACvC,OAAO,KAAK,EAAiD,KAAK,EAAc,MAAM,UAAU,CAAA;AAMhG,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,GAAG,MAAM,CA2U9E;AAGD,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,GAAG,YAAY,CAI9E"}