@contember/engine-content-api 2.1.0-alpha.1 → 2.1.0-alpha.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 (164) hide show
  1. package/dist/development/index.cjs +1 -0
  2. package/dist/development/index.cjs.map +1 -1
  3. package/dist/development/index.js +1 -0
  4. package/dist/development/index.js.map +1 -1
  5. package/dist/development/src/ExecutionContainer.cjs +5 -3
  6. package/dist/development/src/ExecutionContainer.cjs.map +1 -1
  7. package/dist/development/src/ExecutionContainer.js +5 -3
  8. package/dist/development/src/ExecutionContainer.js.map +1 -1
  9. package/dist/development/src/acl/Authorizator.cjs +5 -1
  10. package/dist/development/src/acl/Authorizator.cjs.map +1 -1
  11. package/dist/development/src/acl/Authorizator.js +5 -1
  12. package/dist/development/src/acl/Authorizator.js.map +1 -1
  13. package/dist/development/src/input-validation/dependencies/DependencyCollector.cjs +3 -0
  14. package/dist/development/src/input-validation/dependencies/DependencyCollector.cjs.map +1 -1
  15. package/dist/development/src/input-validation/dependencies/DependencyCollector.js +3 -0
  16. package/dist/development/src/input-validation/dependencies/DependencyCollector.js.map +1 -1
  17. package/dist/development/src/mapper/Mapper.cjs +1 -0
  18. package/dist/development/src/mapper/Mapper.cjs.map +1 -1
  19. package/dist/development/src/mapper/Mapper.js +1 -0
  20. package/dist/development/src/mapper/Mapper.js.map +1 -1
  21. package/dist/development/src/mapper/select/handlers/FieldsVisitor.cjs +30 -3
  22. package/dist/development/src/mapper/select/handlers/FieldsVisitor.cjs.map +1 -1
  23. package/dist/development/src/mapper/select/handlers/FieldsVisitor.js +30 -3
  24. package/dist/development/src/mapper/select/handlers/FieldsVisitor.js.map +1 -1
  25. package/dist/development/src/mapper/select/handlers/FieldsVisitorFactory.cjs +6 -2
  26. package/dist/development/src/mapper/select/handlers/FieldsVisitorFactory.cjs.map +1 -1
  27. package/dist/development/src/mapper/select/handlers/FieldsVisitorFactory.js +6 -2
  28. package/dist/development/src/mapper/select/handlers/FieldsVisitorFactory.js.map +1 -1
  29. package/dist/development/src/resolvers/MutationResolver.cjs +1 -0
  30. package/dist/development/src/resolvers/MutationResolver.cjs.map +1 -1
  31. package/dist/development/src/resolvers/MutationResolver.js +1 -0
  32. package/dist/development/src/resolvers/MutationResolver.js.map +1 -1
  33. package/dist/development/src/resolvers/RefreshViewResolver.cjs +20 -0
  34. package/dist/development/src/resolvers/RefreshViewResolver.cjs.map +1 -0
  35. package/dist/development/src/resolvers/RefreshViewResolver.js +20 -0
  36. package/dist/development/src/resolvers/RefreshViewResolver.js.map +1 -0
  37. package/dist/development/src/schema/GraphQlSchemaBuilder.cjs +6 -1
  38. package/dist/development/src/schema/GraphQlSchemaBuilder.cjs.map +1 -1
  39. package/dist/development/src/schema/GraphQlSchemaBuilder.js +6 -1
  40. package/dist/development/src/schema/GraphQlSchemaBuilder.js.map +1 -1
  41. package/dist/development/src/schema/GraphQlSchemaBuilderFactory.cjs +2 -1
  42. package/dist/development/src/schema/GraphQlSchemaBuilderFactory.cjs.map +1 -1
  43. package/dist/development/src/schema/GraphQlSchemaBuilderFactory.js +2 -1
  44. package/dist/development/src/schema/GraphQlSchemaBuilderFactory.js.map +1 -1
  45. package/dist/development/src/schema/RefreshViewMutationProvider.cjs +35 -0
  46. package/dist/development/src/schema/RefreshViewMutationProvider.cjs.map +1 -0
  47. package/dist/development/src/schema/RefreshViewMutationProvider.js +35 -0
  48. package/dist/development/src/schema/RefreshViewMutationProvider.js.map +1 -0
  49. package/dist/development/src/utils/viewComputedId.cjs +16 -0
  50. package/dist/development/src/utils/viewComputedId.cjs.map +1 -0
  51. package/dist/development/src/utils/viewComputedId.js +16 -0
  52. package/dist/development/src/utils/viewComputedId.js.map +1 -0
  53. package/dist/production/index.cjs +1 -0
  54. package/dist/production/index.cjs.map +1 -1
  55. package/dist/production/index.js +1 -0
  56. package/dist/production/index.js.map +1 -1
  57. package/dist/production/src/ExecutionContainer.cjs +5 -3
  58. package/dist/production/src/ExecutionContainer.cjs.map +1 -1
  59. package/dist/production/src/ExecutionContainer.js +5 -3
  60. package/dist/production/src/ExecutionContainer.js.map +1 -1
  61. package/dist/production/src/acl/Authorizator.cjs +5 -1
  62. package/dist/production/src/acl/Authorizator.cjs.map +1 -1
  63. package/dist/production/src/acl/Authorizator.js +5 -1
  64. package/dist/production/src/acl/Authorizator.js.map +1 -1
  65. package/dist/production/src/input-validation/dependencies/DependencyCollector.cjs +3 -0
  66. package/dist/production/src/input-validation/dependencies/DependencyCollector.cjs.map +1 -1
  67. package/dist/production/src/input-validation/dependencies/DependencyCollector.js +3 -0
  68. package/dist/production/src/input-validation/dependencies/DependencyCollector.js.map +1 -1
  69. package/dist/production/src/mapper/Mapper.cjs +1 -0
  70. package/dist/production/src/mapper/Mapper.cjs.map +1 -1
  71. package/dist/production/src/mapper/Mapper.js +1 -0
  72. package/dist/production/src/mapper/Mapper.js.map +1 -1
  73. package/dist/production/src/mapper/select/handlers/FieldsVisitor.cjs +30 -3
  74. package/dist/production/src/mapper/select/handlers/FieldsVisitor.cjs.map +1 -1
  75. package/dist/production/src/mapper/select/handlers/FieldsVisitor.js +30 -3
  76. package/dist/production/src/mapper/select/handlers/FieldsVisitor.js.map +1 -1
  77. package/dist/production/src/mapper/select/handlers/FieldsVisitorFactory.cjs +6 -2
  78. package/dist/production/src/mapper/select/handlers/FieldsVisitorFactory.cjs.map +1 -1
  79. package/dist/production/src/mapper/select/handlers/FieldsVisitorFactory.js +6 -2
  80. package/dist/production/src/mapper/select/handlers/FieldsVisitorFactory.js.map +1 -1
  81. package/dist/production/src/resolvers/MutationResolver.cjs +1 -0
  82. package/dist/production/src/resolvers/MutationResolver.cjs.map +1 -1
  83. package/dist/production/src/resolvers/MutationResolver.js +1 -0
  84. package/dist/production/src/resolvers/MutationResolver.js.map +1 -1
  85. package/dist/production/src/resolvers/RefreshViewResolver.cjs +20 -0
  86. package/dist/production/src/resolvers/RefreshViewResolver.cjs.map +1 -0
  87. package/dist/production/src/resolvers/RefreshViewResolver.js +20 -0
  88. package/dist/production/src/resolvers/RefreshViewResolver.js.map +1 -0
  89. package/dist/production/src/schema/GraphQlSchemaBuilder.cjs +6 -1
  90. package/dist/production/src/schema/GraphQlSchemaBuilder.cjs.map +1 -1
  91. package/dist/production/src/schema/GraphQlSchemaBuilder.js +6 -1
  92. package/dist/production/src/schema/GraphQlSchemaBuilder.js.map +1 -1
  93. package/dist/production/src/schema/GraphQlSchemaBuilderFactory.cjs +2 -1
  94. package/dist/production/src/schema/GraphQlSchemaBuilderFactory.cjs.map +1 -1
  95. package/dist/production/src/schema/GraphQlSchemaBuilderFactory.js +2 -1
  96. package/dist/production/src/schema/GraphQlSchemaBuilderFactory.js.map +1 -1
  97. package/dist/production/src/schema/RefreshViewMutationProvider.cjs +35 -0
  98. package/dist/production/src/schema/RefreshViewMutationProvider.cjs.map +1 -0
  99. package/dist/production/src/schema/RefreshViewMutationProvider.js +35 -0
  100. package/dist/production/src/schema/RefreshViewMutationProvider.js.map +1 -0
  101. package/dist/production/src/utils/viewComputedId.cjs +16 -0
  102. package/dist/production/src/utils/viewComputedId.cjs.map +1 -0
  103. package/dist/production/src/utils/viewComputedId.js +16 -0
  104. package/dist/production/src/utils/viewComputedId.js.map +1 -0
  105. package/dist/tests/cases/integration/graphQlRequests/validation/utils.d.ts.map +1 -1
  106. package/dist/tests/src/tags.d.ts.map +1 -1
  107. package/dist/tests/src/test.d.ts.map +1 -1
  108. package/dist/tests/src/testGraphql.d.ts.map +1 -1
  109. package/dist/tests/src/testUuid.d.ts.map +1 -1
  110. package/dist/tests/tsconfig.tsbuildinfo +1 -1
  111. package/dist/types/ExecutionContainer.d.ts +8 -2
  112. package/dist/types/ExecutionContainer.d.ts.map +1 -1
  113. package/dist/types/acl/Authorizator.d.ts +3 -1
  114. package/dist/types/acl/Authorizator.d.ts.map +1 -1
  115. package/dist/types/acl/VariableUtils.d.ts.map +1 -1
  116. package/dist/types/input-validation/ValidationContext.d.ts.map +1 -1
  117. package/dist/types/input-validation/ValidationEvaluation.d.ts.map +1 -1
  118. package/dist/types/input-validation/ValidationPath.d.ts.map +1 -1
  119. package/dist/types/introspection/introspection.schema.d.ts.map +1 -1
  120. package/dist/types/mapper/ColumnValue.d.ts.map +1 -1
  121. package/dist/types/mapper/ErrorUtils.d.ts.map +1 -1
  122. package/dist/types/mapper/EventManager.d.ts.map +1 -1
  123. package/dist/types/mapper/MutationProcessorHelper.d.ts.map +1 -1
  124. package/dist/types/mapper/Result.d.ts.map +1 -1
  125. package/dist/types/mapper/delete/helpers.d.ts.map +1 -1
  126. package/dist/types/mapper/select/handlers/FieldsVisitor.d.ts +4 -1
  127. package/dist/types/mapper/select/handlers/FieldsVisitor.d.ts.map +1 -1
  128. package/dist/types/mapper/select/handlers/FieldsVisitorFactory.d.ts +5 -2
  129. package/dist/types/mapper/select/handlers/FieldsVisitorFactory.d.ts.map +1 -1
  130. package/dist/types/mapper/select/optimizer/WhereReplacer.d.ts.map +1 -1
  131. package/dist/types/mapper/select/optimizer/helpers.d.ts.map +1 -1
  132. package/dist/types/resolvers/ReadHelpers.d.ts.map +1 -1
  133. package/dist/types/resolvers/RefreshViewResolver.d.ts +11 -0
  134. package/dist/types/resolvers/RefreshViewResolver.d.ts.map +1 -0
  135. package/dist/types/schema/GraphQlSchemaBuilder.d.ts +3 -1
  136. package/dist/types/schema/GraphQlSchemaBuilder.d.ts.map +1 -1
  137. package/dist/types/schema/GraphQlSchemaBuilderFactory.d.ts +3 -0
  138. package/dist/types/schema/GraphQlSchemaBuilderFactory.d.ts.map +1 -1
  139. package/dist/types/schema/OperationExtension.d.ts.map +1 -1
  140. package/dist/types/schema/RefreshViewMutationProvider.d.ts +11 -0
  141. package/dist/types/schema/RefreshViewMutationProvider.d.ts.map +1 -0
  142. package/dist/types/schema/utils.d.ts.map +1 -1
  143. package/dist/types/tsconfig.tsbuildinfo +1 -1
  144. package/dist/types/utils/isIt.d.ts.map +1 -1
  145. package/dist/types/utils/paginationUtils.d.ts.map +1 -1
  146. package/dist/types/utils/promises.d.ts.map +1 -1
  147. package/dist/types/utils/singletonFactory.d.ts.map +1 -1
  148. package/dist/types/utils/strings.d.ts.map +1 -1
  149. package/dist/types/utils/tuple.d.ts.map +1 -1
  150. package/dist/types/utils/uniqueWhereFields.d.ts.map +1 -1
  151. package/dist/types/utils/viewComputedId.d.ts +2 -0
  152. package/dist/types/utils/viewComputedId.d.ts.map +1 -0
  153. package/package.json +11 -11
  154. package/src/ExecutionContainer.ts +8 -4
  155. package/src/acl/Authorizator.ts +5 -0
  156. package/src/mapper/select/handlers/FieldsVisitor.ts +33 -1
  157. package/src/mapper/select/handlers/FieldsVisitorFactory.ts +6 -1
  158. package/src/resolvers/RefreshViewResolver.ts +23 -0
  159. package/src/schema/GraphQlSchemaBuilder.ts +8 -0
  160. package/src/schema/GraphQlSchemaBuilderFactory.ts +5 -2
  161. package/src/schema/RefreshViewMutationProvider.ts +40 -0
  162. package/src/utils/viewComputedId.ts +23 -0
  163. package/tests/cases/integration/graphQlSchema/graphQlSchemaBuilder.test.ts +1 -1
  164. package/tests/src/test.ts +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"isIt.d.ts","sourceRoot":"","sources":["../../../src/utils/isIt.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,IAAI,GAAI,CAAC,SAAS,MAAM,EAAE,CAAC,SAAS,MAAM,CAAC,iBAAiB,GAAG,YAAY,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,KAAG,GAAG,IAAI,CAKhH,CAAA"}
1
+ {"version":3,"file":"isIt.d.ts","sourceRoot":"","sources":["../../../src/utils/isIt.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,IAAI,GAAI,CAAC,SAAS,MAAM,EAAE,CAAC,SAAS,MAAM,CAAC,GAAG,MAAM,CAAC,EAAE,KAAK,GAAG,EAAE,UAAU,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,KAAG,GAAG,IAAI,CAKhH,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"paginationUtils.d.ts","sourceRoot":"","sources":["../../../src/utils/paginationUtils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAA;AAC/C,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAA;AAEzC,qBAAa,gBAAgB;aAEX,aAAa,EAAE,UAAU,GAAG,SAAS;aACrC,SAAS,EAAE,UAAU,GAAG,SAAS;gBADjC,aAAa,EAAE,UAAU,GAAG,SAAS,EACrC,SAAS,EAAE,UAAU,GAAG,SAAS;IAGlD,IAAI,kBAAkB,YAErB;IAED,IAAI,aAAa,YAEhB;IAEM,cAAc,CAAC,UAAU,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,GAAG,GAAG;CAc9E;AACD,eAAO,MAAM,sBAAsB,aAAc,UAAU,CAAC,KAAK,CAAC,oBAAoB,CAAC,qBAmBtF,CAAA"}
1
+ {"version":3,"file":"paginationUtils.d.ts","sourceRoot":"","sources":["../../../src/utils/paginationUtils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAA;AAC/C,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAA;AAEzC,qBAAa,gBAAgB;aAEX,aAAa,EAAE,UAAU,GAAG,SAAS;aACrC,SAAS,EAAE,UAAU,GAAG,SAAS;gBADjC,aAAa,EAAE,UAAU,GAAG,SAAS,EACrC,SAAS,EAAE,UAAU,GAAG,SAAS;IAGlD,IAAI,kBAAkB,YAErB;IAED,IAAI,aAAa,YAEhB;IAEM,cAAc,CAAC,UAAU,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,GAAG,GAAG;CAc9E;AACD,eAAO,MAAM,sBAAsB,GAAI,UAAU,UAAU,CAAC,KAAK,CAAC,oBAAoB,CAAC,qBAmBtF,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"promises.d.ts","sourceRoot":"","sources":["../../../src/utils/promises.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,aAAa,YAAa,oBAAoB,CAAC,GAAG,CAAC,EAAE,KAAG,GAAG,EAEvE,CAAA;AAED,eAAO,MAAM,kBAAkB,GAAI,CAAC,WAAW,oBAAoB,CAAC,CAAC,CAAC,EAAE,KAAG,CAAC,EAE3E,CAAA"}
1
+ {"version":3,"file":"promises.d.ts","sourceRoot":"","sources":["../../../src/utils/promises.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,aAAa,GAAI,SAAS,oBAAoB,CAAC,GAAG,CAAC,EAAE,KAAG,GAAG,EAEvE,CAAA;AAED,eAAO,MAAM,kBAAkB,GAAI,CAAC,EAAE,SAAS,oBAAoB,CAAC,CAAC,CAAC,EAAE,KAAG,CAAC,EAE3E,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"singletonFactory.d.ts","sourceRoot":"","sources":["../../../src/utils/singletonFactory.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,gBAAgB,GAAI,CAAC,EAAE,EAAE,WAAW,IAAI,kBAAkB,CAAC,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,KAAK,CAAC,YAGjF,EAAE,SAAS,IAAI,KAAG,CAkBhC,CAAA"}
1
+ {"version":3,"file":"singletonFactory.d.ts","sourceRoot":"","sources":["../../../src/utils/singletonFactory.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,gBAAgB,GAAI,CAAC,EAAE,EAAE,GAAG,MAAM,EAAE,IAAI,GAAG,SAAS,EAAE,IAAI,CAAC,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,KAAK,CAAC,MAGvF,MAAM,EAAE,EAAE,OAAO,IAAI,KAAG,CAkBhC,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"strings.d.ts","sourceRoot":"","sources":["../../../src/utils/strings.ts"],"names":[],"mappings":"AAAA,QAAA,MAAM,qBAAqB,UAAW,MAAM,WAE3C,CAAA;AAED,OAAO,EAAE,qBAAqB,EAAE,CAAA"}
1
+ {"version":3,"file":"strings.d.ts","sourceRoot":"","sources":["../../../src/utils/strings.ts"],"names":[],"mappings":"AAAA,QAAA,MAAM,qBAAqB,GAAI,OAAO,MAAM,WAE3C,CAAA;AAED,OAAO,EAAE,qBAAqB,EAAE,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"tuple.d.ts","sourceRoot":"","sources":["../../../src/utils/tuple.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,KAAK,GAAI,CAAC,SAAS,OAAO,EAAE,WAAW,CAAC,MAAS,CAAA"}
1
+ {"version":3,"file":"tuple.d.ts","sourceRoot":"","sources":["../../../src/utils/tuple.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,KAAK,GAAI,CAAC,SAAS,OAAO,EAAE,EAAE,GAAG,MAAM,CAAC,MAAS,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"uniqueWhereFields.d.ts","sourceRoot":"","sources":["../../../src/utils/uniqueWhereFields.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAA;AAEzC,KAAK,YAAY,GAAG,SAAS,MAAM,EAAE,CAAA;AACrC,eAAO,MAAM,uBAAuB,WAAY,KAAK,CAAC,MAAM,UAAU,KAAK,CAAC,MAAM,KAAG,SAAS,CAAC,YAAY,CAAC,EAc3G,CAAA"}
1
+ {"version":3,"file":"uniqueWhereFields.d.ts","sourceRoot":"","sources":["../../../src/utils/uniqueWhereFields.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAA;AAEzC,KAAK,YAAY,GAAG,SAAS,MAAM,EAAE,CAAA;AACrC,eAAO,MAAM,uBAAuB,GAAI,QAAQ,KAAK,CAAC,MAAM,EAAE,QAAQ,KAAK,CAAC,MAAM,KAAG,SAAS,CAAC,YAAY,CAAC,EAc3G,CAAA"}
@@ -0,0 +1,2 @@
1
+ export declare const viewComputedId: (inputs: (string)[]) => string;
2
+ //# sourceMappingURL=viewComputedId.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"viewComputedId.d.ts","sourceRoot":"","sources":["../../../src/utils/viewComputedId.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,cAAc,GAAI,QAAQ,CAAC,MAAM,CAAC,EAAE,KAAG,MAWnD,CAAA"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@contember/engine-content-api",
3
- "version": "2.1.0-alpha.1",
3
+ "version": "2.1.0-alpha.3",
4
4
  "license": "Apache-2.0",
5
5
  "main": "./dist/production/index.js",
6
6
  "typings": "./dist/types/index.d.ts",
@@ -26,19 +26,19 @@
26
26
  "generate": "gql-gen --config graphql.codegen.yml"
27
27
  },
28
28
  "dependencies": {
29
- "@contember/database": "2.1.0-alpha.1",
30
- "@contember/dic": "2.1.0-alpha.1",
31
- "@contember/graphql-utils": "2.1.0-alpha.1",
32
- "@contember/logger": "2.1.0-alpha.1",
33
- "@contember/schema": "2.1.0-alpha.1",
34
- "@contember/schema-definition": "2.1.0-alpha.1",
35
- "@contember/schema-utils": "2.1.0-alpha.1",
29
+ "@contember/database": "2.1.0-alpha.3",
30
+ "@contember/dic": "2.1.0-alpha.3",
31
+ "@contember/graphql-utils": "2.1.0-alpha.3",
32
+ "@contember/logger": "2.1.0-alpha.3",
33
+ "@contember/schema": "2.1.0-alpha.3",
34
+ "@contember/schema-definition": "2.1.0-alpha.3",
35
+ "@contember/schema-utils": "2.1.0-alpha.3",
36
36
  "fast-deep-equal": "^3.1.3"
37
37
  },
38
38
  "devDependencies": {
39
- "@contember/database-tester": "2.1.0-alpha.1",
40
- "@contember/schema-definition": "2.1.0-alpha.1",
41
- "@types/node": "^20.16.11",
39
+ "@contember/database-tester": "2.1.0-alpha.3",
40
+ "@contember/schema-definition": "2.1.0-alpha.3",
41
+ "@types/node": "^20.17.22",
42
42
  "graphql": "^16.9.0",
43
43
  "pg": "^8.12.0"
44
44
  },
@@ -28,7 +28,7 @@ import {
28
28
  import { Builder } from '@contember/dic'
29
29
  import { Acl, Model, Schema } from '@contember/schema'
30
30
  import { Client, DatabaseMetadata, SelectBuilder as DbSelectBuilder } from '@contember/database'
31
- import { Providers } from '@contember/schema-utils'
31
+ import { ParsedMembership, Providers } from '@contember/schema-utils'
32
32
  import { PaginatedHasManyExecutionHandler } from './extensions/paginatedHasMany/PaginatedHasManyExecutionHandler'
33
33
  import { PaginatedHasManyFieldProvider } from './extensions/paginatedHasMany/PaginatedHasManyFieldProvider'
34
34
  import { WhereOptimizer } from './mapper/select/optimizer/WhereOptimizer'
@@ -41,6 +41,7 @@ import {
41
41
  QueryAstFactory,
42
42
  ValidationDataSelector,
43
43
  } from './input-validation'
44
+ import { RefreshViewResolver } from './resolvers/RefreshViewResolver'
44
45
 
45
46
  export type ExecutionContainerArgs = {
46
47
  schema: Schema
@@ -59,6 +60,7 @@ export interface ExecutionContainer {
59
60
  readResolver: ReadResolver
60
61
  mutationResolver: MutationResolver
61
62
  validationResolver: ValidationResolver
63
+ refreshViewResolver: RefreshViewResolver
62
64
  }
63
65
 
64
66
  export type ExecutionContainerBuilder = ReturnType<ExecutionContainerFactory['createBuilderInternal']>
@@ -122,8 +124,8 @@ export class ExecutionContainerFactory {
122
124
  new OrderByBuilder(schema.model, joinBuilder))
123
125
  .addService('relationFetcher', ({ whereBuilder, orderByBuilder, predicatesInjector, pathFactory }) =>
124
126
  new RelationFetcher(whereBuilder, orderByBuilder, predicatesInjector, pathFactory))
125
- .addService('fieldsVisitorFactory', ({ relationFetcher, predicateFactory, schema }) =>
126
- new FieldsVisitorFactory(relationFetcher, predicateFactory, schema.settings.content ?? {}))
127
+ .addService('fieldsVisitorFactory', ({ relationFetcher, predicateFactory, schema, providers }) =>
128
+ new FieldsVisitorFactory(schema.model, relationFetcher, predicateFactory, schema.settings.content ?? {}, providers))
127
129
  .addService('metaHandler', ({ whereBuilder, predicateFactory }) =>
128
130
  new MetaHandler(whereBuilder, predicateFactory))
129
131
  .addService('uniqueWhereExpander', ({ schema }) =>
@@ -209,10 +211,12 @@ export class ExecutionContainerFactory {
209
211
  new MutationResolver(schema.model, mapperFactory, inputPreValidator, queryAstFactory, schemaDatabaseMetadata))
210
212
  .addService('validationResolver', ({ inputPreValidator, mapperFactory }) =>
211
213
  new ValidationResolver(mapperFactory, inputPreValidator))
214
+ .addService('refreshViewResolver', ({ schema, mapperFactory }) =>
215
+ new RefreshViewResolver(schema, mapperFactory))
212
216
  }
213
217
 
214
218
  public create(args: ExecutionContainerArgs): ExecutionContainer {
215
- return this.createBuilder(args).build().pick('validationResolver', 'readResolver', 'mutationResolver')
219
+ return this.createBuilder(args).build().pick('validationResolver', 'readResolver', 'mutationResolver', 'refreshViewResolver')
216
220
  }
217
221
  }
218
222
 
@@ -7,6 +7,7 @@ export class Authorizator {
7
7
  constructor(
8
8
  private readonly permissions: Acl.Permissions,
9
9
  private readonly defaultCustomPrimary: boolean,
10
+ private readonly allowRefreshMaterializedView: boolean,
10
11
  ) {
11
12
  }
12
13
 
@@ -56,4 +57,8 @@ export class Authorizator {
56
57
  isRootOperationDisallowed(entity: string, operation: Acl.Operation): boolean {
57
58
  return this.permissions?.[entity]?.operations?.noRoot?.includes(operation) ?? false
58
59
  }
60
+
61
+ isRefreshMaterializedViewAllowed(entity: string): boolean {
62
+ return this.permissions?.[entity]?.operations?.refreshMaterializedView ?? this.allowRefreshMaterializedView
63
+ }
59
64
  }
@@ -4,20 +4,27 @@ import { RelationFetcher } from '../RelationFetcher'
4
4
  import { SelectExecutionHandlerContext } from '../SelectExecutionHandler'
5
5
  import { PredicateFactory } from '../../../acl'
6
6
  import { Literal, wrapIdentifier } from '@contember/database'
7
+ import { ColumnValueGetter } from '../SelectHydrator'
8
+ import { Providers } from '@contember/schema-utils'
9
+ import { getColumnName } from '@contember/schema-utils'
10
+ import { viewComputedId } from '../../../utils/viewComputedId'
7
11
 
8
12
  export class FieldsVisitor implements Model.RelationByTypeVisitor<void>, Model.ColumnVisitor<void> {
9
13
  constructor(
14
+ private readonly schema: Model.Schema,
10
15
  private readonly relationFetcher: RelationFetcher,
11
16
  private readonly predicateFactory: PredicateFactory,
12
17
  private readonly mapper: Mapper,
13
18
  private readonly executionContext: SelectExecutionHandlerContext,
14
19
  private readonly relationPath: Model.AnyRelationContext[],
15
20
  private readonly settings: Settings.ContentSettings,
21
+ private readonly providers: Providers,
16
22
  ) {}
17
23
 
18
24
  visitColumn({ entity, column }: Model.ColumnContext): void {
19
25
  const columnPath = this.executionContext.path
20
- const tableAlias = columnPath.back().alias
26
+ const tablePath = columnPath.back()
27
+ const tableAlias = tablePath.alias
21
28
  const columnAlias = columnPath.alias
22
29
 
23
30
  let selectFrom = wrapIdentifier(tableAlias) + '.' + wrapIdentifier(column.columnName)
@@ -31,9 +38,34 @@ export class FieldsVisitor implements Model.RelationByTypeVisitor<void>, Model.C
31
38
  selectFrom += '::text[]'
32
39
  }
33
40
 
41
+ let columnValueGetter: ColumnValueGetter | undefined = undefined
42
+ if (entity.view && column.name === entity.primary && column.type === Model.ColumnType.Uuid) {
43
+ if (entity.view.idSource) {
44
+ const aliases: string[] = []
45
+ for (const source of entity.view.idSource) {
46
+ const columnName = getColumnName(this.schema, entity, source)
47
+ const idSrcPath = columnPath.for(source + '__id_src')
48
+ aliases.push(idSrcPath.alias)
49
+ this.executionContext.addColumn({
50
+ query: qb => qb.select([tableAlias, columnName], idSrcPath.alias),
51
+ })
52
+ }
53
+
54
+ columnValueGetter = row => {
55
+ return viewComputedId(aliases.map(it => row[it]?.toString() || ''))
56
+ }
57
+ } else {
58
+ columnValueGetter = row => {
59
+ return row[columnAlias] ?? (this.providers.uuid({ version: this.settings.uuidVersion }))
60
+ }
61
+
62
+ }
63
+ }
64
+
34
65
  this.executionContext.addColumn({
35
66
  query: qb => qb.select(new Literal(selectFrom), columnAlias),
36
67
  predicate: this.getRequiredPredicate(entity, column),
68
+ valueGetter: columnValueGetter,
37
69
  })
38
70
  }
39
71
 
@@ -3,23 +3,28 @@ import { RelationFetcher } from '../RelationFetcher'
3
3
  import { Mapper } from '../../Mapper'
4
4
  import { SelectExecutionHandlerContext } from '../SelectExecutionHandler'
5
5
  import { PredicateFactory } from '../../../acl'
6
- import { Settings } from '@contember/schema'
6
+ import { Model, Settings } from '@contember/schema'
7
+ import { Providers } from '@contember/schema-utils'
7
8
 
8
9
  export class FieldsVisitorFactory {
9
10
  constructor(
11
+ private readonly schema: Model.Schema,
10
12
  private readonly relationFetcher: RelationFetcher,
11
13
  private readonly predicateFactory: PredicateFactory,
12
14
  private readonly settings: Settings.ContentSettings,
15
+ private readonly providers: Providers,
13
16
  ) {}
14
17
 
15
18
  create(mapper: Mapper, context: SelectExecutionHandlerContext): FieldsVisitor {
16
19
  return new FieldsVisitor(
20
+ this.schema,
17
21
  this.relationFetcher,
18
22
  this.predicateFactory,
19
23
  mapper,
20
24
  context,
21
25
  context.relationPath,
22
26
  this.settings,
27
+ this.providers,
23
28
  )
24
29
  }
25
30
  }
@@ -0,0 +1,23 @@
1
+ import { Schema } from '@contember/schema'
2
+ import { MapperFactory } from '../mapper'
3
+ import { wrapIdentifier } from '@contember/database'
4
+ import { Authorizator } from '../acl'
5
+
6
+ export class RefreshViewResolver {
7
+ constructor(
8
+ private readonly schema: Schema,
9
+ private readonly mapperFactory: MapperFactory,
10
+ ) {
11
+ }
12
+
13
+ public async resolve(entity: string): Promise<{ ok: boolean }> {
14
+ const mapper = this.mapperFactory.create()
15
+ const entityModel = this.schema.model.entities[entity]
16
+ if (!entityModel) {
17
+ throw new Error(`Entity ${entity} not found`)
18
+ }
19
+ await mapper.db.query(`REFRESH MATERIALIZED VIEW ${wrapIdentifier(entityModel.tableName)}`)
20
+
21
+ return { ok: true }
22
+ }
23
+ }
@@ -15,6 +15,7 @@ import { QueryProvider } from './QueryProvider'
15
15
  import { ValidationQueriesProvider } from './ValidationQueriesProvider'
16
16
  import { Context } from '../types'
17
17
  import { ResultSchemaTypeProvider } from './ResultSchemaTypeProvider'
18
+ import { RefreshViewMutationProvider } from './RefreshViewMutationProvider'
18
19
 
19
20
  type BuildArgs = {
20
21
  queries?: Map<string, GraphQLFieldConfig<any, Context, any>>
@@ -29,6 +30,7 @@ export class GraphQlSchemaBuilder {
29
30
  private readonly validationQueriesProvider: ValidationQueriesProvider,
30
31
  private readonly mutationProvider: MutationProvider,
31
32
  private readonly resultSchemaTypeProvider: ResultSchemaTypeProvider,
33
+ private readonly refreshViewMutationProvider: RefreshViewMutationProvider,
32
34
  ) {}
33
35
 
34
36
  public build(args: BuildArgs = {}): GraphQLSchema {
@@ -117,6 +119,12 @@ export class GraphQlSchemaBuilder {
117
119
  resolve: (parent, args, context: Context, info) => context.executionContainer.readResolver.resolveQuery(info),
118
120
  })
119
121
  }
122
+
123
+ const refreshViewMutation = this.refreshViewMutationProvider.getMutation()
124
+ if (refreshViewMutation) {
125
+ mutations.set('refreshMaterializedView', refreshViewMutation)
126
+ }
127
+
120
128
  const infoType = new GraphQLObjectType({
121
129
  name: 'Info',
122
130
  fields: () => ({
@@ -29,6 +29,7 @@ import { PaginatedHasManyFieldProvider } from '../extensions/paginatedHasMany/Pa
29
29
  import { PaginatedHasManyFieldProviderVisitor } from '../extensions/paginatedHasMany/PaginatedHasManyFieldProviderVisitor'
30
30
  import { Builder } from '@contember/dic'
31
31
  import { ConnectOrCreateRelationInputProvider } from './mutations/ConnectOrCreateRelationInputProvider'
32
+ import { RefreshViewMutationProvider } from './RefreshViewMutationProvider'
32
33
 
33
34
  export class GraphQlSchemaBuilderFactory {
34
35
  constructor() {}
@@ -101,8 +102,10 @@ export class GraphQlSchemaBuilderFactory {
101
102
  new MutationProvider(authorizator, whereTypeProvider, entityTypeProvider, createEntityInputProvider, updateEntityInputProvider, resultSchemaTypeProvider))
102
103
  .addService('validationQueriesProvider', ({ whereTypeProvider, createEntityInputProvider, updateEntityInputProvider, resultSchemaTypeProvider }) =>
103
104
  new ValidationQueriesProvider(whereTypeProvider, createEntityInputProvider, updateEntityInputProvider, resultSchemaTypeProvider))
104
- .addService('graphQlSchemaBuilder', ({ schema, queryProvider, validationQueriesProvider, mutationProvider, resultSchemaTypeProvider }) =>
105
- new GraphQlSchemaBuilder(schema, queryProvider, validationQueriesProvider, mutationProvider, resultSchemaTypeProvider))
105
+ .addService('refreshViewMutationProvider', ({ schema, authorizator }) =>
106
+ new RefreshViewMutationProvider(schema, authorizator))
107
+ .addService('graphQlSchemaBuilder', ({ schema, queryProvider, validationQueriesProvider, mutationProvider, resultSchemaTypeProvider, refreshViewMutationProvider }) =>
108
+ new GraphQlSchemaBuilder(schema, queryProvider, validationQueriesProvider, mutationProvider, resultSchemaTypeProvider, refreshViewMutationProvider))
106
109
  .setupService('createEntityInputProvider', (it, { createEntityInputProviderAccessor }) => {
107
110
  createEntityInputProviderAccessor.set(it)
108
111
  })
@@ -0,0 +1,40 @@
1
+ import { Model } from '@contember/schema'
2
+ import { GraphQLBoolean, GraphQLEnumType, GraphQLFieldConfig, GraphQLObjectType } from 'graphql'
3
+ import { Context } from '../types'
4
+ import { Authorizator } from '../acl'
5
+
6
+ export class RefreshViewMutationProvider {
7
+ constructor(
8
+ private readonly schema: Model.Schema,
9
+ private readonly authorizator: Authorizator,
10
+ ) {
11
+ }
12
+ getMutation(): GraphQLFieldConfig<any, Context, any> | undefined {
13
+ const materializedViews = Object.values(this.schema.entities)
14
+ .filter(it => it.view?.materialized)
15
+ .filter(it => this.authorizator.isRefreshMaterializedViewAllowed(it.name))
16
+ if (materializedViews.length === 0) {
17
+ return undefined
18
+ }
19
+
20
+ const materializedViewsEnum = new GraphQLEnumType({
21
+ name: '_MaterializedView',
22
+ values: Object.fromEntries(materializedViews.map(it => [it.name, { value: it.name }])),
23
+ })
24
+
25
+ return {
26
+ type: new GraphQLObjectType({
27
+ name: 'RefreshMaterializedViewResponse',
28
+ fields: {
29
+ ok: { type: GraphQLBoolean },
30
+ },
31
+ }),
32
+ args: {
33
+ name: { type: materializedViewsEnum },
34
+ },
35
+ resolve: async (parent, args, context) => {
36
+ return await context.executionContainer.refreshViewResolver.resolve(args.name)
37
+ },
38
+ }
39
+ }
40
+ }
@@ -0,0 +1,23 @@
1
+ import crypto from 'node:crypto'
2
+
3
+ export const viewComputedId = (inputs: (string)[]): string => {
4
+ let uuidBytes: Buffer
5
+ uuidBytes = crypto.createHash('md5').update(inputs.join('\x00')).digest()
6
+
7
+ // Set the version (v8) in the high nibble of byte 6.
8
+ uuidBytes[6] = (uuidBytes[6] & 0x0f) | 0x80 // 0x80 = 1000 0000 (version 8)
9
+
10
+ // Set the variant (RFC 4122) in byte 8.
11
+ uuidBytes[8] = (uuidBytes[8] & 0x3f) | 0x80
12
+
13
+ return formatUUID(uuidBytes)
14
+ }
15
+
16
+ const formatUUID = (buf: Buffer): string => {
17
+ const hex = buf.toString('hex')
18
+ return hex.substring(0, 8)
19
+ + '-' + hex.substring(8, 12)
20
+ + '-' + hex.substring(12, 16)
21
+ + '-' + hex.substring(16, 20)
22
+ + '-' + hex.substring(20)
23
+ }
@@ -29,7 +29,7 @@ const testSchema = async (test: Test) => {
29
29
  const schema = schemaResult instanceof SchemaBuilder ? schemaResult.buildSchema() : schemaResult
30
30
  const schemaWithAcl = { ...schema, acl: { roles: {}, variables: {} } }
31
31
  const permissions = test.permissions(schemaWithAcl)
32
- const authorizator = new Authorizator(permissions, false)
32
+ const authorizator = new Authorizator(permissions, false, false)
33
33
  const graphQlSchemaBuilder = schemaFactory.create(schemaWithAcl, authorizator)
34
34
  const graphQlSchema = graphQlSchemaBuilder.build()
35
35
 
package/tests/src/test.ts CHANGED
@@ -75,7 +75,7 @@ export const failedTransaction = (executes: SqlQuery[]): SqlQuery[] => {
75
75
 
76
76
  export const execute = async (test: Test) => {
77
77
  const permissions: Acl.Permissions = test.permissions || new AllowAllPermissionFactory().create(test.schema)
78
- const authorizator = new Authorizator(permissions, false)
78
+ const authorizator = new Authorizator(permissions, false, false)
79
79
  const builder = new GraphQlSchemaBuilderFactory().create(test.schema, authorizator)
80
80
  const graphQLSchema = builder.build()
81
81