@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.
- package/bin/main.js +1 -1
- package/lib/context.d.ts +14 -0
- package/lib/context.d.ts.map +1 -0
- package/lib/context.js +3 -0
- package/lib/context.js.map +1 -0
- package/lib/db.d.ts +23 -0
- package/lib/db.d.ts.map +1 -0
- package/lib/db.js +57 -0
- package/lib/db.js.map +1 -0
- package/{dist → lib}/dialect.d.ts +0 -0
- package/{dist → lib}/dialect.d.ts.map +0 -0
- package/{dist → lib}/dialect.js +0 -0
- package/{dist → lib}/dialect.js.map +0 -0
- package/lib/ir/args.d.ts +47 -0
- package/lib/ir/args.d.ts.map +1 -0
- package/lib/ir/args.js +3 -0
- package/lib/ir/args.js.map +1 -0
- package/lib/ir/connection.d.ts +30 -0
- package/lib/ir/connection.d.ts.map +1 -0
- package/lib/ir/connection.js +17 -0
- package/lib/ir/connection.js.map +1 -0
- package/lib/ir/fields.d.ts +22 -0
- package/lib/ir/fields.d.ts.map +1 -0
- package/lib/ir/fields.js +3 -0
- package/lib/ir/fields.js.map +1 -0
- package/lib/limit.size.d.ts +8 -0
- package/lib/limit.size.d.ts.map +1 -0
- package/lib/limit.size.js +107 -0
- package/lib/limit.size.js.map +1 -0
- package/{dist → lib}/main.d.ts +0 -0
- package/{dist → lib}/main.d.ts.map +0 -0
- package/lib/main.js +59 -0
- package/lib/main.js.map +1 -0
- package/{dist → lib}/model.d.ts +11 -1
- package/lib/model.d.ts.map +1 -0
- package/{dist → lib}/model.js +0 -0
- package/{dist → lib}/model.js.map +0 -0
- package/{dist/gql/schema.d.ts → lib/model.schema.d.ts} +2 -2
- package/lib/model.schema.d.ts.map +1 -0
- package/{dist/gql/schema.js → lib/model.schema.js} +62 -8
- package/lib/model.schema.js.map +1 -0
- package/{dist → lib}/model.tools.d.ts +0 -0
- package/{dist → lib}/model.tools.d.ts.map +0 -0
- package/{dist → lib}/model.tools.js +0 -0
- package/{dist → lib}/model.tools.js.map +0 -0
- package/{dist → lib/opencrud}/orderBy.d.ts +2 -5
- package/lib/opencrud/orderBy.d.ts.map +1 -0
- package/{dist → lib/opencrud}/orderBy.js +1 -1
- package/lib/opencrud/orderBy.js.map +1 -0
- package/lib/opencrud/schema.d.ts +31 -0
- package/lib/opencrud/schema.d.ts.map +1 -0
- package/lib/opencrud/schema.js +527 -0
- package/lib/opencrud/schema.js.map +1 -0
- package/lib/opencrud/tree.d.ts +8 -0
- package/lib/opencrud/tree.d.ts.map +1 -0
- package/lib/opencrud/tree.js +131 -0
- package/lib/opencrud/tree.js.map +1 -0
- package/lib/opencrud/where.d.ts +7 -0
- package/lib/opencrud/where.d.ts.map +1 -0
- package/lib/opencrud/where.js +141 -0
- package/lib/opencrud/where.js.map +1 -0
- package/{dist/gql → lib}/scalars/BigInt.d.ts +0 -0
- package/lib/scalars/BigInt.d.ts.map +1 -0
- package/{dist/gql → lib}/scalars/BigInt.js +1 -1
- package/lib/scalars/BigInt.js.map +1 -0
- package/{dist/gql → lib}/scalars/Bytes.d.ts +0 -0
- package/lib/scalars/Bytes.d.ts.map +1 -0
- package/{dist/gql → lib}/scalars/Bytes.js +2 -2
- package/lib/scalars/Bytes.js.map +1 -0
- package/{dist/gql → lib}/scalars/DateTime.d.ts +0 -0
- package/lib/scalars/DateTime.d.ts.map +1 -0
- package/{dist/gql → lib}/scalars/DateTime.js +1 -1
- package/lib/scalars/DateTime.js.map +1 -0
- package/{dist/gql → lib}/scalars/JSON.d.ts +0 -0
- package/lib/scalars/JSON.d.ts.map +1 -0
- package/{dist/gql → lib}/scalars/JSON.js +0 -0
- package/lib/scalars/JSON.js.map +1 -0
- package/{dist/gql → lib}/scalars/index.d.ts +0 -0
- package/lib/scalars/index.d.ts.map +1 -0
- package/{dist/gql → lib}/scalars/index.js +0 -0
- package/lib/scalars/index.js.map +1 -0
- package/lib/server.d.ts +42 -0
- package/lib/server.d.ts.map +1 -0
- package/lib/server.js +171 -0
- package/lib/server.js.map +1 -0
- package/lib/sql/cursor.d.ts +52 -0
- package/lib/sql/cursor.d.ts.map +1 -0
- package/lib/sql/cursor.js +234 -0
- package/lib/sql/cursor.js.map +1 -0
- package/lib/sql/mapping.d.ts +4 -0
- package/lib/sql/mapping.d.ts.map +1 -0
- package/lib/sql/mapping.js +71 -0
- package/lib/sql/mapping.js.map +1 -0
- package/lib/sql/printer.d.ts +37 -0
- package/lib/sql/printer.d.ts.map +1 -0
- package/lib/sql/printer.js +311 -0
- package/lib/sql/printer.js.map +1 -0
- package/lib/sql/query.d.ts +46 -0
- package/lib/sql/query.d.ts.map +1 -0
- package/lib/sql/query.js +134 -0
- package/lib/sql/query.js.map +1 -0
- package/lib/sql/util.d.ts +30 -0
- package/lib/sql/util.d.ts.map +1 -0
- package/lib/sql/util.js +75 -0
- package/lib/sql/util.js.map +1 -0
- package/lib/subscription.d.ts +18 -0
- package/lib/subscription.d.ts.map +1 -0
- package/lib/subscription.js +47 -0
- package/lib/subscription.js.map +1 -0
- package/{dist → lib}/test/basic.test.d.ts +0 -0
- package/{dist → lib}/test/basic.test.d.ts.map +0 -0
- package/{dist → lib}/test/basic.test.js +0 -0
- package/{dist → lib}/test/basic.test.js.map +0 -0
- package/{dist → lib}/test/connection.test.d.ts +0 -0
- package/{dist → lib}/test/connection.test.d.ts.map +0 -0
- package/{dist → lib}/test/connection.test.js +0 -0
- package/{dist → lib}/test/connection.test.js.map +0 -0
- package/{dist → lib}/test/fts.test.d.ts +0 -0
- package/{dist → lib}/test/fts.test.d.ts.map +0 -0
- package/{dist → lib}/test/fts.test.js +1 -1
- package/lib/test/fts.test.js.map +1 -0
- package/{dist → lib}/test/isNull.test.d.ts +0 -0
- package/{dist → lib}/test/isNull.test.d.ts.map +0 -0
- package/{dist → lib}/test/isNull.test.js +0 -0
- package/{dist → lib}/test/isNull.test.js.map +0 -0
- package/lib/test/limits.test.d.ts +2 -0
- package/lib/test/limits.test.d.ts.map +1 -0
- package/lib/test/limits.test.js +159 -0
- package/lib/test/limits.test.js.map +1 -0
- package/{dist → lib}/test/lists.test.d.ts +0 -0
- package/{dist → lib}/test/lists.test.d.ts.map +0 -0
- package/{dist → lib}/test/lists.test.js +0 -0
- package/{dist → lib}/test/lists.test.js.map +0 -0
- package/{dist → lib}/test/lookup.test.d.ts +0 -0
- package/{dist → lib}/test/lookup.test.d.ts.map +0 -0
- package/{dist → lib}/test/lookup.test.js +0 -0
- package/{dist → lib}/test/lookup.test.js.map +0 -0
- package/{dist → lib}/test/regressions.test.d.ts +0 -0
- package/{dist → lib}/test/regressions.test.d.ts.map +0 -0
- package/{dist → lib}/test/regressions.test.js +0 -0
- package/{dist → lib}/test/regressions.test.js.map +0 -0
- package/{dist → lib}/test/scalars.test.d.ts +0 -0
- package/{dist → lib}/test/scalars.test.d.ts.map +0 -0
- package/{dist → lib}/test/scalars.test.js +0 -0
- package/{dist → lib}/test/scalars.test.js.map +0 -0
- package/lib/test/setup.d.ts +17 -0
- package/lib/test/setup.d.ts.map +1 -0
- package/{dist → lib}/test/setup.js +18 -13
- package/lib/test/setup.js.map +1 -0
- package/lib/test/subscription.test.d.ts +2 -0
- package/lib/test/subscription.test.d.ts.map +1 -0
- package/lib/test/subscription.test.js +99 -0
- package/lib/test/subscription.test.js.map +1 -0
- package/{dist → lib}/test/tools.test.d.ts +0 -0
- package/{dist → lib}/test/tools.test.d.ts.map +0 -0
- package/{dist → lib}/test/tools.test.js +0 -0
- package/{dist → lib}/test/tools.test.js.map +0 -0
- package/{dist → lib}/test/typed-json.test.d.ts +0 -0
- package/{dist → lib}/test/typed-json.test.d.ts.map +0 -0
- package/{dist → lib}/test/typed-json.test.js +0 -0
- package/{dist → lib}/test/typed-json.test.js.map +0 -0
- package/{dist → lib}/test/unions.test.d.ts +0 -0
- package/{dist → lib}/test/unions.test.d.ts.map +0 -0
- package/{dist → lib}/test/unions.test.js +0 -0
- package/{dist → lib}/test/unions.test.js.map +0 -0
- package/{dist → lib}/test/where.test.d.ts +0 -0
- package/{dist → lib}/test/where.test.d.ts.map +0 -0
- package/{dist → lib}/test/where.test.js +0 -0
- package/{dist → lib}/test/where.test.js.map +0 -0
- package/{dist → lib}/tools.d.ts +0 -0
- package/{dist → lib}/tools.d.ts.map +0 -0
- package/{dist → lib}/tools.js +3 -3
- package/{dist → lib}/tools.js.map +1 -1
- package/lib/util/error-handling.d.ts +11 -0
- package/lib/util/error-handling.d.ts.map +1 -0
- package/lib/util/error-handling.js +42 -0
- package/lib/util/error-handling.js.map +1 -0
- package/lib/util/execute.d.ts +5 -0
- package/lib/util/execute.d.ts.map +1 -0
- package/lib/util/execute.js +28 -0
- package/lib/util/execute.js.map +1 -0
- package/lib/util/lazy-transaction.d.ts +10 -0
- package/lib/util/lazy-transaction.d.ts.map +1 -0
- package/lib/util/lazy-transaction.js +43 -0
- package/lib/util/lazy-transaction.js.map +1 -0
- package/lib/util/limit.d.ts +11 -0
- package/lib/util/limit.d.ts.map +1 -0
- package/lib/util/limit.js +39 -0
- package/lib/util/limit.js.map +1 -0
- package/lib/util/resolve-tree.d.ts +14 -0
- package/lib/util/resolve-tree.d.ts.map +1 -0
- package/lib/util/resolve-tree.js +52 -0
- package/lib/util/resolve-tree.js.map +1 -0
- package/{dist → lib/util}/util.d.ts +2 -3
- package/lib/util/util.d.ts.map +1 -0
- package/{dist → lib/util}/util.js +9 -13
- package/lib/util/util.js.map +1 -0
- package/package.json +18 -10
- package/src/context.ts +17 -0
- package/src/db.ts +46 -57
- package/src/ir/args.ts +85 -0
- package/src/ir/connection.ts +48 -0
- package/src/ir/fields.ts +40 -0
- package/src/limit.size.ts +130 -0
- package/src/main.ts +74 -42
- package/src/{gql/schema.ts → model.schema.ts} +72 -9
- package/src/model.ts +13 -1
- package/src/{orderBy.ts → opencrud/orderBy.ts} +3 -10
- package/src/opencrud/schema.ts +639 -0
- package/src/opencrud/tree.ts +144 -0
- package/src/opencrud/where.ts +141 -0
- package/src/{gql/scalars → scalars}/BigInt.ts +1 -1
- package/src/{gql/scalars → scalars}/Bytes.ts +4 -4
- package/src/{gql/scalars → scalars}/DateTime.ts +1 -1
- package/src/{gql/scalars → scalars}/JSON.ts +0 -0
- package/src/{gql/scalars → scalars}/index.ts +0 -0
- package/src/server.ts +175 -55
- package/src/sql/cursor.ts +291 -0
- package/src/sql/mapping.ts +66 -0
- package/src/sql/printer.ts +328 -0
- package/src/sql/query.ts +194 -0
- package/src/sql/util.ts +89 -0
- package/src/subscription.ts +46 -0
- package/src/test/fts.test.ts +1 -1
- package/src/test/limits.test.ts +163 -0
- package/src/test/setup.ts +16 -11
- package/src/test/subscription.test.ts +98 -0
- package/src/tools.ts +1 -1
- package/src/util/error-handling.ts +40 -0
- package/src/util/execute.ts +53 -0
- package/src/util/lazy-transaction.ts +49 -0
- package/src/util/limit.ts +34 -0
- package/src/util/resolve-tree.ts +65 -0
- package/src/{util.ts → util/util.ts} +9 -14
- package/dist/db.d.ts +0 -28
- package/dist/db.d.ts.map +0 -1
- package/dist/db.js +0 -69
- package/dist/db.js.map +0 -1
- package/dist/gql/opencrud.d.ts +0 -6
- package/dist/gql/opencrud.d.ts.map +0 -1
- package/dist/gql/opencrud.js +0 -326
- package/dist/gql/opencrud.js.map +0 -1
- package/dist/gql/scalars/BigInt.d.ts.map +0 -1
- package/dist/gql/scalars/BigInt.js.map +0 -1
- package/dist/gql/scalars/Bytes.d.ts.map +0 -1
- package/dist/gql/scalars/Bytes.js.map +0 -1
- package/dist/gql/scalars/DateTime.d.ts.map +0 -1
- package/dist/gql/scalars/DateTime.js.map +0 -1
- package/dist/gql/scalars/JSON.d.ts.map +0 -1
- package/dist/gql/scalars/JSON.js.map +0 -1
- package/dist/gql/scalars/index.d.ts.map +0 -1
- package/dist/gql/scalars/index.js.map +0 -1
- package/dist/gql/schema.d.ts.map +0 -1
- package/dist/gql/schema.js.map +0 -1
- package/dist/main.js +0 -44
- package/dist/main.js.map +0 -1
- package/dist/model.d.ts.map +0 -1
- package/dist/orderBy.d.ts.map +0 -1
- package/dist/orderBy.js.map +0 -1
- package/dist/queryBuilder.d.ts +0 -56
- package/dist/queryBuilder.d.ts.map +0 -1
- package/dist/queryBuilder.js +0 -733
- package/dist/queryBuilder.js.map +0 -1
- package/dist/relayConnection.d.ts +0 -37
- package/dist/relayConnection.d.ts.map +0 -1
- package/dist/relayConnection.js +0 -43
- package/dist/relayConnection.js.map +0 -1
- package/dist/requestedFields.d.ts +0 -33
- package/dist/requestedFields.d.ts.map +0 -1
- package/dist/requestedFields.js +0 -179
- package/dist/requestedFields.js.map +0 -1
- package/dist/resolver.d.ts +0 -9
- package/dist/resolver.d.ts.map +0 -1
- package/dist/resolver.js +0 -158
- package/dist/resolver.js.map +0 -1
- package/dist/server.d.ts +0 -22
- package/dist/server.d.ts.map +0 -1
- package/dist/server.js +0 -96
- package/dist/server.js.map +0 -1
- package/dist/test/fts.test.js.map +0 -1
- package/dist/test/setup.d.ts +0 -14
- package/dist/test/setup.d.ts.map +0 -1
- package/dist/test/setup.js.map +0 -1
- package/dist/util.d.ts.map +0 -1
- package/dist/util.js.map +0 -1
- package/dist/where.d.ts +0 -9
- package/dist/where.d.ts.map +0 -1
- package/dist/where.js +0 -101
- package/dist/where.js.map +0 -1
- package/src/gql/opencrud.ts +0 -350
- package/src/queryBuilder.ts +0 -891
- package/src/relayConnection.ts +0 -80
- package/src/requestedFields.ts +0 -246
- package/src/resolver.ts +0 -201
- 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 {
|
|
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
|
|
31
|
-
|
|
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"}
|
package/dist/gql/opencrud.d.ts
DELETED
|
@@ -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"}
|