@subsquid/openreader 1.0.3 → 2.0.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 +11 -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 +3 -0
- package/lib/limit.size.d.ts.map +1 -0
- package/lib/limit.size.js +44 -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 +53 -0
- package/lib/main.js.map +1 -0
- package/{dist → lib}/model.d.ts +10 -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} +44 -7
- 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 +522 -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 +38 -0
- package/lib/server.d.ts.map +1 -0
- package/lib/server.js +146 -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/{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/{dist → lib}/test/setup.d.ts +3 -1
- package/lib/test/setup.d.ts.map +1 -0
- package/{dist → lib}/test/setup.js +14 -12
- 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/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/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 +17 -9
- package/src/context.ts +14 -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 +46 -0
- package/src/main.ts +61 -38
- package/src/{gql/schema.ts → model.schema.ts} +51 -8
- package/src/model.ts +12 -1
- package/src/{orderBy.ts → opencrud/orderBy.ts} +3 -10
- package/src/opencrud/schema.ts +632 -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 +128 -48
- 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/setup.ts +12 -10
- 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/lazy-transaction.ts +49 -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.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
|
@@ -18,8 +18,8 @@ import {
|
|
|
18
18
|
parse,
|
|
19
19
|
validateSchema
|
|
20
20
|
} from "graphql"
|
|
21
|
-
import {Index, Model, Prop, PropType} from "
|
|
22
|
-
import {validateModel} from "
|
|
21
|
+
import {Index, Model, Prop, PropType, Scalar} from "./model"
|
|
22
|
+
import {validateModel} from "./model.tools"
|
|
23
23
|
import {customScalars} from "./scalars"
|
|
24
24
|
|
|
25
25
|
|
|
@@ -29,6 +29,8 @@ const baseSchema = buildASTSchema(parse(`
|
|
|
29
29
|
directive @unique on FIELD_DEFINITION
|
|
30
30
|
directive @index(fields: [String!] unique: Boolean) on OBJECT | FIELD_DEFINITION
|
|
31
31
|
directive @fulltext(query: String!) on FIELD_DEFINITION
|
|
32
|
+
directive @cardinality(value: Int!) on FIELD_DEFINITION
|
|
33
|
+
directive @byteWeight(value: Float!) on FIELD_DEFINITION
|
|
32
34
|
directive @variant on OBJECT # legacy
|
|
33
35
|
directive @jsonField on OBJECT # legacy
|
|
34
36
|
scalar ID
|
|
@@ -120,6 +122,10 @@ function addEntityOrJsonObjectOrInterface(model: Model, type: GraphQLObjectType
|
|
|
120
122
|
let derivedFrom = checkDerivedFrom(type, f)
|
|
121
123
|
let index = checkFieldIndex(type, f)
|
|
122
124
|
let unique = index?.unique || false
|
|
125
|
+
let limits = {
|
|
126
|
+
...checkByteWeightDirective(type, f),
|
|
127
|
+
...checkCardinalityLimitDirective(type, f)
|
|
128
|
+
}
|
|
123
129
|
|
|
124
130
|
if (index) {
|
|
125
131
|
indexes.push(index)
|
|
@@ -137,10 +143,11 @@ function addEntityOrJsonObjectOrInterface(model: Model, type: GraphQLObjectType
|
|
|
137
143
|
properties[key] = {
|
|
138
144
|
type: wrapWithList(list.nulls, {
|
|
139
145
|
kind: 'scalar',
|
|
140
|
-
name: fieldType.name
|
|
146
|
+
name: fieldType.name as Scalar
|
|
141
147
|
}),
|
|
142
148
|
nullable,
|
|
143
|
-
description
|
|
149
|
+
description,
|
|
150
|
+
...limits
|
|
144
151
|
}
|
|
145
152
|
} else if (fieldType instanceof GraphQLEnumType) {
|
|
146
153
|
addEnum(model, fieldType)
|
|
@@ -150,7 +157,8 @@ function addEntityOrJsonObjectOrInterface(model: Model, type: GraphQLObjectType
|
|
|
150
157
|
name: fieldType.name
|
|
151
158
|
}),
|
|
152
159
|
nullable,
|
|
153
|
-
description
|
|
160
|
+
description,
|
|
161
|
+
...limits
|
|
154
162
|
}
|
|
155
163
|
} else if (fieldType instanceof GraphQLUnionType) {
|
|
156
164
|
addUnion(model, fieldType)
|
|
@@ -160,7 +168,8 @@ function addEntityOrJsonObjectOrInterface(model: Model, type: GraphQLObjectType
|
|
|
160
168
|
name: fieldType.name
|
|
161
169
|
}),
|
|
162
170
|
nullable,
|
|
163
|
-
description
|
|
171
|
+
description,
|
|
172
|
+
...limits
|
|
164
173
|
}
|
|
165
174
|
} else if (fieldType instanceof GraphQLObjectType) {
|
|
166
175
|
if (isEntityType(fieldType)) {
|
|
@@ -205,7 +214,8 @@ function addEntityOrJsonObjectOrInterface(model: Model, type: GraphQLObjectType
|
|
|
205
214
|
field: derivedFrom.field
|
|
206
215
|
},
|
|
207
216
|
nullable: false,
|
|
208
|
-
description
|
|
217
|
+
description,
|
|
218
|
+
...limits
|
|
209
219
|
}
|
|
210
220
|
break
|
|
211
221
|
default:
|
|
@@ -219,7 +229,8 @@ function addEntityOrJsonObjectOrInterface(model: Model, type: GraphQLObjectType
|
|
|
219
229
|
name: fieldType.name
|
|
220
230
|
}),
|
|
221
231
|
nullable,
|
|
222
|
-
description
|
|
232
|
+
description,
|
|
233
|
+
...limits
|
|
223
234
|
}
|
|
224
235
|
}
|
|
225
236
|
} else {
|
|
@@ -456,6 +467,38 @@ function checkDerivedFrom(type: GraphQLNamedType, f: GraphQLField<any, any>): {f
|
|
|
456
467
|
}
|
|
457
468
|
|
|
458
469
|
|
|
470
|
+
function checkCardinalityLimitDirective(type: GraphQLNamedType, f: GraphQLField<any, any>): {cardinality?: number} {
|
|
471
|
+
let directives = f.astNode?.directives?.filter(d => d.name.value == 'cardinality') || []
|
|
472
|
+
if (directives.length > 1) throw new SchemaError(
|
|
473
|
+
`Multiple @cardinality where applied to ${type.name}.${f.name}`
|
|
474
|
+
)
|
|
475
|
+
if (directives.length == 0) return {}
|
|
476
|
+
let arg = assertNotNull(directives[0].arguments?.find(arg => arg.name.value == 'value'))
|
|
477
|
+
assert(arg.value.kind == 'IntValue')
|
|
478
|
+
let cardinality = parseInt(arg.value.value, 10)
|
|
479
|
+
if (cardinality < 0) throw new SchemaError(
|
|
480
|
+
`Incorrect @cardinality where applied to ${type.name}.${f.name}. Cardinality value must be positive.`
|
|
481
|
+
)
|
|
482
|
+
return {cardinality}
|
|
483
|
+
}
|
|
484
|
+
|
|
485
|
+
|
|
486
|
+
function checkByteWeightDirective(type: GraphQLNamedType, f: GraphQLField<any, any>): {byteWeight?: number} {
|
|
487
|
+
let directives = f.astNode?.directives?.filter(d => d.name.value == 'byteWeight') || []
|
|
488
|
+
if (directives.length > 1) throw new SchemaError(
|
|
489
|
+
`Multiple @byteWeight where applied to ${type.name}.${f.name}`
|
|
490
|
+
)
|
|
491
|
+
if (directives.length == 0) return {}
|
|
492
|
+
let arg = assertNotNull(directives[0].arguments?.find(arg => arg.name.value == 'value'))
|
|
493
|
+
assert(arg.value.kind == 'FloatValue')
|
|
494
|
+
let byteWeight = parseFloat(arg.value.value)
|
|
495
|
+
if (byteWeight < 0) throw new SchemaError(
|
|
496
|
+
`Incorrect @byteWeight where applied to ${type.name}.${f.name}. Byte weight value must be positive.`
|
|
497
|
+
)
|
|
498
|
+
return {byteWeight}
|
|
499
|
+
}
|
|
500
|
+
|
|
501
|
+
|
|
459
502
|
function unsupportedFieldTypeError(propName: string): Error {
|
|
460
503
|
return new SchemaError(`Property ${propName} has unsupported type`)
|
|
461
504
|
}
|
package/src/model.ts
CHANGED
|
@@ -50,6 +50,14 @@ export interface Prop {
|
|
|
50
50
|
* Whether the values in the column must be unique. Applicable only to entities.
|
|
51
51
|
*/
|
|
52
52
|
unique?: boolean
|
|
53
|
+
/**
|
|
54
|
+
* Characteristic number of elements in a `list-lookup` or in a `list` of objects
|
|
55
|
+
*/
|
|
56
|
+
cardinality?: number
|
|
57
|
+
/**
|
|
58
|
+
* Relative byte size of a scalar value or scalar list
|
|
59
|
+
*/
|
|
60
|
+
byteWeight?: number
|
|
53
61
|
}
|
|
54
62
|
|
|
55
63
|
|
|
@@ -66,10 +74,13 @@ export type PropType =
|
|
|
66
74
|
|
|
67
75
|
export interface ScalarPropType {
|
|
68
76
|
kind: 'scalar'
|
|
69
|
-
name:
|
|
77
|
+
name: Scalar
|
|
70
78
|
}
|
|
71
79
|
|
|
72
80
|
|
|
81
|
+
export type Scalar = 'ID' | 'String' | 'Int' | 'Float' | 'Boolean' | 'DateTime' | 'BigInt' | 'JSON' | 'Bytes'
|
|
82
|
+
|
|
83
|
+
|
|
73
84
|
export interface EnumPropType {
|
|
74
85
|
kind: 'enum'
|
|
75
86
|
name: Name
|
|
@@ -1,14 +1,7 @@
|
|
|
1
1
|
import assert from "assert"
|
|
2
|
-
import type {Model} from "
|
|
3
|
-
import {getUnionProps} from "
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
export type SortOrder = 'ASC' | 'DESC'
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
export interface OrderBy {
|
|
10
|
-
[field: string]: SortOrder | OrderBy
|
|
11
|
-
}
|
|
2
|
+
import type {Model} from "../model"
|
|
3
|
+
import {getUnionProps} from "../model.tools"
|
|
4
|
+
import {OrderBy} from "../ir/args"
|
|
12
5
|
|
|
13
6
|
|
|
14
7
|
/**
|