@subsquid/openreader 0.3.2 → 0.3.3

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/db.d.ts +1 -0
  2. package/dist/db.d.ts.map +1 -0
  3. package/dist/gql/opencrud.d.ts +1 -0
  4. package/dist/gql/opencrud.d.ts.map +1 -0
  5. package/dist/gql/schema.d.ts +1 -0
  6. package/dist/gql/schema.d.ts.map +1 -0
  7. package/dist/main.d.ts +1 -0
  8. package/dist/main.d.ts.map +1 -0
  9. package/dist/model.d.ts +1 -0
  10. package/dist/model.d.ts.map +1 -0
  11. package/dist/model.tools.d.ts +1 -0
  12. package/dist/model.tools.d.ts.map +1 -0
  13. package/dist/orderBy.d.ts +1 -0
  14. package/dist/orderBy.d.ts.map +1 -0
  15. package/dist/queryBuilder.d.ts +1 -0
  16. package/dist/queryBuilder.d.ts.map +1 -0
  17. package/dist/relayConnection.d.ts +1 -0
  18. package/dist/relayConnection.d.ts.map +1 -0
  19. package/dist/requestedFields.d.ts +1 -0
  20. package/dist/requestedFields.d.ts.map +1 -0
  21. package/dist/resolver.d.ts +1 -0
  22. package/dist/resolver.d.ts.map +1 -0
  23. package/dist/scalars.d.ts +1 -0
  24. package/dist/scalars.d.ts.map +1 -0
  25. package/dist/server.d.ts +1 -0
  26. package/dist/server.d.ts.map +1 -0
  27. package/dist/test/basic.test.d.ts +2 -0
  28. package/dist/test/basic.test.d.ts.map +1 -0
  29. package/dist/test/basic.test.js +286 -0
  30. package/dist/test/basic.test.js.map +1 -0
  31. package/dist/test/connection.test.d.ts +2 -0
  32. package/dist/test/connection.test.d.ts.map +1 -0
  33. package/dist/test/connection.test.js +193 -0
  34. package/dist/test/connection.test.js.map +1 -0
  35. package/dist/test/fts.test.d.ts +2 -0
  36. package/dist/test/fts.test.d.ts.map +1 -0
  37. package/dist/test/fts.test.js +110 -0
  38. package/dist/test/fts.test.js.map +1 -0
  39. package/dist/test/lists.test.d.ts +2 -0
  40. package/dist/test/lists.test.d.ts.map +1 -0
  41. package/dist/test/lists.test.js +266 -0
  42. package/dist/test/lists.test.js.map +1 -0
  43. package/dist/test/lookup.test.d.ts +2 -0
  44. package/dist/test/lookup.test.d.ts.map +1 -0
  45. package/dist/test/lookup.test.js +109 -0
  46. package/dist/test/lookup.test.js.map +1 -0
  47. package/dist/test/scalars.test.d.ts +2 -0
  48. package/dist/test/scalars.test.d.ts.map +1 -0
  49. package/dist/test/scalars.test.js +303 -0
  50. package/dist/test/scalars.test.js.map +1 -0
  51. package/dist/test/tools.test.d.ts +2 -0
  52. package/dist/test/tools.test.d.ts.map +1 -0
  53. package/dist/test/tools.test.js +49 -0
  54. package/dist/test/tools.test.js.map +1 -0
  55. package/dist/test/typed-json.test.d.ts +2 -0
  56. package/dist/test/typed-json.test.d.ts.map +1 -0
  57. package/dist/test/typed-json.test.js +75 -0
  58. package/dist/test/typed-json.test.js.map +1 -0
  59. package/dist/test/unions.test.d.ts +2 -0
  60. package/dist/test/unions.test.d.ts.map +1 -0
  61. package/dist/test/unions.test.js +84 -0
  62. package/dist/test/unions.test.js.map +1 -0
  63. package/dist/test/util/setup.d.ts +7 -0
  64. package/dist/test/util/setup.d.ts.map +1 -0
  65. package/dist/test/util/setup.js +60 -0
  66. package/dist/test/util/setup.js.map +1 -0
  67. package/dist/test/where.test.d.ts +2 -0
  68. package/dist/test/where.test.d.ts.map +1 -0
  69. package/dist/test/where.test.js +127 -0
  70. package/dist/test/where.test.js.map +1 -0
  71. package/dist/tools.d.ts +1 -0
  72. package/dist/tools.d.ts.map +1 -0
  73. package/dist/util.d.ts +1 -0
  74. package/dist/util.d.ts.map +1 -0
  75. package/dist/where.d.ts +1 -0
  76. package/dist/where.d.ts.map +1 -0
  77. package/package.json +4 -3
  78. package/src/db.ts +83 -0
  79. package/src/gql/opencrud.ts +328 -0
  80. package/src/gql/schema.ts +337 -0
  81. package/src/main.ts +51 -0
  82. package/src/model.tools.ts +173 -0
  83. package/src/model.ts +125 -0
  84. package/src/orderBy.ts +105 -0
  85. package/src/queryBuilder.ts +785 -0
  86. package/src/relayConnection.ts +80 -0
  87. package/src/requestedFields.ts +246 -0
  88. package/src/resolver.ts +199 -0
  89. package/src/scalars.ts +247 -0
  90. package/src/server.ts +115 -0
  91. package/src/test/basic.test.ts +339 -0
  92. package/src/test/connection.test.ts +195 -0
  93. package/src/test/fts.test.ts +114 -0
  94. package/src/test/lists.test.ts +278 -0
  95. package/src/test/lookup.test.ts +111 -0
  96. package/src/test/scalars.test.ts +316 -0
  97. package/src/test/tools.test.ts +27 -0
  98. package/src/test/typed-json.test.ts +76 -0
  99. package/src/test/unions.test.ts +85 -0
  100. package/src/test/util/setup.ts +63 -0
  101. package/src/test/where.test.ts +135 -0
  102. package/src/tools.ts +33 -0
  103. package/src/util.ts +39 -0
  104. package/src/where.ts +110 -0
package/src/orderBy.ts ADDED
@@ -0,0 +1,105 @@
1
+ import assert from "assert"
2
+ import type {Model} from "./model"
3
+ import {getUnionProps} from "./model.tools"
4
+
5
+
6
+ export type SortOrder = 'ASC' | 'DESC'
7
+
8
+
9
+ export interface OrderBy {
10
+ [field: string]: SortOrder | OrderBy
11
+ }
12
+
13
+
14
+ /**
15
+ * OpenCRUD orderBy enum value (e.g. foo_ASC)
16
+ */
17
+ export type OpenCrudOrderByValue = string
18
+
19
+
20
+ /**
21
+ * A mapping between OpenCRUD enum variants and OrderBy specs
22
+ */
23
+ export type OpenCrud_OrderBy_Mapping = ReadonlyMap<OpenCrudOrderByValue, OrderBy>
24
+
25
+
26
+ const MAPPING_CACHE = new WeakMap<Model, Record<string, OpenCrud_OrderBy_Mapping>>()
27
+
28
+
29
+ export function getOrderByMapping(model: Model, entityName: string): OpenCrud_OrderBy_Mapping {
30
+ let cache = MAPPING_CACHE.get(model)
31
+ if (cache == null) {
32
+ cache = {}
33
+ MAPPING_CACHE.set(model, cache)
34
+ }
35
+ if (cache[entityName]) return cache[entityName]
36
+ return cache[entityName] = buildOrderByMapping(model, entityName, 2)
37
+ }
38
+
39
+
40
+ function buildOrderByMapping(model: Model, typeName: string, depth: number): OpenCrud_OrderBy_Mapping {
41
+ if (depth <= 0) return new Map()
42
+ let object = model[typeName]
43
+ if (object.kind == 'union') {
44
+ object = getUnionProps(model, typeName)
45
+ }
46
+ assert(object.kind == 'entity' || object.kind == 'object')
47
+ let m = new Map<string, OrderBy>()
48
+ for (let key in object.properties) {
49
+ let propType = object.properties[key].type
50
+ switch(propType.kind) {
51
+ case 'scalar':
52
+ case 'enum':
53
+ m.set(key + '_ASC', {[key]: 'ASC'})
54
+ m.set(key + '_DESC', {[key]: 'DESC'})
55
+ break
56
+ case 'object':
57
+ case 'union':
58
+ for (let [name, spec] of buildOrderByMapping(model, propType.name, depth - 1)) {
59
+ m.set(key + '_' + name, {[key]: spec})
60
+ }
61
+ break
62
+ case 'fk':
63
+ for (let [name, spec] of buildOrderByMapping(model, propType.foreignEntity, depth - 1)) {
64
+ m.set(key + '_' + name, {[key]: spec})
65
+ }
66
+ break
67
+ case 'lookup':
68
+ for (let [name, spec] of buildOrderByMapping(model, propType.entity, depth - 1)) {
69
+ m.set(key + '_' + name, {[key]: spec})
70
+ }
71
+ break
72
+ }
73
+ }
74
+ return m
75
+ }
76
+
77
+
78
+ export function parseOrderBy(model: Model, entityName: string, input: OpenCrudOrderByValue[]): OrderBy {
79
+ let mapping = getOrderByMapping(model, entityName)
80
+ return mergeOrderBy(
81
+ input.map(value => {
82
+ let spec = mapping.get(value)
83
+ assert(spec != null)
84
+ return spec
85
+ })
86
+ )
87
+ }
88
+
89
+
90
+ export function mergeOrderBy(list: OrderBy[]): OrderBy {
91
+ let result: OrderBy = {}
92
+ list.forEach(item => {
93
+ for (let key in item) {
94
+ let current = result[key]
95
+ if (current == null ) {
96
+ result[key] = item[key]
97
+ } else if (typeof current != 'string') {
98
+ let it = item[key]
99
+ assert(typeof it == 'object')
100
+ result[key] = mergeOrderBy([current, it])
101
+ }
102
+ }
103
+ })
104
+ return result
105
+ }