@snowtop/ent 0.1.0-alpha16 → 0.1.0-alpha160-test2

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 (176) hide show
  1. package/action/action.d.ts +25 -14
  2. package/action/action.js +22 -7
  3. package/action/executor.d.ts +16 -3
  4. package/action/executor.js +89 -28
  5. package/action/experimental_action.d.ts +25 -16
  6. package/action/experimental_action.js +34 -14
  7. package/action/index.d.ts +4 -1
  8. package/action/index.js +7 -1
  9. package/action/operations.d.ts +126 -0
  10. package/action/operations.js +686 -0
  11. package/action/orchestrator.d.ts +43 -12
  12. package/action/orchestrator.js +461 -101
  13. package/action/relative_value.d.ts +47 -0
  14. package/action/relative_value.js +125 -0
  15. package/action/transaction.d.ts +10 -0
  16. package/action/transaction.js +23 -0
  17. package/auth/auth.d.ts +1 -1
  18. package/core/base.d.ts +56 -23
  19. package/core/base.js +7 -1
  20. package/core/clause.d.ts +103 -39
  21. package/core/clause.js +430 -66
  22. package/core/config.d.ts +13 -3
  23. package/core/config.js +10 -1
  24. package/core/const.d.ts +3 -0
  25. package/core/const.js +6 -0
  26. package/core/context.d.ts +6 -3
  27. package/core/context.js +22 -3
  28. package/core/convert.d.ts +1 -1
  29. package/core/date.js +1 -5
  30. package/core/db.d.ts +12 -8
  31. package/core/db.js +21 -9
  32. package/core/ent.d.ts +99 -95
  33. package/core/ent.js +550 -602
  34. package/core/global_schema.d.ts +7 -0
  35. package/core/global_schema.js +51 -0
  36. package/core/loaders/assoc_count_loader.d.ts +5 -2
  37. package/core/loaders/assoc_count_loader.js +19 -3
  38. package/core/loaders/assoc_edge_loader.d.ts +2 -3
  39. package/core/loaders/assoc_edge_loader.js +23 -17
  40. package/core/loaders/index.d.ts +1 -2
  41. package/core/loaders/index.js +1 -5
  42. package/core/loaders/loader.d.ts +3 -3
  43. package/core/loaders/loader.js +4 -21
  44. package/core/loaders/object_loader.d.ts +30 -9
  45. package/core/loaders/object_loader.js +226 -79
  46. package/core/loaders/query_loader.d.ts +7 -13
  47. package/core/loaders/query_loader.js +60 -24
  48. package/core/loaders/raw_count_loader.d.ts +1 -0
  49. package/core/loaders/raw_count_loader.js +8 -3
  50. package/core/logger.d.ts +1 -1
  51. package/core/logger.js +1 -0
  52. package/core/privacy.d.ts +26 -16
  53. package/core/privacy.js +68 -51
  54. package/core/query/assoc_query.d.ts +3 -2
  55. package/core/query/assoc_query.js +10 -2
  56. package/core/query/custom_clause_query.d.ts +29 -0
  57. package/core/query/custom_clause_query.js +105 -0
  58. package/core/query/custom_query.d.ts +19 -2
  59. package/core/query/custom_query.js +111 -13
  60. package/core/query/index.d.ts +1 -0
  61. package/core/query/index.js +3 -1
  62. package/core/query/query.d.ts +18 -4
  63. package/core/query/query.js +135 -58
  64. package/core/query/shared_assoc_test.d.ts +2 -1
  65. package/core/query/shared_assoc_test.js +186 -55
  66. package/core/query/shared_test.d.ts +9 -2
  67. package/core/query/shared_test.js +529 -236
  68. package/core/query_impl.d.ts +8 -0
  69. package/core/query_impl.js +28 -0
  70. package/core/viewer.d.ts +2 -0
  71. package/core/viewer.js +3 -1
  72. package/graphql/graphql.d.ts +108 -22
  73. package/graphql/graphql.js +183 -137
  74. package/graphql/graphql_field_helpers.d.ts +9 -3
  75. package/graphql/graphql_field_helpers.js +22 -2
  76. package/graphql/index.d.ts +2 -2
  77. package/graphql/index.js +5 -5
  78. package/graphql/query/connection_type.d.ts +9 -9
  79. package/graphql/query/shared_assoc_test.js +1 -1
  80. package/graphql/query/shared_edge_connection.js +1 -19
  81. package/graphql/scalars/orderby_direction.d.ts +2 -0
  82. package/graphql/scalars/orderby_direction.js +15 -0
  83. package/imports/dataz/example1/_auth.js +128 -47
  84. package/imports/dataz/example1/_viewer.js +87 -39
  85. package/imports/index.d.ts +7 -2
  86. package/imports/index.js +20 -5
  87. package/index.d.ts +23 -5
  88. package/index.js +35 -10
  89. package/package.json +20 -19
  90. package/parse_schema/parse.d.ts +33 -9
  91. package/parse_schema/parse.js +182 -33
  92. package/schema/base_schema.d.ts +13 -3
  93. package/schema/base_schema.js +13 -0
  94. package/schema/field.d.ts +78 -21
  95. package/schema/field.js +232 -72
  96. package/schema/index.d.ts +2 -2
  97. package/schema/index.js +7 -2
  98. package/schema/json_field.d.ts +16 -4
  99. package/schema/json_field.js +32 -2
  100. package/schema/schema.d.ts +109 -20
  101. package/schema/schema.js +42 -53
  102. package/schema/struct_field.d.ts +15 -3
  103. package/schema/struct_field.js +117 -22
  104. package/schema/union_field.d.ts +1 -1
  105. package/scripts/custom_compiler.js +12 -8
  106. package/scripts/custom_graphql.js +167 -64
  107. package/scripts/migrate_v0.1.js +36 -0
  108. package/scripts/move_types.js +120 -0
  109. package/scripts/read_schema.js +22 -7
  110. package/testutils/action/complex_schemas.d.ts +69 -0
  111. package/testutils/action/complex_schemas.js +405 -0
  112. package/testutils/builder.d.ts +37 -41
  113. package/testutils/builder.js +66 -46
  114. package/testutils/db/fixture.d.ts +10 -0
  115. package/testutils/db/fixture.js +26 -0
  116. package/testutils/db/{test_db.d.ts → temp_db.d.ts} +32 -8
  117. package/testutils/db/{test_db.js → temp_db.js} +251 -48
  118. package/testutils/db/value.d.ts +7 -0
  119. package/testutils/db/value.js +251 -0
  120. package/testutils/db_mock.d.ts +16 -4
  121. package/testutils/db_mock.js +52 -9
  122. package/testutils/db_time_zone.d.ts +4 -0
  123. package/testutils/db_time_zone.js +41 -0
  124. package/testutils/ent-graphql-tests/index.d.ts +7 -1
  125. package/testutils/ent-graphql-tests/index.js +56 -26
  126. package/testutils/fake_comms.js +1 -1
  127. package/testutils/fake_data/const.d.ts +2 -1
  128. package/testutils/fake_data/const.js +3 -0
  129. package/testutils/fake_data/fake_contact.d.ts +7 -3
  130. package/testutils/fake_data/fake_contact.js +13 -7
  131. package/testutils/fake_data/fake_event.d.ts +4 -1
  132. package/testutils/fake_data/fake_event.js +7 -6
  133. package/testutils/fake_data/fake_tag.d.ts +36 -0
  134. package/testutils/fake_data/fake_tag.js +89 -0
  135. package/testutils/fake_data/fake_user.d.ts +8 -5
  136. package/testutils/fake_data/fake_user.js +31 -19
  137. package/testutils/fake_data/index.js +5 -1
  138. package/testutils/fake_data/internal.d.ts +2 -0
  139. package/testutils/fake_data/internal.js +7 -1
  140. package/testutils/fake_data/tag_query.d.ts +13 -0
  141. package/testutils/fake_data/tag_query.js +48 -0
  142. package/testutils/fake_data/test_helpers.d.ts +14 -6
  143. package/testutils/fake_data/test_helpers.js +31 -15
  144. package/testutils/fake_data/user_query.d.ts +16 -6
  145. package/testutils/fake_data/user_query.js +72 -23
  146. package/testutils/fake_log.js +1 -1
  147. package/testutils/parse_sql.d.ts +6 -0
  148. package/testutils/parse_sql.js +16 -2
  149. package/testutils/test_edge_global_schema.d.ts +15 -0
  150. package/testutils/test_edge_global_schema.js +62 -0
  151. package/testutils/write.d.ts +2 -2
  152. package/testutils/write.js +33 -7
  153. package/tsc/ast.d.ts +15 -3
  154. package/tsc/ast.js +114 -23
  155. package/tsc/compilerOptions.js +5 -1
  156. package/tsc/move_generated.d.ts +1 -0
  157. package/tsc/move_generated.js +164 -0
  158. package/tsc/transform.d.ts +22 -0
  159. package/tsc/transform.js +182 -0
  160. package/tsc/transform_action.d.ts +22 -0
  161. package/tsc/transform_action.js +183 -0
  162. package/tsc/transform_ent.d.ts +17 -0
  163. package/tsc/transform_ent.js +60 -0
  164. package/tsc/transform_schema.d.ts +27 -0
  165. package/{scripts → tsc}/transform_schema.js +146 -117
  166. package/core/loaders/index_loader.d.ts +0 -14
  167. package/core/loaders/index_loader.js +0 -27
  168. package/graphql/enums.d.ts +0 -3
  169. package/graphql/enums.js +0 -25
  170. package/scripts/move_generated.js +0 -141
  171. package/scripts/transform_actions.js +0 -266
  172. package/scripts/transform_code.d.ts +0 -1
  173. package/scripts/transform_code.js +0 -111
  174. package/scripts/transform_schema.d.ts +0 -1
  175. /package/scripts/{move_generated.d.ts → migrate_v0.1.d.ts} +0 -0
  176. /package/scripts/{transform_actions.d.ts → move_types.d.ts} +0 -0
package/index.js CHANGED
@@ -1,7 +1,11 @@
1
1
  "use strict";
2
2
  var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
3
  if (k2 === undefined) k2 = k;
4
- Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
5
9
  }) : (function(o, m, k, k2) {
6
10
  if (k2 === undefined) k2 = k;
7
11
  o[k2] = m[k];
@@ -25,13 +29,14 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
25
29
  return (mod && mod.__esModule) ? mod : { "default": mod };
26
30
  };
27
31
  Object.defineProperty(exports, "__esModule", { value: true });
28
- exports.DenyIfViewerInboundEdgeDoesNotExistRule = exports.DenyIfEdgeDoesNotExistRule = exports.DenyIfViewerOutboundEdgeExistsRule = exports.DenyIfViewerInboundEdgeExistsRule = exports.DenyIfEdgeExistsRule = exports.AllowIfViewerOutboundEdgeExistsRule = exports.AllowIfViewerInboundEdgeExistsRule = exports.AllowIfEdgeExistsRule = exports.DenyIfViewerEqualsRule = exports.AllowIfViewerEqualsRule = exports.DenyIfEntPropertyIsRule = exports.AllowIfEntPropertyIsRule = exports.AllowIfViewerIsEntPropertyRule = exports.AllowIfViewerIsRule = exports.AllowIfFuncRule = exports.AllowIfViewerRule = exports.AllowIfHasIdentity = exports.DenyIfLoggedOutRule = exports.DenyIfLoggedInRule = exports.AlwaysDenyRule = exports.AlwaysAllowRule = exports.EntPrivacyError = exports.DB = exports.getEdgeTypeInGroup = exports.loadNodesByEdge = exports.loadEdgeForID2 = exports.loadRawEdgeCountX = exports.loadUniqueNode = exports.loadUniqueEdge = exports.loadEdges = exports.loadEdgeDatas = exports.loadEdgeData = exports.AssocEdgeData = exports.AssocEdge = exports.DeleteNodeOperation = exports.EdgeOperation = exports.EditNodeOperation = exports.loadRows = exports.loadRow = exports.loadRowX = exports.performRawQuery = exports.loadEntXViaKey = exports.loadEntViaKey = exports.loadDerivedEntX = exports.loadDerivedEnt = exports.loadEnts = exports.loadEntX = exports.loadCustomEnts = exports.loadCustomData = exports.loadEnt = void 0;
29
- exports.setLogLevels = exports.loadConfig = exports.LoggedOutViewer = exports.IDViewer = exports.ContextCache = exports.query = exports.AllowIfViewerHasIdentityPrivacyPolicy = exports.AllowIfViewerPrivacyPolicy = exports.AllowIfSubPolicyAllowsRule = exports.AllowIfConditionAppliesRule = exports.AlwaysDenyPrivacyPolicy = exports.AlwaysAllowPrivacyPolicy = exports.applyPrivacyPolicyX = exports.applyPrivacyPolicy = exports.DelayedResultRule = exports.DenyIfEntIsVisiblePolicy = exports.AllowIfEntIsVisiblePolicy = exports.DenyIfEntIsNotVisibleRule = exports.DenyIfEntIsVisibleRule = exports.AllowIfEntIsNotVisibleRule = exports.AllowIfEntIsVisibleRule = exports.DenyIfViewerOutboundEdgeDoesNotExistRule = void 0;
32
+ exports.DenyIfViewerInboundEdgeExistsRule = exports.DenyIfEdgeExistsRule = exports.AllowIfViewerOutboundEdgeExistsRule = exports.AllowIfViewerInboundEdgeExistsRule = exports.AllowIfEdgeExistsRule = exports.DenyIfViewerEqualsRule = exports.AllowIfViewerEqualsRule = exports.DenyIfEntPropertyIsRule = exports.AllowIfEntPropertyIsRule = exports.AllowIfViewerIsEntPropertyRule = exports.AllowIfViewerIsRule = exports.AllowIfFuncRule = exports.AllowIfViewerRule = exports.AllowIfHasIdentity = exports.DenyIfLoggedOutRule = exports.DenyIfLoggedInRule = exports.AlwaysDenyRule = exports.AlwaysAllowRule = exports.EntPrivacyError = exports.DB = exports.setGlobalSchema = exports.DeleteNodeOperation = exports.EdgeOperation = exports.RawQueryOperation = exports.EditNodeOperation = exports.getEdgeTypeInGroup = exports.loadNodesByEdge = exports.loadEdgeForID2 = exports.loadRawEdgeCountX = exports.loadUniqueNode = exports.loadUniqueEdge = exports.loadEdges = exports.loadEdgeDatas = exports.loadEdgeData = exports.AssocEdgeData = exports.AssocEdge = exports.loadRows = exports.loadRow = exports.loadRowX = exports.performRawQuery = exports.loadEntXViaKey = exports.loadEntViaKey = exports.loadDerivedEntX = exports.loadDerivedEnt = exports.loadEnts = exports.loadEntX = exports.loadCustomCount = exports.loadCustomEnts = exports.loadCustomData = exports.loadEnt = void 0;
33
+ exports.setLogLevels = exports.loadConfig = exports.LoggedOutViewer = exports.IDViewer = exports.ContextCache = exports.query = exports.AllowIfViewerHasIdentityPrivacyPolicy = exports.AllowIfViewerPrivacyPolicy = exports.AllowIfSubPolicyAllowsRule = exports.AllowIfConditionAppliesRule = exports.AlwaysDenyPrivacyPolicy = exports.AlwaysAllowPrivacyPolicy = exports.applyPrivacyPolicyX = exports.applyPrivacyPolicy = exports.DelayedResultRule = exports.DenyIfEntIsVisiblePolicy = exports.AllowIfEntIsVisiblePolicy = exports.DenyIfEntIsNotVisibleRule = exports.DenyIfEntIsVisibleRule = exports.AllowIfEntIsNotVisibleRule = exports.AllowIfEntIsVisibleRule = exports.DenyIfViewerOutboundEdgeDoesNotExistRule = exports.DenyIfViewerInboundEdgeDoesNotExistRule = exports.DenyIfEdgeDoesNotExistRule = exports.DenyIfViewerOutboundEdgeExistsRule = void 0;
30
34
  __exportStar(require("./core/base"), exports);
31
35
  var ent_1 = require("./core/ent");
32
36
  Object.defineProperty(exports, "loadEnt", { enumerable: true, get: function () { return ent_1.loadEnt; } });
33
37
  Object.defineProperty(exports, "loadCustomData", { enumerable: true, get: function () { return ent_1.loadCustomData; } });
34
38
  Object.defineProperty(exports, "loadCustomEnts", { enumerable: true, get: function () { return ent_1.loadCustomEnts; } });
39
+ Object.defineProperty(exports, "loadCustomCount", { enumerable: true, get: function () { return ent_1.loadCustomCount; } });
35
40
  Object.defineProperty(exports, "loadEntX", { enumerable: true, get: function () { return ent_1.loadEntX; } });
36
41
  Object.defineProperty(exports, "loadEnts", { enumerable: true, get: function () { return ent_1.loadEnts; } });
37
42
  Object.defineProperty(exports, "loadDerivedEnt", { enumerable: true, get: function () { return ent_1.loadDerivedEnt; } });
@@ -43,9 +48,6 @@ Object.defineProperty(exports, "performRawQuery", { enumerable: true, get: funct
43
48
  Object.defineProperty(exports, "loadRowX", { enumerable: true, get: function () { return ent_1.loadRowX; } });
44
49
  Object.defineProperty(exports, "loadRow", { enumerable: true, get: function () { return ent_1.loadRow; } });
45
50
  Object.defineProperty(exports, "loadRows", { enumerable: true, get: function () { return ent_1.loadRows; } });
46
- Object.defineProperty(exports, "EditNodeOperation", { enumerable: true, get: function () { return ent_1.EditNodeOperation; } });
47
- Object.defineProperty(exports, "EdgeOperation", { enumerable: true, get: function () { return ent_1.EdgeOperation; } });
48
- Object.defineProperty(exports, "DeleteNodeOperation", { enumerable: true, get: function () { return ent_1.DeleteNodeOperation; } });
49
51
  Object.defineProperty(exports, "AssocEdge", { enumerable: true, get: function () { return ent_1.AssocEdge; } });
50
52
  Object.defineProperty(exports, "AssocEdgeData", { enumerable: true, get: function () { return ent_1.AssocEdgeData; } });
51
53
  Object.defineProperty(exports, "loadEdgeData", { enumerable: true, get: function () { return ent_1.loadEdgeData; } });
@@ -57,6 +59,14 @@ Object.defineProperty(exports, "loadRawEdgeCountX", { enumerable: true, get: fun
57
59
  Object.defineProperty(exports, "loadEdgeForID2", { enumerable: true, get: function () { return ent_1.loadEdgeForID2; } });
58
60
  Object.defineProperty(exports, "loadNodesByEdge", { enumerable: true, get: function () { return ent_1.loadNodesByEdge; } });
59
61
  Object.defineProperty(exports, "getEdgeTypeInGroup", { enumerable: true, get: function () { return ent_1.getEdgeTypeInGroup; } });
62
+ // TODO should these even be exported from the root?
63
+ var operations_1 = require("./action/operations");
64
+ Object.defineProperty(exports, "EditNodeOperation", { enumerable: true, get: function () { return operations_1.EditNodeOperation; } });
65
+ Object.defineProperty(exports, "RawQueryOperation", { enumerable: true, get: function () { return operations_1.RawQueryOperation; } });
66
+ Object.defineProperty(exports, "EdgeOperation", { enumerable: true, get: function () { return operations_1.EdgeOperation; } });
67
+ Object.defineProperty(exports, "DeleteNodeOperation", { enumerable: true, get: function () { return operations_1.DeleteNodeOperation; } });
68
+ var global_schema_1 = require("./core/global_schema");
69
+ Object.defineProperty(exports, "setGlobalSchema", { enumerable: true, get: function () { return global_schema_1.setGlobalSchema; } });
60
70
  const db_1 = __importDefault(require("./core/db"));
61
71
  exports.DB = db_1.default;
62
72
  __exportStar(require("./core/loaders"), exports);
@@ -101,6 +111,7 @@ Object.defineProperty(exports, "AllowIfSubPolicyAllowsRule", { enumerable: true,
101
111
  Object.defineProperty(exports, "AllowIfViewerPrivacyPolicy", { enumerable: true, get: function () { return privacy_1.AllowIfViewerPrivacyPolicy; } });
102
112
  Object.defineProperty(exports, "AllowIfViewerHasIdentityPrivacyPolicy", { enumerable: true, get: function () { return privacy_1.AllowIfViewerHasIdentityPrivacyPolicy; } });
103
113
  __exportStar(require("./core/query"), exports);
114
+ __exportStar(require("./core/query_impl"), exports);
104
115
  __exportStar(require("./schema/"), exports);
105
116
  const q = __importStar(require("./core/clause"));
106
117
  const query = {
@@ -109,17 +120,31 @@ const query = {
109
120
  And: q.And,
110
121
  AndOptional: q.AndOptional,
111
122
  Or: q.Or,
123
+ OrOptional: q.OrOptional,
112
124
  In: q.In,
125
+ UuidIn: q.UuidIn,
126
+ IntegerIn: q.IntegerIn,
127
+ TextIn: q.TextIn,
128
+ DBTypeIn: q.DBTypeIn,
129
+ UuidNotIn: q.UuidNotIn,
130
+ IntegerNotIn: q.IntegerNotIn,
131
+ TextNotIn: q.TextNotIn,
132
+ DBTypeNotIn: q.DBTypeNotIn,
113
133
  Greater: q.Greater,
114
134
  Less: q.Less,
115
135
  GreaterEq: q.GreaterEq,
116
136
  LessEq: q.LessEq,
117
137
  ArrayEq: q.ArrayEq,
118
138
  ArrayNotEq: q.ArrayNotEq,
119
- ArrayGreater: q.ArrayGreater,
120
- ArrayLess: q.ArrayLess,
121
- ArrayGreaterEq: q.ArrayGreaterEq,
122
- ArrayLessEq: q.ArrayLessEq,
139
+ PostgresArrayContainsValue: q.PostgresArrayContainsValue,
140
+ PostgresArrayContains: q.PostgresArrayContains,
141
+ PostgresArrayNotContainsValue: q.PostgresArrayNotContainsValue,
142
+ PostgresArrayNotContains: q.PostgresArrayNotContains,
143
+ PostgresArrayOverlaps: q.PostgresArrayOverlaps,
144
+ PostgresArrayNotOverlaps: q.PostgresArrayNotOverlaps,
145
+ JSONPathValuePredicate: q.JSONPathValuePredicate,
146
+ JSONObjectFieldKeyASJSON: q.JSONObjectFieldKeyASJSON,
147
+ JSONObjectFieldKeyAsText: q.JSONObjectFieldKeyAsText,
123
148
  TsQuery: q.TsQuery,
124
149
  PlainToTsQuery: q.PlainToTsQuery,
125
150
  PhraseToTsQuery: q.PhraseToTsQuery,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@snowtop/ent",
3
- "version": "0.1.0-alpha16",
3
+ "version": "0.1.0-alpha160-test2",
4
4
  "description": "snowtop ent framework",
5
5
  "main": "index.js",
6
6
  "types": "index.d.ts",
@@ -8,29 +8,30 @@
8
8
  "example": "examples"
9
9
  },
10
10
  "dependencies": {
11
- "@types/node": "^15.0.2",
11
+ "@types/node": "^20.2.5",
12
12
  "camel-case": "^4.1.2",
13
- "dataloader": "^2.0.0",
14
- "glob": "^7.1.6",
15
- "graph-data-structure": "^1.12.0",
13
+ "cosmiconfig": "^8.1.3",
14
+ "dataloader": "^2.2.2",
15
+ "glob": "^10.2.6",
16
+ "graph-data-structure": "^3.3.0",
16
17
  "js-yaml": "^4.1.0",
17
- "json5": "^2.1.3",
18
- "luxon": "^1.25.0",
18
+ "json5": "^2.2.3",
19
+ "luxon": "^3.3.0",
19
20
  "memoizee": "^0.4.15",
20
- "minimist": "^1.2.6",
21
+ "minimist": "^1.2.8",
21
22
  "pascal-case": "^3.1.2",
22
- "pg": "^8.0.3",
23
- "prettier": "^2.3.2",
24
- "reflect-metadata": "^0.1.13",
25
- "snake-case": "^3.0.3",
26
- "ts-node": "^10.2.1",
27
- "tsconfig-paths": "^3.11.0",
28
- "tslib": "^2.3.1",
29
- "typescript": "^4.4.2",
30
- "uuid": "^8.3.2"
23
+ "patch-package": "^7.0.0",
24
+ "pg": "^8.11.0",
25
+ "prettier": "^2.8.8",
26
+ "snake-case": "^3.0.4",
27
+ "ts-node": "^10.9.1",
28
+ "tsconfig-paths": "^4.2.0",
29
+ "tslib": "^2.5.2",
30
+ "typescript": "^5.0.4",
31
+ "uuid": "^9.0.0"
31
32
  },
32
33
  "peerDependencies": {
33
- "better-sqlite3": "^7.4.1",
34
+ "better-sqlite3": "^8.4.0",
34
35
  "graphql": "^16.5.0"
35
36
  },
36
37
  "peerDependenciesMeta": {
@@ -39,7 +40,7 @@
39
40
  }
40
41
  },
41
42
  "engines": {
42
- "node": ">=14.0"
43
+ "node": ">=16.0"
43
44
  },
44
45
  "devDependencies": {},
45
46
  "scripts": {},
@@ -1,24 +1,26 @@
1
1
  import { Schema, Field, AssocEdge, AssocEdgeGroup, Action } from "../schema";
2
- import { ActionField, Type } from "../schema/schema";
2
+ import { ActionField, Type, FieldMap, GlobalSchema, TransformReadBetaResult, CanViewerDo } from "../schema/schema";
3
+ export declare function processFields(src: FieldMap | Field[], patternName?: string): Promise<ProcessedField[]>;
3
4
  declare enum NullableResult {
4
5
  CONTENTS = "contents",
5
6
  CONTENTS_AND_LIST = "contentsAndList",
6
7
  ITEM = "true"
7
8
  }
8
- declare type ProcessedActionField = Omit<ActionField, "nullable"> & {
9
+ type ProcessedActionField = Omit<ActionField, "nullable"> & {
9
10
  nullable?: NullableResult;
10
11
  };
11
- declare type ProcessedAssocEdge = Omit<AssocEdge, "actionOnlyFields" | "edgeActions"> & {
12
+ type ProcessedAssocEdge = Omit<AssocEdge, "actionOnlyFields" | "edgeActions"> & {
12
13
  patternName?: string;
13
14
  edgeActions?: OutputAction[];
14
15
  };
15
16
  interface TransformFlags {
16
17
  transformsSelect?: boolean;
17
18
  transformsDelete?: boolean;
19
+ transformsLoaderCodegen?: TransformReadBetaResult;
18
20
  transformsInsert?: boolean;
19
21
  transformsUpdate?: boolean;
20
22
  }
21
- declare type ProcessedSchema = Omit<Schema, "edges" | "actions" | "edgeGroups" | "fields"> & TransformFlags & {
23
+ type ProcessedSchema = Omit<Schema, "edges" | "actions" | "edgeGroups" | "fields"> & TransformFlags & {
22
24
  actions: OutputAction[];
23
25
  assocEdges: ProcessedAssocEdge[];
24
26
  assocEdgeGroups: ProcessedAssocEdgeGroup[];
@@ -26,11 +28,12 @@ declare type ProcessedSchema = Omit<Schema, "edges" | "actions" | "edgeGroups" |
26
28
  schemaPath?: string;
27
29
  patternNames?: string[];
28
30
  };
29
- declare type ProcessedAssocEdgeGroup = Omit<AssocEdgeGroup, "edgeAction"> & {
31
+ type ProcessedAssocEdgeGroup = Omit<AssocEdgeGroup, "edgeAction"> & {
30
32
  edgeAction?: OutputAction;
31
33
  };
32
- declare type OutputAction = Omit<Action, "actionOnlyFields"> & {
34
+ type OutputAction = Omit<Action, "actionOnlyFields" | "canViewerDo"> & {
33
35
  actionOnlyFields?: ProcessedActionField[];
36
+ canViewerDo?: CanViewerDo;
34
37
  };
35
38
  interface schemasDict {
36
39
  [key: string]: ProcessedSchema;
@@ -41,19 +44,21 @@ interface ProcessedPattern {
41
44
  fields: ProcessedField[];
42
45
  disableMixin?: boolean;
43
46
  }
44
- declare type ProcessedType = Omit<Type, "subFields" | "listElemType" | "unionFields"> & {
47
+ type ProcessedType = Omit<Type, "subFields" | "listElemType" | "unionFields"> & {
45
48
  subFields?: ProcessedField[];
46
49
  listElemType?: ProcessedType;
47
50
  unionFields?: ProcessedField[];
48
51
  };
49
- declare type ProcessedField = Omit<Field, "defaultValueOnEdit" | "defaultValueOnCreate" | "privacyPolicy" | "type"> & {
52
+ export type ProcessedField = Omit<Field, "defaultValueOnEdit" | "defaultValueOnCreate" | "privacyPolicy" | "type" | "serverDefault"> & {
50
53
  name: string;
51
54
  hasDefaultValueOnCreate?: boolean;
52
55
  hasDefaultValueOnEdit?: boolean;
53
56
  patternName?: string;
54
57
  hasFieldPrivacy?: boolean;
58
+ hasEditFieldPrivacy?: boolean;
55
59
  derivedFields?: ProcessedField[];
56
60
  type: ProcessedType;
61
+ serverDefault?: string;
57
62
  };
58
63
  interface patternsDict {
59
64
  [key: string]: ProcessedPattern;
@@ -61,9 +66,28 @@ interface patternsDict {
61
66
  interface Result {
62
67
  schemas: schemasDict;
63
68
  patterns: patternsDict;
69
+ globalSchema?: ProcessedGlobalSchema;
70
+ config?: {
71
+ rome?: RomeConfig;
72
+ };
64
73
  }
65
74
  declare type PotentialSchemas = {
66
75
  [key: string]: any;
67
76
  };
68
- export declare function parseSchema(potentialSchemas: PotentialSchemas): Result;
77
+ export declare function parseSchema(potentialSchemas: PotentialSchemas, globalSchema?: GlobalSchema): Promise<Result>;
78
+ interface RomeConfig {
79
+ indentStyle?: string;
80
+ lineWidth?: number;
81
+ indentSize?: number;
82
+ quoteStyle?: string;
83
+ quoteProperties?: string;
84
+ trailingComma?: string;
85
+ }
86
+ interface ProcessedGlobalSchema {
87
+ globalEdges: ProcessedAssocEdge[];
88
+ extraEdgeFields: ProcessedField[];
89
+ init?: boolean;
90
+ transformsEdges?: boolean;
91
+ globalFields?: ProcessedField[];
92
+ }
69
93
  export {};
@@ -1,7 +1,10 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.parseSchema = void 0;
4
- function processFields(src, patternName) {
3
+ exports.parseSchema = exports.processFields = void 0;
4
+ const cosmiconfig_1 = require("cosmiconfig");
5
+ const const_1 = require("../core/const");
6
+ const global_schema_1 = require("../core/global_schema");
7
+ async function processFields(src, patternName) {
5
8
  const ret = [];
6
9
  let m = {};
7
10
  if (Array.isArray(src)) {
@@ -19,10 +22,11 @@ function processFields(src, patternName) {
19
22
  for (const name in m) {
20
23
  const field = m[name];
21
24
  //@ts-ignore type and other changed fields with different type in ProcessedField vs Field
22
- let f = { name, ...field };
25
+ let f = { ...field, name };
23
26
  f.hasDefaultValueOnCreate = field.defaultValueOnCreate != undefined;
24
27
  f.hasDefaultValueOnEdit = field.defaultValueOnEdit != undefined;
25
28
  f.hasFieldPrivacy = field.privacyPolicy !== undefined;
29
+ f.hasEditFieldPrivacy = field.editPrivacyPolicy !== undefined;
26
30
  if (field.polymorphic) {
27
31
  // convert boolean into object
28
32
  // we keep boolean as an option to keep API simple
@@ -36,6 +40,19 @@ function processFields(src, patternName) {
36
40
  else {
37
41
  delete f.polymorphic;
38
42
  }
43
+ if (field.private) {
44
+ // convert boolean into object
45
+ // we keep boolean as an option to keep API simple
46
+ if (typeof field.private === "boolean") {
47
+ f.private = {};
48
+ }
49
+ else {
50
+ f.private = field.private;
51
+ }
52
+ }
53
+ else {
54
+ delete f.private;
55
+ }
39
56
  // convert string to object to make API consumed by go simple
40
57
  if (f.fieldEdge && f.fieldEdge.inverseEdge) {
41
58
  if (typeof f.fieldEdge.inverseEdge === "string") {
@@ -47,26 +64,49 @@ function processFields(src, patternName) {
47
64
  if (patternName) {
48
65
  f.patternName = patternName;
49
66
  }
67
+ if (field.serverDefault !== undefined) {
68
+ f.serverDefault = await transformServerDefault(name, field, field.serverDefault);
69
+ }
50
70
  transformType(field.type);
51
71
  if (field.getDerivedFields) {
52
- f.derivedFields = processFields(field.getDerivedFields(name));
72
+ f.derivedFields = await processFields(field.getDerivedFields(name));
53
73
  }
54
74
  if (field.type.subFields) {
55
- f.type.subFields = processFields(field.type.subFields);
75
+ f.type.subFields = await processFields(field.type.subFields);
56
76
  }
57
77
  if (field.type.unionFields) {
58
- f.type.unionFields = processFields(field.type.unionFields);
78
+ f.type.unionFields = await processFields(field.type.unionFields);
59
79
  }
60
80
  if (field.type.listElemType &&
61
81
  field.type.listElemType.subFields &&
62
82
  // check to avoid ts-ignore below. exists just for tsc
63
83
  f.type.listElemType) {
64
- f.type.listElemType.subFields = processFields(field.type.listElemType.subFields);
84
+ f.type.listElemType.subFields = await processFields(field.type.listElemType.subFields);
65
85
  }
66
86
  ret.push(f);
67
87
  }
68
88
  return ret;
69
89
  }
90
+ exports.processFields = processFields;
91
+ async function transformServerDefault(name, f, value) {
92
+ if (f.valid) {
93
+ if (!(await f.valid(value))) {
94
+ throw new Error(`invalid value ${value} passed to field ${name}`);
95
+ }
96
+ }
97
+ if (f.format) {
98
+ value = await f.format(value);
99
+ }
100
+ switch (typeof value) {
101
+ case "boolean":
102
+ case "number":
103
+ case "bigint":
104
+ case "string":
105
+ return `${value}`;
106
+ default:
107
+ throw new Error(`invalid value ${value} passed to field ${name}`);
108
+ }
109
+ }
70
110
  function transformImportType(typ) {
71
111
  if (!typ.importType) {
72
112
  return;
@@ -108,12 +148,12 @@ function processEdgeGroups(processedSchema, edgeGroups) {
108
148
  processedSchema.assocEdgeGroups.push(group2);
109
149
  }
110
150
  }
111
- function processPattern(patterns, pattern, processedSchema) {
151
+ async function processPattern(patterns, pattern, processedSchema) {
112
152
  let ret = {
113
153
  ...pattern,
114
154
  };
115
155
  const name = pattern.name;
116
- const fields = processFields(pattern.fields, pattern.name);
156
+ const fields = await processFields(pattern.fields, pattern.name);
117
157
  processedSchema.fields.push(...fields);
118
158
  if (pattern.edges) {
119
159
  const edges = processEdges(pattern.edges, pattern.name);
@@ -122,6 +162,23 @@ function processPattern(patterns, pattern, processedSchema) {
122
162
  // flag transformsSelect
123
163
  if (pattern.transformRead) {
124
164
  ret.transformsSelect = true;
165
+ if (pattern.transformReadCodegen_BETA) {
166
+ const r = pattern.transformReadCodegen_BETA();
167
+ if (typeof r === "string") {
168
+ ret.transformsLoaderCodegen = {
169
+ code: r,
170
+ imports: [
171
+ {
172
+ importPath: const_1.PACKAGE,
173
+ import: "query",
174
+ },
175
+ ],
176
+ };
177
+ }
178
+ else {
179
+ ret.transformsLoaderCodegen = r;
180
+ }
181
+ }
125
182
  }
126
183
  if (patterns[name] === undefined) {
127
184
  // intentionally processing separately and not passing pattern.name
@@ -146,35 +203,51 @@ var NullableResult;
146
203
  NullableResult["ITEM"] = "true";
147
204
  })(NullableResult || (NullableResult = {}));
148
205
  function processAction(action) {
149
- if (!action.actionOnlyFields) {
150
- return { ...action };
151
- }
152
- let ret = { ...action };
153
- let actionOnlyFields = action.actionOnlyFields.map((f) => {
154
- let f2 = f;
155
- if (!f.nullable) {
156
- delete f2.nullable;
157
- return f2;
158
- }
159
- if (typeof f.nullable === "boolean") {
160
- f2.nullable = NullableResult.ITEM;
161
- }
162
- else {
163
- if (f.nullable === "contentsAndList") {
164
- f2.nullable = NullableResult.CONTENTS_AND_LIST;
206
+ const ret = { ...action };
207
+ if (action.actionOnlyFields !== undefined) {
208
+ let actionOnlyFields = action.actionOnlyFields.map((f) => {
209
+ let f2 = f;
210
+ if (!f.nullable) {
211
+ delete f2.nullable;
212
+ return f2;
213
+ }
214
+ if (typeof f.nullable === "boolean") {
215
+ f2.nullable = NullableResult.ITEM;
165
216
  }
166
217
  else {
167
- f2.nullable = NullableResult.CONTENTS;
218
+ if (f.nullable === "contentsAndList") {
219
+ f2.nullable = NullableResult.CONTENTS_AND_LIST;
220
+ }
221
+ else if (f.nullable === "contents") {
222
+ f2.nullable = NullableResult.CONTENTS;
223
+ }
224
+ else if (f.nullable === "true") {
225
+ // shouldn't happen but ran into weirdness where it did...
226
+ f2.nullable = NullableResult.ITEM;
227
+ }
168
228
  }
229
+ return f2;
230
+ });
231
+ ret.actionOnlyFields = actionOnlyFields;
232
+ }
233
+ if (action.canViewerDo !== undefined) {
234
+ if (typeof action.canViewerDo !== "object") {
235
+ delete ret.canViewerDo;
236
+ ret.canViewerDo = {};
169
237
  }
170
- return f2;
171
- });
172
- ret.actionOnlyFields = actionOnlyFields;
238
+ }
173
239
  return ret;
174
240
  }
175
- function parseSchema(potentialSchemas) {
241
+ async function parseSchema(potentialSchemas, globalSchema) {
176
242
  let schemas = {};
177
243
  let patterns = {};
244
+ let parsedGlobalSchema;
245
+ if (globalSchema) {
246
+ parsedGlobalSchema = await parseGlobalSchema(globalSchema);
247
+ // set this so that we can use it, if we're trying to process server default or anything
248
+ // that ends up parsing,validating and formatting fields
249
+ (0, global_schema_1.setGlobalSchema)(globalSchema);
250
+ }
178
251
  for (const key in potentialSchemas) {
179
252
  const value = potentialSchemas[key];
180
253
  let schema;
@@ -190,6 +263,7 @@ function parseSchema(potentialSchemas) {
190
263
  }
191
264
  let processedSchema = {
192
265
  fields: [],
266
+ fieldOverrides: schema.fieldOverrides,
193
267
  schemaPath: schema.schemaPath,
194
268
  tableName: schema.tableName,
195
269
  enumTable: schema.enumTable,
@@ -200,19 +274,27 @@ function parseSchema(potentialSchemas) {
200
274
  actions: schema.actions?.map((action) => processAction(action)) || [],
201
275
  assocEdges: [],
202
276
  assocEdgeGroups: [],
277
+ customGraphQLInterfaces: schema.customGraphQLInterfaces,
278
+ supportUpsert: schema.supportUpsert,
279
+ showCanViewerSee: schema.showCanViewerSee,
280
+ showCanViewerEdit: schema.showCanViewerEdit,
203
281
  };
204
282
  // let's put patterns first just so we have id, created_at, updated_at first
205
283
  // ¯\_(ツ)_/¯
206
284
  let patternNames = [];
207
285
  if (schema.patterns) {
208
286
  for (const pattern of schema.patterns) {
209
- const ret = processPattern(patterns, pattern, processedSchema);
287
+ const ret = await processPattern(patterns, pattern, processedSchema);
210
288
  patternNames.push(pattern.name);
211
289
  if (ret.transformsSelect) {
212
290
  if (processedSchema.transformsSelect) {
213
291
  throw new Error(`can only have one pattern which transforms default querying behavior`);
214
292
  }
215
293
  processedSchema.transformsSelect = true;
294
+ if (ret.transformsLoaderCodegen) {
295
+ processedSchema.transformsLoaderCodegen =
296
+ ret.transformsLoaderCodegen;
297
+ }
216
298
  }
217
299
  if (ret.transformsDelete) {
218
300
  if (processedSchema.transformsDelete) {
@@ -222,7 +304,7 @@ function parseSchema(potentialSchemas) {
222
304
  }
223
305
  }
224
306
  }
225
- const fields = processFields(schema.fields);
307
+ const fields = await processFields(schema.fields);
226
308
  processedSchema.fields.push(...fields);
227
309
  processedSchema.patternNames = patternNames;
228
310
  if (schema.edges) {
@@ -234,6 +316,73 @@ function parseSchema(potentialSchemas) {
234
316
  }
235
317
  schemas[key] = processedSchema;
236
318
  }
237
- return { schemas, patterns };
319
+ const rome = translatePrettier();
320
+ return {
321
+ schemas,
322
+ patterns,
323
+ globalSchema: parsedGlobalSchema,
324
+ config: {
325
+ rome,
326
+ },
327
+ };
238
328
  }
239
329
  exports.parseSchema = parseSchema;
330
+ function translatePrettier() {
331
+ const r = (0, cosmiconfig_1.cosmiconfigSync)("prettier").search();
332
+ if (!r) {
333
+ return;
334
+ }
335
+ const ret = {};
336
+ if (r.config.printWidth !== undefined) {
337
+ ret.lineWidth = parseInt(r.config.printWidth);
338
+ }
339
+ if (r.config.useTabs) {
340
+ ret.indentStyle = "tab";
341
+ }
342
+ else {
343
+ ret.indentStyle = "space";
344
+ }
345
+ if (r.config.tabWidth !== undefined) {
346
+ ret.indentSize = parseInt(r.config.tabWidth);
347
+ }
348
+ if (r.config.singleQuote) {
349
+ ret.quoteStyle = "single";
350
+ }
351
+ else {
352
+ ret.quoteStyle = "double";
353
+ }
354
+ if (r.config.quoteProps !== undefined) {
355
+ if (r.config.quoteProps === "consistent") {
356
+ // rome doesn't support this
357
+ ret.quoteProperties = "as-needed";
358
+ }
359
+ else {
360
+ ret.quoteProperties = r.config.quoteProps;
361
+ }
362
+ }
363
+ if (r.config.trailingComma !== undefined) {
364
+ ret.trailingComma = r.config.trailingComma;
365
+ }
366
+ return ret;
367
+ }
368
+ async function parseGlobalSchema(s) {
369
+ const ret = {
370
+ globalEdges: [],
371
+ extraEdgeFields: [],
372
+ init: !!s.extraEdgeFields ||
373
+ s.transformEdgeRead !== undefined ||
374
+ s.transformEdgeWrite !== undefined ||
375
+ s.fields !== undefined,
376
+ transformsEdges: !!s.transformEdgeRead || !!s.transformEdgeWrite,
377
+ };
378
+ if (s.extraEdgeFields) {
379
+ ret.extraEdgeFields = await processFields(s.extraEdgeFields);
380
+ }
381
+ if (s.edges) {
382
+ ret.globalEdges = processEdges(s.edges);
383
+ }
384
+ if (s.fields) {
385
+ ret.globalFields = await processFields(s.fields);
386
+ }
387
+ return ret;
388
+ }
@@ -1,11 +1,12 @@
1
- import { Field, FieldMap, Pattern } from "./schema";
1
+ import { FieldMap, Pattern, FieldOverrideMap } from "./schema";
2
2
  import { Action, AssocEdgeGroup, Constraint, Edge, Index, Schema } from ".";
3
3
  export declare const Timestamps: Pattern;
4
4
  export declare const Node: Pattern;
5
5
  export interface SchemaConfig extends Schema {
6
6
  }
7
7
  export declare class EntSchema implements Schema {
8
- fields: FieldMap | Field[];
8
+ fields: FieldMap;
9
+ fieldOverrides: FieldOverrideMap | undefined;
9
10
  tableName: string | undefined;
10
11
  patterns: Pattern[];
11
12
  edges: Edge[] | undefined;
@@ -18,10 +19,15 @@ export declare class EntSchema implements Schema {
18
19
  constraints: Constraint[] | undefined;
19
20
  indices: Index[] | undefined;
20
21
  hideFromGraphQL?: boolean;
22
+ customGraphQLInterfaces?: string[] | undefined;
23
+ supportUpsert?: boolean | undefined;
24
+ showCanViewerSee?: boolean | undefined;
25
+ showCanViewerEdit?: boolean | undefined;
21
26
  constructor(cfg: SchemaConfig);
22
27
  }
23
28
  export declare class EntSchemaWithTZ implements Schema {
24
- fields: FieldMap | Field[];
29
+ fields: FieldMap;
30
+ fieldOverrides: FieldOverrideMap | undefined;
25
31
  tableName: string | undefined;
26
32
  patterns: Pattern[];
27
33
  edges: Edge[] | undefined;
@@ -34,6 +40,10 @@ export declare class EntSchemaWithTZ implements Schema {
34
40
  constraints: Constraint[] | undefined;
35
41
  indices: Index[] | undefined;
36
42
  hideFromGraphQL?: boolean;
43
+ customGraphQLInterfaces?: string[] | undefined;
44
+ supportUpsert?: boolean | undefined;
45
+ showCanViewerSee?: boolean | undefined;
46
+ showCanViewerEdit?: boolean | undefined;
37
47
  constructor(cfg: SchemaConfig);
38
48
  }
39
49
  export declare abstract class BaseEntSchema {