@snowtop/ent 0.1.0-alpha10 → 0.1.0-alpha101

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 (158) hide show
  1. package/action/action.d.ts +37 -31
  2. package/action/action.js +22 -7
  3. package/action/executor.d.ts +3 -3
  4. package/action/executor.js +8 -3
  5. package/action/experimental_action.d.ts +32 -22
  6. package/action/experimental_action.js +35 -9
  7. package/action/index.d.ts +2 -0
  8. package/action/index.js +7 -1
  9. package/action/orchestrator.d.ts +40 -16
  10. package/action/orchestrator.js +230 -62
  11. package/action/privacy.d.ts +2 -2
  12. package/action/relative_value.d.ts +47 -0
  13. package/action/relative_value.js +125 -0
  14. package/action/transaction.d.ts +10 -0
  15. package/action/transaction.js +23 -0
  16. package/auth/auth.d.ts +1 -1
  17. package/core/base.d.ts +49 -26
  18. package/core/base.js +7 -1
  19. package/core/clause.d.ts +88 -7
  20. package/core/clause.js +355 -63
  21. package/core/config.d.ts +12 -1
  22. package/core/config.js +7 -1
  23. package/core/context.d.ts +5 -3
  24. package/core/context.js +20 -2
  25. package/core/convert.d.ts +1 -1
  26. package/core/date.js +1 -5
  27. package/core/db.d.ts +11 -8
  28. package/core/db.js +20 -8
  29. package/core/ent.d.ts +81 -25
  30. package/core/ent.js +636 -193
  31. package/core/loaders/assoc_count_loader.d.ts +3 -2
  32. package/core/loaders/assoc_count_loader.js +10 -2
  33. package/core/loaders/assoc_edge_loader.d.ts +2 -2
  34. package/core/loaders/assoc_edge_loader.js +8 -11
  35. package/core/loaders/index.d.ts +1 -1
  36. package/core/loaders/index.js +1 -3
  37. package/core/loaders/index_loader.d.ts +2 -2
  38. package/core/loaders/loader.js +5 -5
  39. package/core/loaders/object_loader.d.ts +6 -5
  40. package/core/loaders/object_loader.js +67 -59
  41. package/core/loaders/query_loader.d.ts +6 -12
  42. package/core/loaders/query_loader.js +52 -11
  43. package/core/loaders/raw_count_loader.d.ts +2 -2
  44. package/core/loaders/raw_count_loader.js +5 -1
  45. package/core/logger.d.ts +1 -1
  46. package/core/logger.js +1 -0
  47. package/core/privacy.d.ts +25 -24
  48. package/core/privacy.js +21 -25
  49. package/core/query/assoc_query.d.ts +7 -6
  50. package/core/query/assoc_query.js +9 -1
  51. package/core/query/custom_clause_query.d.ts +26 -0
  52. package/core/query/custom_clause_query.js +78 -0
  53. package/core/query/custom_query.d.ts +20 -5
  54. package/core/query/custom_query.js +87 -12
  55. package/core/query/index.d.ts +1 -0
  56. package/core/query/index.js +3 -1
  57. package/core/query/query.d.ts +8 -4
  58. package/core/query/query.js +101 -53
  59. package/core/query/shared_assoc_test.d.ts +2 -1
  60. package/core/query/shared_assoc_test.js +35 -45
  61. package/core/query/shared_test.d.ts +8 -1
  62. package/core/query/shared_test.js +469 -236
  63. package/core/viewer.d.ts +3 -3
  64. package/core/viewer.js +1 -1
  65. package/graphql/graphql.d.ts +14 -7
  66. package/graphql/graphql.js +23 -7
  67. package/graphql/index.d.ts +0 -1
  68. package/graphql/index.js +1 -4
  69. package/graphql/query/connection_type.d.ts +9 -9
  70. package/graphql/query/edge_connection.d.ts +9 -9
  71. package/graphql/query/page_info.d.ts +1 -1
  72. package/graphql/query/shared_assoc_test.js +1 -1
  73. package/graphql/query/shared_edge_connection.js +1 -19
  74. package/imports/index.d.ts +6 -1
  75. package/imports/index.js +19 -4
  76. package/index.d.ts +12 -5
  77. package/index.js +20 -7
  78. package/package.json +17 -16
  79. package/parse_schema/parse.d.ts +29 -9
  80. package/parse_schema/parse.js +118 -11
  81. package/schema/base_schema.d.ts +5 -3
  82. package/schema/base_schema.js +5 -0
  83. package/schema/field.d.ts +74 -20
  84. package/schema/field.js +174 -69
  85. package/schema/index.d.ts +2 -2
  86. package/schema/index.js +5 -1
  87. package/schema/json_field.d.ts +13 -1
  88. package/schema/json_field.js +28 -1
  89. package/schema/schema.d.ts +81 -18
  90. package/schema/schema.js +24 -17
  91. package/schema/struct_field.d.ts +11 -1
  92. package/schema/struct_field.js +57 -21
  93. package/scripts/custom_compiler.js +10 -6
  94. package/scripts/custom_graphql.js +117 -30
  95. package/scripts/{transform_code.d.ts → migrate_v0.1.d.ts} +0 -0
  96. package/scripts/migrate_v0.1.js +36 -0
  97. package/scripts/{transform_schema.d.ts → move_types.d.ts} +0 -0
  98. package/scripts/move_types.js +117 -0
  99. package/scripts/read_schema.js +20 -5
  100. package/testutils/action/complex_schemas.d.ts +69 -0
  101. package/testutils/action/complex_schemas.js +398 -0
  102. package/testutils/builder.d.ts +46 -47
  103. package/testutils/builder.js +108 -65
  104. package/testutils/db/fixture.d.ts +10 -0
  105. package/testutils/db/fixture.js +26 -0
  106. package/testutils/db/{test_db.d.ts → temp_db.d.ts} +24 -8
  107. package/testutils/db/{test_db.js → temp_db.js} +179 -44
  108. package/testutils/db/value.d.ts +7 -0
  109. package/testutils/db/value.js +251 -0
  110. package/testutils/db_mock.d.ts +16 -4
  111. package/testutils/db_mock.js +51 -6
  112. package/testutils/db_time_zone.d.ts +4 -0
  113. package/testutils/db_time_zone.js +41 -0
  114. package/testutils/ent-graphql-tests/index.d.ts +7 -1
  115. package/testutils/ent-graphql-tests/index.js +27 -8
  116. package/testutils/fake_data/const.d.ts +2 -1
  117. package/testutils/fake_data/const.js +3 -0
  118. package/testutils/fake_data/fake_contact.d.ts +7 -3
  119. package/testutils/fake_data/fake_contact.js +15 -8
  120. package/testutils/fake_data/fake_event.d.ts +5 -2
  121. package/testutils/fake_data/fake_event.js +9 -7
  122. package/testutils/fake_data/fake_tag.d.ts +36 -0
  123. package/testutils/fake_data/fake_tag.js +89 -0
  124. package/testutils/fake_data/fake_user.d.ts +7 -4
  125. package/testutils/fake_data/fake_user.js +18 -16
  126. package/testutils/fake_data/index.js +5 -1
  127. package/testutils/fake_data/internal.d.ts +2 -0
  128. package/testutils/fake_data/internal.js +7 -1
  129. package/testutils/fake_data/tag_query.d.ts +13 -0
  130. package/testutils/fake_data/tag_query.js +43 -0
  131. package/testutils/fake_data/test_helpers.d.ts +11 -4
  132. package/testutils/fake_data/test_helpers.js +28 -12
  133. package/testutils/fake_data/user_query.d.ts +13 -6
  134. package/testutils/fake_data/user_query.js +54 -22
  135. package/testutils/fake_log.d.ts +3 -3
  136. package/testutils/parse_sql.d.ts +6 -0
  137. package/testutils/parse_sql.js +16 -2
  138. package/testutils/test_edge_global_schema.d.ts +15 -0
  139. package/testutils/test_edge_global_schema.js +62 -0
  140. package/testutils/write.d.ts +2 -2
  141. package/testutils/write.js +33 -7
  142. package/tsc/ast.d.ts +26 -2
  143. package/tsc/ast.js +163 -17
  144. package/tsc/compilerOptions.d.ts +2 -1
  145. package/tsc/compilerOptions.js +11 -2
  146. package/tsc/move_generated.d.ts +1 -0
  147. package/tsc/move_generated.js +164 -0
  148. package/tsc/transform.d.ts +22 -0
  149. package/tsc/transform.js +181 -0
  150. package/tsc/transform_action.d.ts +22 -0
  151. package/tsc/transform_action.js +183 -0
  152. package/tsc/transform_ent.d.ts +17 -0
  153. package/tsc/transform_ent.js +59 -0
  154. package/tsc/transform_schema.d.ts +27 -0
  155. package/{scripts → tsc}/transform_schema.js +145 -119
  156. package/graphql/enums.d.ts +0 -3
  157. package/graphql/enums.js +0 -25
  158. package/scripts/transform_code.js +0 -114
@@ -2,7 +2,11 @@
2
2
  "use strict";
3
3
  var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
4
4
  if (k2 === undefined) k2 = k;
5
- Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
5
+ var desc = Object.getOwnPropertyDescriptor(m, k);
6
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
7
+ desc = { enumerable: true, get: function() { return m[k]; } };
8
+ }
9
+ Object.defineProperty(o, k2, desc);
6
10
  }) : (function(o, m, k, k2) {
7
11
  if (k2 === undefined) k2 = k;
8
12
  o[k2] = m[k];
@@ -26,12 +30,13 @@ Object.defineProperty(exports, "__esModule", { value: true });
26
30
  const glob_1 = __importDefault(require("glob"));
27
31
  const json5_1 = __importDefault(require("json5"));
28
32
  const minimist_1 = __importDefault(require("minimist"));
29
- const graphql_1 = require("../graphql/graphql");
30
- const readline = __importStar(require("readline"));
31
33
  const path = __importStar(require("path"));
32
34
  const fs = __importStar(require("fs"));
35
+ const graphql_1 = require("../graphql/graphql");
36
+ const readline = __importStar(require("readline"));
33
37
  const imports_1 = require("../imports");
34
38
  const process_1 = require("process");
39
+ const child_process_1 = require("child_process");
35
40
  // need to use the GQLCapture from the package so that when we call GQLCapture.enable()
36
41
  // we're affecting the local paths as opposed to a different instance
37
42
  // life is hard
@@ -72,7 +77,7 @@ function processCustomObjects(l, gqlCapture, input) {
72
77
  }
73
78
  }
74
79
  }
75
- function transformArgs(f) {
80
+ function transformArgs(f, gqlCapture) {
76
81
  return (f.args || []).map((v) => {
77
82
  const ret = {
78
83
  ...v,
@@ -80,7 +85,7 @@ function transformArgs(f) {
80
85
  // duplicated from getType in graphql.ts
81
86
  if ((0, graphql_1.isCustomType)(ret.type)) {
82
87
  ret.type = v.type.type;
83
- (0, graphql_1.addCustomType)(v.type);
88
+ (0, graphql_1.addCustomType)(v.type, gqlCapture);
84
89
  }
85
90
  // scalar types not supported for now
86
91
  ret.tsType = graphql_1.knownAllowedNames.get(v.type);
@@ -95,23 +100,32 @@ function transformResultType(f) {
95
100
  type: f.resultType,
96
101
  tsType: graphql_1.knownAllowedNames.get(f.resultType),
97
102
  list: f.list,
103
+ connection: f.connection,
98
104
  nullable: f.nullable,
99
105
  },
100
106
  ]
101
107
  : [];
102
108
  }
103
- function processTopLevel(l, l2) {
109
+ function processTopLevel(l, l2, gqlCapture) {
104
110
  for (const custom of l) {
105
111
  l2.push({
106
112
  nodeName: custom.class,
107
113
  functionName: custom.functionName || custom.name,
108
114
  gqlName: custom.graphQLName || custom.name,
109
115
  fieldType: custom.fieldType,
110
- args: transformArgs(custom),
116
+ args: transformArgs(custom, gqlCapture),
111
117
  results: transformResultType(custom),
118
+ description: custom.description,
119
+ extraImports: custom.extraImports,
120
+ functionContents: custom.functionContents,
112
121
  });
113
122
  }
114
123
  }
124
+ function processCustomTypes(m, gqlCapture) {
125
+ for (const k in m) {
126
+ (0, graphql_1.addCustomType)(m[k], gqlCapture);
127
+ }
128
+ }
115
129
  function processCustomFields(fields, gqlCapture, nodeName) {
116
130
  const m = gqlCapture.getCustomFields();
117
131
  let results = [];
@@ -121,12 +135,53 @@ function processCustomFields(fields, gqlCapture, nodeName) {
121
135
  gqlName: f.graphQLName || f.name,
122
136
  functionName: f.functionName || f.name,
123
137
  fieldType: f.fieldType,
124
- args: transformArgs(f),
138
+ args: transformArgs(f, gqlCapture),
125
139
  results: transformResultType(f),
140
+ description: f.description,
126
141
  });
127
142
  }
128
143
  m.set(nodeName, results);
129
144
  }
145
+ async function captureDynamic(filePath, gqlCapture) {
146
+ if (!filePath) {
147
+ return;
148
+ }
149
+ return await new Promise((resolve, reject) => {
150
+ // do we eventually need tsconfig-paths here or do we get it by default because child process?
151
+ const r = (0, child_process_1.spawn)("ts-node", [filePath]);
152
+ const datas = [];
153
+ r.stdout.on("data", (data) => {
154
+ datas.push(data.toString());
155
+ });
156
+ r.stderr.on("data", (data) => {
157
+ reject(new Error(data.toString()));
158
+ });
159
+ r.on("close", (code) => {
160
+ if (code !== 0) {
161
+ reject(new Error(`error code ${code} on dynamic path`));
162
+ return;
163
+ }
164
+ let json = json5_1.default.parse(datas.join(""));
165
+ for (const k in json) {
166
+ const v = json[k];
167
+ switch (k) {
168
+ case "queries":
169
+ processTopLevel(v, gqlCapture.getCustomQueries(), gqlCapture);
170
+ break;
171
+ case "mutations":
172
+ processTopLevel(v, gqlCapture.getCustomMutations(), gqlCapture);
173
+ break;
174
+ case "customTypes":
175
+ processCustomTypes(v, gqlCapture);
176
+ break;
177
+ default:
178
+ reject(new Error(`key ${k} is unsupported in dynamic custom graphql. only queries and mutations are supported`));
179
+ }
180
+ }
181
+ resolve(undefined);
182
+ });
183
+ });
184
+ }
130
185
  async function captureCustom(filePath, filesCsv, jsonPath, gqlCapture) {
131
186
  if (jsonPath !== undefined) {
132
187
  let json = json5_1.default.parse(fs.readFileSync(jsonPath, {
@@ -144,10 +199,13 @@ async function captureCustom(filePath, filesCsv, jsonPath, gqlCapture) {
144
199
  processCustomObjects(json.objects, gqlCapture);
145
200
  }
146
201
  if (json.queries) {
147
- processTopLevel(json.queries, gqlCapture.getCustomQueries());
202
+ processTopLevel(json.queries, gqlCapture.getCustomQueries(), gqlCapture);
148
203
  }
149
204
  if (json.mutations) {
150
- processTopLevel(json.mutations, gqlCapture.getCustomMutations());
205
+ processTopLevel(json.mutations, gqlCapture.getCustomMutations(), gqlCapture);
206
+ }
207
+ if (json.customTypes) {
208
+ processCustomTypes(json.customTypes, gqlCapture);
151
209
  }
152
210
  return;
153
211
  }
@@ -208,11 +266,27 @@ async function requireFiles(files) {
208
266
  throw new Error(err);
209
267
  });
210
268
  }
269
+ // filePath is path-to-src
211
270
  async function parseImports(filePath) {
212
- // only do graphql files...
213
- return (0, imports_1.parseCustomImports)(path.join(filePath, "graphql"), {
214
- ignore: ["**/generated/**", "**/tests/**"],
215
- });
271
+ return (0, imports_1.parseCustomImports)(filePath, [
272
+ {
273
+ // graphql files
274
+ root: path.join(filePath, "graphql"),
275
+ opts: {
276
+ ignore: ["**/generated/**", "**/tests/**"],
277
+ },
278
+ },
279
+ {
280
+ // can't just use top level ent files but have to check for all (non-generated) files
281
+ // in src/ent/* because custom edges (or other things) could have @gqlField etc
282
+ // and then have to look for these imports etc
283
+ root: path.join(filePath, "ent"),
284
+ opts: {
285
+ // not in action files since we can't customize payloads (yet?)
286
+ ignore: ["**/generated/**", "**/tests/**", "**/actions/**"],
287
+ },
288
+ },
289
+ ]);
216
290
  }
217
291
  function findGraphQLPath(filePath) {
218
292
  while (filePath !== "/") {
@@ -227,21 +301,11 @@ function findGraphQLPath(filePath) {
227
301
  }
228
302
  return undefined;
229
303
  }
304
+ // test as follows:
305
+ // there should be an easier way to do this...
306
+ // also, there should be a way to get the list of objects here that's not manual
307
+ //echo "User\nContact\nContactEmail\nComment" | ts-node-script --log-error --project ./tsconfig.json -r tsconfig-paths/register ../../ts/src/scripts/custom_graphql.ts --path ~/code/ent/examples/simple/src/
230
308
  async function main() {
231
- // known custom types that are not required
232
- // if not in the schema, will be ignored
233
- // something like GraphQLUpload gotten via gqlArg({type: gqlFileUpload})
234
- // these 2 need this because they're added by the schema
235
- // if this list grows too long, need to build this into golang types and passed here
236
- // TODO foreign non-scalars eventually
237
- (0, graphql_1.addCustomType)({
238
- importPath: "../graphql/scalars/time",
239
- type: "GraphQLTime",
240
- });
241
- (0, graphql_1.addCustomType)({
242
- importPath: "graphql-type-json",
243
- type: "GraphQLJSON",
244
- });
245
309
  const options = (0, minimist_1.default)(process.argv.slice(2));
246
310
  if (!options.path) {
247
311
  throw new Error("path required");
@@ -266,9 +330,28 @@ async function main() {
266
330
  gqlCapture = r.GQLCapture;
267
331
  gqlCapture.enable(true);
268
332
  }
269
- const [inputsRead, _, imports] = await Promise.all([
333
+ // known custom types that are not required
334
+ // if not in the schema, will be ignored
335
+ // something like GraphQLUpload gotten via gqlArg({type: gqlFileUpload})
336
+ // these 2 need this because they're added by the schema
337
+ // if this list grows too long, need to build this into golang types and passed here
338
+ // TODO foreign non-scalars eventually
339
+ (0, graphql_1.addCustomType)({
340
+ importPath: MODULE_PATH,
341
+ // for go tests...
342
+ // TODO need a flag that only does this for go tests
343
+ // breaks when running locally sometimes...
344
+ secondaryImportPath: "../graphql/scalars/time",
345
+ type: "GraphQLTime",
346
+ }, gqlCapture);
347
+ (0, graphql_1.addCustomType)({
348
+ importPath: "graphql-type-json",
349
+ type: "GraphQLJSON",
350
+ }, gqlCapture);
351
+ const [inputsRead, _, __, imports] = await Promise.all([
270
352
  readInputs(),
271
353
  captureCustom(options.path, options.files, options.json_path, gqlCapture),
354
+ captureDynamic(options.dynamic_path, gqlCapture),
272
355
  parseImports(options.path),
273
356
  ]);
274
357
  const { nodes, nodesMap } = inputsRead;
@@ -325,7 +408,7 @@ async function main() {
325
408
  };
326
409
  const buildClasses = (fields) => {
327
410
  fields.forEach((field) => {
328
- if (!nodesMap.has(field.nodeName)) {
411
+ if (field.nodeName && !nodesMap.has(field.nodeName)) {
329
412
  let info = imports.getInfoForClass(field.nodeName);
330
413
  classes[field.nodeName] = { ...info.class, path: info.file.path };
331
414
  buildFiles(info.file);
@@ -336,6 +419,10 @@ async function main() {
336
419
  };
337
420
  buildClasses(mutations);
338
421
  buildClasses(queries);
422
+ // call for every field in a node
423
+ for (const k in fields) {
424
+ buildClasses(fields[k]);
425
+ }
339
426
  console.log(JSON.stringify({
340
427
  args,
341
428
  inputs,
@@ -0,0 +1,36 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const minimist_1 = __importDefault(require("minimist"));
7
+ const transform_1 = require("../tsc/transform");
8
+ const transform_schema_1 = require("../tsc/transform_schema");
9
+ const transform_ent_1 = require("../tsc/transform_ent");
10
+ const move_generated_1 = require("../tsc/move_generated");
11
+ const transform_action_1 = require("../tsc/transform_action");
12
+ const ast_1 = require("../tsc/ast");
13
+ // todo-sqlite
14
+ // ts-node-script --swc --project ./tsconfig.json -r tsconfig-paths/register ../../ts/src/scripts/migrate_v0.1.ts --transform_schema --old_base_class BaseEntTodoSchema --new_schema_class TodoEntSchema --transform_path src/schema/patterns/base
15
+ function main() {
16
+ const customInfo = (0, ast_1.getCustomInfo)();
17
+ const options = (0, minimist_1.default)(process.argv.slice(2));
18
+ // install 0.1.x dependencies
19
+ // maybe provide options to make this easier if someone wants to do this in steps to see what's happening
20
+ if (options.move_generated) {
21
+ (0, move_generated_1.moveGenerated)(customInfo.relativeImports);
22
+ }
23
+ // codegen write-all --disable-custom-graphql
24
+ if (options.transform_schema) {
25
+ (0, transform_1.transform)(new transform_schema_1.TransformSchema(customInfo.relativeImports, options.old_base_class, options.new_schema_class, options.transform_path));
26
+ }
27
+ // codegen write-all --disable-custom-graphql
28
+ if (options.transform_ent) {
29
+ (0, transform_1.transform)(new transform_ent_1.TransformEnt());
30
+ }
31
+ if (options.transform_action) {
32
+ (0, transform_1.transform)(new transform_action_1.TransformAction(customInfo));
33
+ }
34
+ // codegen write-all
35
+ }
36
+ main();
@@ -0,0 +1,117 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = 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);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ var __importDefault = (this && this.__importDefault) || function (mod) {
26
+ return (mod && mod.__esModule) ? mod : { "default": mod };
27
+ };
28
+ Object.defineProperty(exports, "__esModule", { value: true });
29
+ const transform_1 = require("../tsc/transform");
30
+ const ast_1 = require("../tsc/ast");
31
+ const typescript_1 = __importStar(require("typescript"));
32
+ const path_1 = __importDefault(require("path"));
33
+ class GatherExportsInGeneratedTypes {
34
+ constructor() {
35
+ this.glob = "src/ent/generated/types.ts";
36
+ this.names = [];
37
+ }
38
+ traverseChild(sourceFile, contents, file, node) {
39
+ const exported = node.modifiers?.filter((mod) => mod.getText(sourceFile) === "export");
40
+ if (exported?.length) {
41
+ if (typescript_1.default.isEnumDeclaration(node) ||
42
+ typescript_1.default.isInterfaceDeclaration(node) ||
43
+ typescript_1.default.isTypeAliasDeclaration(node)) {
44
+ this.names.push(node.name.text);
45
+ }
46
+ if (typescript_1.default.isFunctionDeclaration(node) && node.name?.text) {
47
+ this.names.push(node.name.text);
48
+ }
49
+ }
50
+ return { node };
51
+ }
52
+ }
53
+ class TransformImports {
54
+ constructor() {
55
+ this.glob = "src/**/*.ts";
56
+ this.prettierGlob = "src/**/*.ts";
57
+ this.impsToMove = new Map();
58
+ this.cwd = "";
59
+ this.relative = false;
60
+ this.cwd = process.cwd();
61
+ const gt = new GatherExportsInGeneratedTypes();
62
+ (0, transform_1.transform)(gt);
63
+ gt.names.forEach((v) => this.impsToMove.set(v, true));
64
+ this.relative = (0, ast_1.getCustomInfo)().relativeImports ?? this.relative;
65
+ }
66
+ getSrcPath(file, text) {
67
+ if (text.startsWith("src")) {
68
+ return text;
69
+ }
70
+ const dir = path_1.default.dirname(path_1.default.join(this.cwd, file));
71
+ const fullPath = path_1.default.join(dir, text);
72
+ return path_1.default.relative(this.cwd, fullPath);
73
+ }
74
+ traverseChild(sourceFile, contents, file, node) {
75
+ if (!(0, typescript_1.isImportDeclaration)(node)) {
76
+ return { node };
77
+ }
78
+ const impInfo = (0, ast_1.getImportInfo)(node, sourceFile);
79
+ if (!impInfo) {
80
+ return { node };
81
+ }
82
+ const text = node.moduleSpecifier.getText(sourceFile).slice(1, -1);
83
+ const pathToWrite = (0, ast_1.transformRelative)(file, "src/ent/generated/types", this.relative);
84
+ const current = (0, ast_1.transformRelative)(file, text, this.relative);
85
+ const srcPath = this.getSrcPath(file, text);
86
+ // nothing to do here
87
+ if (!srcPath.startsWith("src/ent") || pathToWrite === current) {
88
+ return { node };
89
+ }
90
+ // let's see if we can simplify
91
+ let seenImports = [];
92
+ for (let imp of impInfo.imports) {
93
+ imp = imp.trim();
94
+ if (this.impsToMove.has(imp)) {
95
+ seenImports.push(imp);
96
+ }
97
+ }
98
+ if (!seenImports.length) {
99
+ return { node };
100
+ }
101
+ let imports = new Map([[pathToWrite, seenImports]]);
102
+ return {
103
+ rawString: (0, ast_1.transformImport)(contents, node, sourceFile, {
104
+ removeImports: seenImports,
105
+ transformPath: text,
106
+ }),
107
+ traversed: true,
108
+ imports,
109
+ allowSeenImportsAdded: true,
110
+ };
111
+ }
112
+ }
113
+ // ts-node-script --swc --project ./tsconfig.json -r tsconfig-paths/register ../../ts/src/scripts/move_types.ts
114
+ function main() {
115
+ (0, transform_1.transform)(new TransformImports());
116
+ }
117
+ main();
@@ -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];
@@ -26,20 +30,28 @@ const glob_1 = __importDefault(require("glob"));
26
30
  const path = __importStar(require("path"));
27
31
  const pascal_case_1 = require("pascal-case");
28
32
  const minimist_1 = __importDefault(require("minimist"));
29
- const process_1 = require("process");
30
33
  const parse_1 = require("../parse_schema/parse");
34
+ const ast_1 = require("../tsc/ast");
31
35
  function main() {
32
36
  const options = (0, minimist_1.default)(process.argv.slice(2));
33
37
  if (!options.path) {
34
38
  throw new Error("path required");
35
39
  }
40
+ const customInfo = (0, ast_1.getCustomInfo)();
41
+ const globalSchemaPath = customInfo.globalSchemaPath || "__global__schema.ts";
42
+ let globalSchema;
36
43
  const r = /(\w+).ts/;
44
+ // do we still even need this...
37
45
  const paths = glob_1.default.sync(path.join(options.path, "*.ts"), {
38
46
  ignore: [`\d+_read_schema.ts`],
39
47
  });
40
48
  let potentialSchemas = {};
41
49
  for (const p of paths) {
42
50
  const basename = path.basename(p);
51
+ if (basename === globalSchemaPath) {
52
+ globalSchema = require(p).default;
53
+ continue;
54
+ }
43
55
  const match = r.exec(basename);
44
56
  if (!match) {
45
57
  throw new Error(`non-typescript file ${p} returned by glob`);
@@ -61,13 +73,16 @@ function main() {
61
73
  potentialSchemas[(0, pascal_case_1.pascalCase)(schema)] = s;
62
74
  }
63
75
  // console.log(potentialSchemas);
64
- const result = (0, parse_1.parseSchema)(potentialSchemas);
65
- console.log(JSON.stringify(result));
76
+ // NB: do not change this to async/await
77
+ // doing so runs it buffer limit on linux (65536 bytes) and we lose data reading in go
78
+ (0, parse_1.parseSchema)(potentialSchemas, globalSchema).then((result) => {
79
+ console.log(JSON.stringify(result));
80
+ });
66
81
  }
67
82
  try {
68
83
  main();
69
84
  }
70
85
  catch (err) {
71
86
  console.error(err);
72
- (0, process_1.exit)(1);
87
+ process.exit(1);
73
88
  }
@@ -0,0 +1,69 @@
1
+ import { Ent, ID, Viewer, Data } from "../../core/base";
2
+ import { DataOperation } from "../../core/ent";
3
+ import { Action, Builder, Executor, WriteOperation, Trigger, Observer, TriggerReturn } from "../../action/action";
4
+ import { EdgeInputData } from "../../action/orchestrator";
5
+ import { User, Group, Message, Contact, SimpleBuilder, BuilderSchema, SimpleAction, BaseEnt } from "../../testutils/builder";
6
+ import { MockLogs } from "../../testutils/mock_log";
7
+ import { Table } from "../db/temp_db";
8
+ export declare function setupTest(): void;
9
+ export declare function getML(): MockLogs;
10
+ export declare function getOperations(): DataOperation<Ent<Viewer<Ent<any> | null, ID | null>>>[];
11
+ export declare const UserSchema: BuilderSchema<User>;
12
+ export declare class UserWithBalance extends User {
13
+ }
14
+ export declare const UserBalanceSchema: BuilderSchema<UserWithBalance>;
15
+ export declare class UserWithBalanceWithCheck extends UserWithBalance {
16
+ }
17
+ export declare const UserBalanceWithCheckSchema: BuilderSchema<UserWithBalanceWithCheck>;
18
+ export declare class Account extends BaseEnt {
19
+ accountID: string;
20
+ nodeType: string;
21
+ }
22
+ export declare const AccountSchema: BuilderSchema<Account>;
23
+ export declare const ContactSchema: BuilderSchema<Contact>;
24
+ export declare const GroupSchema: BuilderSchema<Group>;
25
+ export declare class GroupMembership extends BaseEnt {
26
+ nodeType: string;
27
+ }
28
+ export declare const GroupMembershipSchema: BuilderSchema<GroupMembership>;
29
+ export declare class Changelog extends BaseEnt {
30
+ nodeType: string;
31
+ }
32
+ export declare const ChangelogSchema: BuilderSchema<Changelog>;
33
+ export declare const MessageSchema: BuilderSchema<Message>;
34
+ export declare function executeAction<T extends Ent, E = any>(action: Action<T, Builder<T>>, name?: E): Promise<Executor>;
35
+ export declare function createGroup(): Promise<Group>;
36
+ export declare function createUser(): Promise<User>;
37
+ export declare class MessageAction extends SimpleAction<Message> {
38
+ constructor(viewer: Viewer, fields: Map<string, any>, operation: WriteOperation, existingEnt: Message | null);
39
+ getTriggers(): Trigger<Message, SimpleBuilder<Message, Message | null>>[];
40
+ getObservers(): Observer<Message, SimpleBuilder<Message>>[];
41
+ }
42
+ export declare class UserAction extends SimpleAction<User> {
43
+ contactAction: SimpleAction<Contact> | undefined;
44
+ constructor(viewer: Viewer, fields: Map<string, any>, operation: WriteOperation, existingEnt: User | null);
45
+ getTriggers(): Trigger<User, SimpleBuilder<User>>[];
46
+ getObservers(): Observer<User, SimpleBuilder<User>>[];
47
+ }
48
+ type getMembershipFunction = (viewer: Viewer, edge: EdgeInputData) => SimpleAction<Ent>;
49
+ export declare class GroupMembershipTrigger implements Trigger<Group, SimpleBuilder<Group>> {
50
+ private getter;
51
+ constructor(getter: getMembershipFunction);
52
+ changeset(builder: SimpleBuilder<Group>, input: Data): TriggerReturn;
53
+ }
54
+ export declare class EditGroupAction extends SimpleAction<Group> {
55
+ viewer: Viewer;
56
+ private getter;
57
+ constructor(viewer: Viewer, schema: BuilderSchema<Group>, fields: Map<string, any>, existingEnt: Group, getter: getMembershipFunction);
58
+ getTriggers: () => GroupMembershipTrigger[];
59
+ }
60
+ export declare function verifyGroupMembers(group: Group, members: User[]): Promise<ID[]>;
61
+ export declare function loadMemberships(viewer: Viewer, membershipids: ID[]): Promise<GroupMembership[]>;
62
+ export declare function loadChangelogs(viewer: Viewer, clids: ID[]): Promise<Changelog[]>;
63
+ export declare function verifyChangelogFromMeberships(user: User, memberships: GroupMembership[]): Promise<void>;
64
+ export declare class GroupMemberOf extends BaseEnt {
65
+ nodeType: string;
66
+ }
67
+ export declare const GroupMemberOfSchema: BuilderSchema<GroupMemberOf>;
68
+ export declare const getTables: () => Table[];
69
+ export {};