@snowtop/ent 0.1.0-alpha → 0.1.0-alpha12

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 (86) hide show
  1. package/action/action.d.ts +2 -0
  2. package/action/executor.d.ts +1 -1
  3. package/action/orchestrator.d.ts +16 -3
  4. package/action/orchestrator.js +157 -47
  5. package/core/base.d.ts +6 -2
  6. package/core/base.js +16 -0
  7. package/core/clause.d.ts +24 -3
  8. package/core/clause.js +246 -5
  9. package/core/config.d.ts +18 -0
  10. package/core/config.js +17 -0
  11. package/core/db.d.ts +3 -3
  12. package/core/db.js +2 -0
  13. package/core/ent.d.ts +2 -4
  14. package/core/ent.js +72 -25
  15. package/core/loaders/assoc_edge_loader.d.ts +1 -1
  16. package/core/loaders/assoc_edge_loader.js +5 -4
  17. package/core/loaders/index_loader.js +1 -0
  18. package/core/loaders/object_loader.d.ts +7 -2
  19. package/core/loaders/object_loader.js +59 -4
  20. package/core/privacy.d.ts +1 -1
  21. package/core/privacy.js +3 -0
  22. package/core/viewer.d.ts +1 -0
  23. package/core/viewer.js +4 -0
  24. package/graphql/builtins/connection.js +3 -3
  25. package/graphql/builtins/edge.js +2 -2
  26. package/graphql/builtins/node.js +1 -1
  27. package/graphql/graphql.d.ts +3 -2
  28. package/graphql/graphql.js +24 -23
  29. package/graphql/index.d.ts +1 -0
  30. package/graphql/index.js +3 -1
  31. package/graphql/mutations/union.d.ts +2 -0
  32. package/graphql/mutations/union.js +35 -0
  33. package/graphql/node_resolver.d.ts +0 -1
  34. package/graphql/query/connection_type.js +6 -6
  35. package/graphql/query/page_info.js +4 -4
  36. package/graphql/query/shared_assoc_test.js +2 -2
  37. package/graphql/scalars/time.d.ts +1 -1
  38. package/imports/index.d.ts +0 -1
  39. package/imports/index.js +3 -36
  40. package/index.d.ts +16 -1
  41. package/index.js +18 -5
  42. package/package.json +3 -3
  43. package/parse_schema/parse.d.ts +23 -4
  44. package/parse_schema/parse.js +87 -8
  45. package/schema/base_schema.d.ts +36 -1
  46. package/schema/base_schema.js +63 -17
  47. package/schema/field.d.ts +25 -25
  48. package/schema/field.js +42 -33
  49. package/schema/index.d.ts +4 -2
  50. package/schema/index.js +10 -1
  51. package/schema/json_field.d.ts +6 -6
  52. package/schema/json_field.js +2 -2
  53. package/schema/schema.d.ts +70 -6
  54. package/schema/schema.js +142 -10
  55. package/schema/struct_field.d.ts +17 -0
  56. package/schema/struct_field.js +102 -0
  57. package/schema/union_field.d.ts +23 -0
  58. package/schema/union_field.js +79 -0
  59. package/scripts/custom_compiler.js +2 -19
  60. package/scripts/custom_graphql.js +122 -15
  61. package/scripts/move_generated.d.ts +1 -0
  62. package/scripts/move_generated.js +142 -0
  63. package/scripts/read_schema.js +15 -1
  64. package/scripts/transform_code.d.ts +1 -0
  65. package/scripts/transform_code.js +113 -0
  66. package/scripts/transform_schema.d.ts +1 -0
  67. package/scripts/transform_schema.js +355 -0
  68. package/testutils/builder.d.ts +16 -9
  69. package/testutils/builder.js +80 -8
  70. package/testutils/context/test_context.d.ts +2 -2
  71. package/testutils/context/test_context.js +7 -1
  72. package/testutils/db/test_db.d.ts +2 -1
  73. package/testutils/db/test_db.js +22 -13
  74. package/testutils/ent-graphql-tests/index.d.ts +2 -0
  75. package/testutils/ent-graphql-tests/index.js +26 -17
  76. package/testutils/fake_data/fake_contact.d.ts +3 -7
  77. package/testutils/fake_data/fake_contact.js +14 -26
  78. package/testutils/fake_data/fake_event.d.ts +3 -7
  79. package/testutils/fake_data/fake_event.js +20 -33
  80. package/testutils/fake_data/fake_user.d.ts +3 -7
  81. package/testutils/fake_data/fake_user.js +22 -36
  82. package/testutils/fake_data/test_helpers.js +1 -1
  83. package/tsc/ast.d.ts +21 -0
  84. package/tsc/ast.js +154 -0
  85. package/tsc/compilerOptions.d.ts +8 -0
  86. package/tsc/compilerOptions.js +100 -0
@@ -0,0 +1,102 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.StructListType = exports.StructType = exports.StructField = void 0;
4
+ const field_1 = require("./field");
5
+ const schema_1 = require("./schema");
6
+ const camel_case_1 = require("camel-case");
7
+ class StructField extends field_1.BaseField {
8
+ constructor(options) {
9
+ super();
10
+ this.options = options;
11
+ this.type = {
12
+ dbType: schema_1.DBType.JSONB,
13
+ };
14
+ this.type.subFields = options.fields;
15
+ this.type.type = options.tsType;
16
+ this.type.graphQLType = options.graphQLType || options.tsType;
17
+ if (options.jsonNotJSONB) {
18
+ this.type.dbType = schema_1.DBType.JSON;
19
+ }
20
+ }
21
+ // right now, we store things in the db in lowerCase format
22
+ // this will lead to issues if field changes.
23
+ // TODO: use storageKey and convert back...
24
+ format(obj, nested) {
25
+ if (!(obj instanceof Object)) {
26
+ throw new Error("valid was not called");
27
+ }
28
+ let ret = {};
29
+ for (const k in this.options.fields) {
30
+ // TODO more #510
31
+ let dbKey = (0, camel_case_1.camelCase)(k);
32
+ let val = obj[dbKey];
33
+ // for tests with snake_case
34
+ if (val === undefined && obj[k] !== undefined) {
35
+ val = obj[k];
36
+ dbKey = k;
37
+ }
38
+ if (val === undefined) {
39
+ continue;
40
+ }
41
+ const field = this.options.fields[k];
42
+ if (field.format) {
43
+ // indicate nested so this isn't JSON stringified
44
+ ret[dbKey] = field.format(val, true);
45
+ }
46
+ else {
47
+ ret[dbKey] = val;
48
+ }
49
+ }
50
+ // don't json.stringify if nested
51
+ if (nested) {
52
+ return ret;
53
+ }
54
+ return JSON.stringify(ret);
55
+ }
56
+ async valid(obj) {
57
+ if (!(obj instanceof Object)) {
58
+ return false;
59
+ }
60
+ let promises = [];
61
+ // TODO probably need to support optional fields...
62
+ let valid = true;
63
+ for (const k in this.options.fields) {
64
+ const field = this.options.fields[k];
65
+ // TODO more #510
66
+ let dbKey = (0, camel_case_1.camelCase)(k);
67
+ let val = obj[dbKey];
68
+ // for tests with snake_case
69
+ if (val === undefined && obj[k] !== undefined) {
70
+ val = obj[k];
71
+ dbKey = k;
72
+ }
73
+ if (val === undefined || val === null) {
74
+ // nullable, nothing to do here
75
+ if (field.nullable) {
76
+ continue;
77
+ }
78
+ valid = false;
79
+ break;
80
+ }
81
+ if (!field.valid) {
82
+ continue;
83
+ }
84
+ promises.push(field.valid(val));
85
+ }
86
+ if (!valid) {
87
+ return valid;
88
+ }
89
+ const ret = await Promise.all(promises);
90
+ return ret.every((v) => v);
91
+ }
92
+ }
93
+ exports.StructField = StructField;
94
+ function StructType(options) {
95
+ let result = new StructField(options);
96
+ return Object.assign(result, options);
97
+ }
98
+ exports.StructType = StructType;
99
+ function StructListType(options) {
100
+ return new field_1.ListField(StructType(options), options);
101
+ }
102
+ exports.StructListType = StructListType;
@@ -0,0 +1,23 @@
1
+ import { StructField } from "./struct_field";
2
+ import { FieldOptions, Type } from "./schema";
3
+ import { BaseField, ListField } from "./field";
4
+ export declare type StructMap = {
5
+ [key: string]: StructField;
6
+ };
7
+ export interface UnionOptions extends FieldOptions {
8
+ tsType: string;
9
+ fields: StructMap;
10
+ graphQLType?: string;
11
+ jsonNotJSONB?: boolean;
12
+ }
13
+ export declare class UnionField extends BaseField implements FieldOptions {
14
+ private options;
15
+ type: Type;
16
+ m: Map<Object, string>;
17
+ constructor(options: UnionOptions);
18
+ format(obj: any): string | Object;
19
+ private validField;
20
+ valid(obj: any): Promise<boolean>;
21
+ }
22
+ export declare function UnionType(options: UnionOptions): UnionField & UnionOptions;
23
+ export declare function UnionListType(options: UnionOptions): ListField;
@@ -0,0 +1,79 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.UnionListType = exports.UnionType = exports.UnionField = void 0;
4
+ const schema_1 = require("./schema");
5
+ const field_1 = require("./field");
6
+ // used to know which key in the union is valid.
7
+ // maybe there's a better way of doing this eventually
8
+ const KEY = "___valid___key___";
9
+ class UnionField extends field_1.BaseField {
10
+ constructor(options) {
11
+ super();
12
+ this.options = options;
13
+ this.type = {
14
+ dbType: schema_1.DBType.JSONB,
15
+ };
16
+ this.m = new Map();
17
+ this.type.unionFields = options.fields;
18
+ this.type.type = options.tsType;
19
+ this.type.graphQLType = options.graphQLType || options.tsType;
20
+ // TODO should throw if not nested?
21
+ if (options.jsonNotJSONB) {
22
+ this.type.dbType = schema_1.DBType.JSON;
23
+ }
24
+ }
25
+ format(obj) {
26
+ if (!(obj instanceof Object)) {
27
+ throw new Error("valid was not called");
28
+ }
29
+ const k = obj[KEY];
30
+ if (k === undefined) {
31
+ throw new Error(`need to call valid first`);
32
+ }
33
+ // now delete it since we don't need it anymore
34
+ delete obj[KEY];
35
+ const field = this.options.fields[k];
36
+ // always nested for now so pass through
37
+ return field.format(obj, true);
38
+ }
39
+ async validField(k, f, obj) {
40
+ const valid = await f.valid(obj);
41
+ return {
42
+ valid,
43
+ key: k,
44
+ };
45
+ }
46
+ async valid(obj) {
47
+ if (!(obj instanceof Object)) {
48
+ return false;
49
+ }
50
+ let promises = [];
51
+ for (const k in this.options.fields) {
52
+ const field = this.options.fields[k];
53
+ promises.push(this.validField(k, field, obj));
54
+ }
55
+ let lastKey;
56
+ let validCt = 0;
57
+ const ret = await Promise.all(promises);
58
+ for (const v of ret) {
59
+ if (v.valid) {
60
+ validCt++;
61
+ lastKey = v.key;
62
+ }
63
+ }
64
+ if (lastKey !== undefined) {
65
+ obj[KEY] = lastKey;
66
+ }
67
+ return validCt == 1;
68
+ }
69
+ }
70
+ exports.UnionField = UnionField;
71
+ function UnionType(options) {
72
+ let result = new UnionField(options);
73
+ return Object.assign(result, options);
74
+ }
75
+ exports.UnionType = UnionType;
76
+ function UnionListType(options) {
77
+ return new field_1.ListField(UnionType(options), options);
78
+ }
79
+ exports.UnionListType = UnionListType;
@@ -25,9 +25,8 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
25
25
  Object.defineProperty(exports, "__esModule", { value: true });
26
26
  const typescript_1 = __importDefault(require("typescript"));
27
27
  const path = __importStar(require("path"));
28
- const fs = __importStar(require("fs"));
29
- const json5_1 = __importDefault(require("json5"));
30
28
  const glob_1 = __importDefault(require("glob"));
29
+ const compilerOptions_1 = require("../tsc/compilerOptions");
31
30
  // TODO this should probably be its own package but for now it's here
32
31
  class Compiler {
33
32
  constructor(sourceFiles, moduleSearchLocations) {
@@ -35,7 +34,7 @@ class Compiler {
35
34
  this.moduleSearchLocations = moduleSearchLocations;
36
35
  this.regexMap = new Map();
37
36
  this.resolvers = [];
38
- this.options = this.readCompilerOptions();
37
+ this.options = (0, compilerOptions_1.readCompilerOptions)(".");
39
38
  if (this.options.paths) {
40
39
  for (let key in this.options.paths) {
41
40
  if (key === "*") {
@@ -105,22 +104,6 @@ class Compiler {
105
104
  }
106
105
  return undefined;
107
106
  }
108
- readCompilerOptions() {
109
- let json = {};
110
- try {
111
- json = json5_1.default.parse(fs.readFileSync("./tsconfig.json", {
112
- encoding: "utf8",
113
- }));
114
- }
115
- catch (e) {
116
- console.error("couldn't read tsconfig.json file");
117
- }
118
- let options = json["compilerOptions"] || {};
119
- if (options.moduleResolution === "node") {
120
- options.moduleResolution = typescript_1.default.ModuleResolutionKind.NodeJs;
121
- }
122
- return options;
123
- }
124
107
  createCompilerHost() {
125
108
  return {
126
109
  getSourceFile: this.getSourceFile,
@@ -24,6 +24,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
24
24
  };
25
25
  Object.defineProperty(exports, "__esModule", { value: true });
26
26
  const glob_1 = __importDefault(require("glob"));
27
+ const json5_1 = __importDefault(require("json5"));
27
28
  const minimist_1 = __importDefault(require("minimist"));
28
29
  const graphql_1 = require("../graphql/graphql");
29
30
  const readline = __importStar(require("readline"));
@@ -53,7 +54,103 @@ async function readInputs() {
53
54
  });
54
55
  });
55
56
  }
56
- async function captureCustom(filePath, filesCsv) {
57
+ function processCustomObjects(l, gqlCapture, input) {
58
+ let m;
59
+ if (input) {
60
+ m = gqlCapture.getCustomInputObjects();
61
+ }
62
+ else {
63
+ m = gqlCapture.getCustomObjects();
64
+ }
65
+ for (const input of l) {
66
+ m.set(input.name, {
67
+ nodeName: input.graphQLName || input.name,
68
+ className: input.name,
69
+ });
70
+ if (input.fields) {
71
+ processCustomFields(input.fields, gqlCapture, input.name);
72
+ }
73
+ }
74
+ }
75
+ function transformArgs(f) {
76
+ return (f.args || []).map((v) => {
77
+ const ret = {
78
+ ...v,
79
+ };
80
+ // duplicated from getType in graphql.ts
81
+ if ((0, graphql_1.isCustomType)(ret.type)) {
82
+ ret.type = v.type.type;
83
+ (0, graphql_1.addCustomType)(v.type);
84
+ }
85
+ // scalar types not supported for now
86
+ ret.tsType = graphql_1.knownAllowedNames.get(v.type);
87
+ return ret;
88
+ });
89
+ }
90
+ function transformResultType(f) {
91
+ return f.resultType
92
+ ? [
93
+ {
94
+ name: "",
95
+ type: f.resultType,
96
+ tsType: graphql_1.knownAllowedNames.get(f.resultType),
97
+ list: f.list,
98
+ nullable: f.nullable,
99
+ },
100
+ ]
101
+ : [];
102
+ }
103
+ function processTopLevel(l, l2) {
104
+ for (const custom of l) {
105
+ l2.push({
106
+ nodeName: custom.class,
107
+ functionName: custom.functionName || custom.name,
108
+ gqlName: custom.graphQLName || custom.name,
109
+ fieldType: custom.fieldType,
110
+ args: transformArgs(custom),
111
+ results: transformResultType(custom),
112
+ });
113
+ }
114
+ }
115
+ function processCustomFields(fields, gqlCapture, nodeName) {
116
+ const m = gqlCapture.getCustomFields();
117
+ let results = [];
118
+ for (const f of fields) {
119
+ results.push({
120
+ nodeName: nodeName,
121
+ gqlName: f.graphQLName || f.name,
122
+ functionName: f.functionName || f.name,
123
+ fieldType: f.fieldType,
124
+ args: transformArgs(f),
125
+ results: transformResultType(f),
126
+ });
127
+ }
128
+ m.set(nodeName, results);
129
+ }
130
+ async function captureCustom(filePath, filesCsv, jsonPath, gqlCapture) {
131
+ if (jsonPath !== undefined) {
132
+ let json = json5_1.default.parse(fs.readFileSync(jsonPath, {
133
+ encoding: "utf8",
134
+ }));
135
+ if (json.fields) {
136
+ for (const k in json.fields) {
137
+ processCustomFields(json.fields[k], gqlCapture, k);
138
+ }
139
+ }
140
+ if (json.inputs) {
141
+ processCustomObjects(json.inputs, gqlCapture, true);
142
+ }
143
+ if (json.objects) {
144
+ processCustomObjects(json.objects, gqlCapture);
145
+ }
146
+ if (json.queries) {
147
+ processTopLevel(json.queries, gqlCapture.getCustomQueries());
148
+ }
149
+ if (json.mutations) {
150
+ processTopLevel(json.mutations, gqlCapture.getCustomMutations());
151
+ }
152
+ return;
153
+ }
57
154
  if (filesCsv !== undefined) {
58
155
  let files = filesCsv.split(",");
59
156
  for (let i = 0; i < files.length; i++) {
@@ -153,15 +250,25 @@ async function main() {
153
250
  if (!gqlPath) {
154
251
  throw new Error("could not find graphql path");
155
252
  }
156
- const r = require(gqlPath);
157
- if (!r.GQLCapture) {
158
- throw new Error("could not find GQLCapture in module");
253
+ // use different variable so that we use the correct GQLCapture as needed
254
+ // for local dev, get the one from the file system. otherwise, get the one
255
+ // from node_modules
256
+ let gqlCapture;
257
+ if (process.env.LOCAL_SCRIPT_PATH) {
258
+ const r = require("../graphql/graphql");
259
+ gqlCapture = r.GQLCapture;
260
+ }
261
+ else {
262
+ const r = require(gqlPath);
263
+ if (!r.GQLCapture) {
264
+ throw new Error("could not find GQLCapture in module");
265
+ }
266
+ gqlCapture = r.GQLCapture;
267
+ gqlCapture.enable(true);
159
268
  }
160
- const GQLCapture = r.GQLCapture;
161
- GQLCapture.enable(true);
162
269
  const [inputsRead, _, imports] = await Promise.all([
163
270
  readInputs(),
164
- captureCustom(options.path, options.files),
271
+ captureCustom(options.path, options.files, options.json_path, gqlCapture),
165
272
  parseImports(options.path),
166
273
  ]);
167
274
  const { nodes, nodesMap } = inputsRead;
@@ -172,14 +279,14 @@ async function main() {
172
279
  }
173
280
  return result;
174
281
  }
175
- GQLCapture.resolve(nodes);
176
- let args = fromMap(GQLCapture.getCustomArgs());
177
- let inputs = fromMap(GQLCapture.getCustomInputObjects());
178
- let fields = GQLCapture.getProcessedCustomFields();
179
- let queries = GQLCapture.getProcessedCustomQueries();
180
- let mutations = GQLCapture.getProcessedCustomMutations();
181
- let objects = fromMap(GQLCapture.getCustomObjects());
182
- let customTypes = fromMap(GQLCapture.getCustomTypes());
282
+ gqlCapture.resolve(nodes);
283
+ let args = fromMap(gqlCapture.getCustomArgs());
284
+ let inputs = fromMap(gqlCapture.getCustomInputObjects());
285
+ let fields = gqlCapture.getProcessedCustomFields();
286
+ let queries = gqlCapture.getProcessedCustomQueries();
287
+ let mutations = gqlCapture.getProcessedCustomMutations();
288
+ let objects = fromMap(gqlCapture.getCustomObjects());
289
+ let customTypes = fromMap(gqlCapture.getCustomTypes());
183
290
  let classes = {};
184
291
  let allFiles = {};
185
292
  const buildClasses2 = (args) => {
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,142 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
5
+ }) : (function(o, m, k, k2) {
6
+ if (k2 === undefined) k2 = k;
7
+ o[k2] = m[k];
8
+ }));
9
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
10
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
11
+ }) : function(o, v) {
12
+ o["default"] = v;
13
+ });
14
+ var __importStar = (this && this.__importStar) || function (mod) {
15
+ if (mod && mod.__esModule) return mod;
16
+ var result = {};
17
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
18
+ __setModuleDefault(result, mod);
19
+ return result;
20
+ };
21
+ var __importDefault = (this && this.__importDefault) || function (mod) {
22
+ return (mod && mod.__esModule) ? mod : { "default": mod };
23
+ };
24
+ Object.defineProperty(exports, "__esModule", { value: true });
25
+ const glob_1 = require("glob");
26
+ const path = __importStar(require("path"));
27
+ const fs = __importStar(require("fs"));
28
+ const compilerOptions_1 = require("../tsc/compilerOptions");
29
+ const typescript_1 = __importDefault(require("typescript"));
30
+ const ast_1 = require("../tsc/ast");
31
+ const child_process_1 = require("child_process");
32
+ // src/ent/generated and src/graphql/generated
33
+ function transformPath(old) {
34
+ const parts = old.split(path.sep);
35
+ if (parts.length < 3) {
36
+ return;
37
+ }
38
+ const changedParts = parts
39
+ .slice(0, 2)
40
+ .concat("generated")
41
+ .concat(parts.slice(2).filter((v) => v !== "generated"));
42
+ const newFile = changedParts.join(path.sep);
43
+ return { changedParts, newFile };
44
+ }
45
+ function moveFiles(files) {
46
+ files.forEach((file) => {
47
+ const conv = transformPath(file);
48
+ if (!conv) {
49
+ return;
50
+ }
51
+ const { changedParts, newFile } = conv;
52
+ if (file === newFile) {
53
+ return;
54
+ }
55
+ // check if directory exists, if not, create recursive dir
56
+ const p = changedParts.slice(0, changedParts.length - 1).join(path.sep);
57
+ const statInfo = fs.statSync(p, { throwIfNoEntry: false });
58
+ if (!statInfo) {
59
+ fs.mkdirSync(p, {
60
+ recursive: true,
61
+ });
62
+ }
63
+ // move file to new location
64
+ fs.renameSync(file, newFile);
65
+ });
66
+ }
67
+ function updateImports(files, target, cwd) {
68
+ files.forEach((file) => {
69
+ let { contents, sourceFile } = (0, compilerOptions_1.createSourceFile)(target, file);
70
+ let nodes = [];
71
+ let updated = false;
72
+ typescript_1.default.forEachChild(sourceFile, function (node) {
73
+ let dirPath = path.join(cwd, file, "..");
74
+ if (typescript_1.default.isImportDeclaration(node)) {
75
+ const conv = isGeneratedPath(node, sourceFile, dirPath);
76
+ if (!conv) {
77
+ nodes.push({ node });
78
+ return;
79
+ }
80
+ updated = true;
81
+ const newImportPath = path.relative(dirPath, conv.newFile);
82
+ const v = (0, ast_1.updateImportPath)(contents, node, sourceFile, newImportPath);
83
+ nodes.push({ rawString: v });
84
+ }
85
+ else {
86
+ nodes.push({ node });
87
+ }
88
+ });
89
+ let newContents = "";
90
+ for (const node of nodes) {
91
+ if (node.node) {
92
+ newContents += node.node.getFullText(sourceFile);
93
+ }
94
+ else if (node.rawString) {
95
+ newContents += node.rawString;
96
+ }
97
+ else {
98
+ throw new Error(`malformed node with no node or rawString`);
99
+ }
100
+ }
101
+ if (updated) {
102
+ fs.writeFileSync(file, newContents);
103
+ }
104
+ });
105
+ }
106
+ function main() {
107
+ const entFiles = glob_1.glob.sync("src/ent/**/generated/**/**.ts");
108
+ const graphqlFiles = glob_1.glob.sync("src/graphql/**/generated/**/**.ts");
109
+ moveFiles(entFiles);
110
+ moveFiles(graphqlFiles);
111
+ const target = (0, compilerOptions_1.getTargetFromCurrentDir)();
112
+ const entImportFiles = glob_1.glob.sync("src/ent/**/*.ts", {
113
+ ignore: ["**/generated/**", "node_modules/**"],
114
+ });
115
+ const graphqlImportFiles = glob_1.glob.sync("src/graphql/**/*.ts", {
116
+ ignore: ["**/generated/**", "node_modules/**"],
117
+ });
118
+ const cwd = process.cwd();
119
+ updateImports(entImportFiles, target, cwd);
120
+ updateImports(graphqlImportFiles, target, cwd);
121
+ (0, child_process_1.execSync)("prettier src/ent/*.ts --write");
122
+ (0, child_process_1.execSync)("prettier src/graphql/*.ts --write");
123
+ }
124
+ function isGeneratedPath(node, sourceFile, dirPath) {
125
+ const text = node.moduleSpecifier.getText(sourceFile).slice(1, -1);
126
+ // it's relative and has generated in there, continue
127
+ if (!((text.startsWith("..") || text.startsWith("./")) &&
128
+ text.indexOf("/generated") !== -1)) {
129
+ return;
130
+ }
131
+ const oldPath = path.join(dirPath, text);
132
+ const relFromRoot = path.relative(".", oldPath);
133
+ const conv = transformPath(relFromRoot);
134
+ if (!conv) {
135
+ return;
136
+ }
137
+ if (relFromRoot === conv.newFile) {
138
+ return;
139
+ }
140
+ return conv;
141
+ }
142
+ main();
@@ -44,7 +44,21 @@ function main() {
44
44
  if (!match) {
45
45
  throw new Error(`non-typescript file ${p} returned by glob`);
46
46
  }
47
- potentialSchemas[(0, pascal_case_1.pascalCase)(match[1])] = require(p).default;
47
+ let schema = match[1];
48
+ // convert foo_schema.ts -> foo
49
+ if (schema.endsWith("_schema")) {
50
+ schema = schema.slice(0, -7);
51
+ }
52
+ let relativePath;
53
+ const index = p.indexOf("src/schema");
54
+ if (index !== -1) {
55
+ relativePath = p.substring(index);
56
+ }
57
+ const s = require(p).default;
58
+ if (relativePath !== undefined) {
59
+ s.schemaPath = relativePath;
60
+ }
61
+ potentialSchemas[(0, pascal_case_1.pascalCase)(schema)] = s;
48
62
  }
49
63
  // console.log(potentialSchemas);
50
64
  const result = (0, parse_1.parseSchema)(potentialSchemas);
@@ -0,0 +1 @@
1
+ export {};