@cedarjs/internal 0.0.4

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 (88) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +3 -0
  3. package/dist/ast.d.ts +26 -0
  4. package/dist/ast.d.ts.map +1 -0
  5. package/dist/ast.js +198 -0
  6. package/dist/build/api.d.ts +6 -0
  7. package/dist/build/api.d.ts.map +1 -0
  8. package/dist/build/api.js +109 -0
  9. package/dist/cliLogger.d.ts +11 -0
  10. package/dist/cliLogger.d.ts.map +1 -0
  11. package/dist/cliLogger.js +36 -0
  12. package/dist/dev.d.ts +2 -0
  13. package/dist/dev.d.ts.map +1 -0
  14. package/dist/dev.js +41 -0
  15. package/dist/files.d.ts +51 -0
  16. package/dist/files.d.ts.map +1 -0
  17. package/dist/files.js +223 -0
  18. package/dist/generate/clientPreset.d.ts +17 -0
  19. package/dist/generate/clientPreset.d.ts.map +1 -0
  20. package/dist/generate/clientPreset.js +85 -0
  21. package/dist/generate/generate.d.ts +10 -0
  22. package/dist/generate/generate.d.ts.map +1 -0
  23. package/dist/generate/generate.js +91 -0
  24. package/dist/generate/graphqlCodeGen.d.ts +16 -0
  25. package/dist/generate/graphqlCodeGen.d.ts.map +1 -0
  26. package/dist/generate/graphqlCodeGen.js +339 -0
  27. package/dist/generate/graphqlSchema.d.ts +8 -0
  28. package/dist/generate/graphqlSchema.d.ts.map +1 -0
  29. package/dist/generate/graphqlSchema.js +153 -0
  30. package/dist/generate/plugins/rw-typescript-resolvers/index.d.ts +6 -0
  31. package/dist/generate/plugins/rw-typescript-resolvers/index.d.ts.map +1 -0
  32. package/dist/generate/plugins/rw-typescript-resolvers/index.js +67 -0
  33. package/dist/generate/plugins/rw-typescript-resolvers/visitor.d.ts +9 -0
  34. package/dist/generate/plugins/rw-typescript-resolvers/visitor.d.ts.map +1 -0
  35. package/dist/generate/plugins/rw-typescript-resolvers/visitor.js +84 -0
  36. package/dist/generate/possibleTypes.d.ts +36 -0
  37. package/dist/generate/possibleTypes.d.ts.map +1 -0
  38. package/dist/generate/possibleTypes.js +106 -0
  39. package/dist/generate/templates/all-currentUser.d.ts.template +28 -0
  40. package/dist/generate/templates/api-globImports.d.ts.template +9 -0
  41. package/dist/generate/templates/api-globalContext.d.ts.template +7 -0
  42. package/dist/generate/templates/api-scenarios.d.ts.template +10 -0
  43. package/dist/generate/templates/api-test-globals.d.ts.template +5 -0
  44. package/dist/generate/templates/mirror-cell.d.ts.template +13 -0
  45. package/dist/generate/templates/mirror-directoryNamedModule.d.ts.template +5 -0
  46. package/dist/generate/templates/web-routerRoutes.d.ts.template +20 -0
  47. package/dist/generate/templates/web-routesPages.d.ts.template +13 -0
  48. package/dist/generate/templates/web-test-globals.d.ts.template +7 -0
  49. package/dist/generate/templates.d.ts +6 -0
  50. package/dist/generate/templates.d.ts.map +1 -0
  51. package/dist/generate/templates.js +61 -0
  52. package/dist/generate/trustedDocuments.d.ts +3 -0
  53. package/dist/generate/trustedDocuments.d.ts.map +1 -0
  54. package/dist/generate/trustedDocuments.js +95 -0
  55. package/dist/generate/typeDefinitions.d.ts +30 -0
  56. package/dist/generate/typeDefinitions.d.ts.map +1 -0
  57. package/dist/generate/typeDefinitions.js +369 -0
  58. package/dist/generate/types.d.ts +6 -0
  59. package/dist/generate/types.d.ts.map +1 -0
  60. package/dist/generate/types.js +16 -0
  61. package/dist/generate/watch.d.ts +3 -0
  62. package/dist/generate/watch.d.ts.map +1 -0
  63. package/dist/generate/watch.js +124 -0
  64. package/dist/gql.d.ts +14 -0
  65. package/dist/gql.d.ts.map +1 -0
  66. package/dist/gql.js +108 -0
  67. package/dist/index.d.ts +11 -0
  68. package/dist/index.d.ts.map +1 -0
  69. package/dist/index.js +49 -0
  70. package/dist/jsx.d.ts +16 -0
  71. package/dist/jsx.d.ts.map +1 -0
  72. package/dist/jsx.js +100 -0
  73. package/dist/jsxAttributeValue.d.ts +2 -0
  74. package/dist/jsxAttributeValue.d.ts.map +1 -0
  75. package/dist/jsxAttributeValue.js +129 -0
  76. package/dist/project.d.ts +8 -0
  77. package/dist/project.d.ts.map +1 -0
  78. package/dist/project.js +82 -0
  79. package/dist/routes.d.ts +42 -0
  80. package/dist/routes.d.ts.map +1 -0
  81. package/dist/routes.js +111 -0
  82. package/dist/ts2js.d.ts +40 -0
  83. package/dist/ts2js.d.ts.map +1 -0
  84. package/dist/ts2js.js +159 -0
  85. package/dist/validateSchema.d.ts +14 -0
  86. package/dist/validateSchema.d.ts.map +1 -0
  87. package/dist/validateSchema.js +193 -0
  88. package/package.json +131 -0
@@ -0,0 +1,339 @@
1
+ "use strict";
2
+ var __create = Object.create;
3
+ var __defProp = Object.defineProperty;
4
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
+ var __getOwnPropNames = Object.getOwnPropertyNames;
6
+ var __getProtoOf = Object.getPrototypeOf;
7
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
8
+ var __export = (target, all) => {
9
+ for (var name in all)
10
+ __defProp(target, name, { get: all[name], enumerable: true });
11
+ };
12
+ var __copyProps = (to, from, except, desc) => {
13
+ if (from && typeof from === "object" || typeof from === "function") {
14
+ for (let key of __getOwnPropNames(from))
15
+ if (!__hasOwnProp.call(to, key) && key !== except)
16
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
17
+ }
18
+ return to;
19
+ };
20
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
21
+ // If the importer is in node compatibility mode or this is not an ESM
22
+ // file that has been converted to a CommonJS file using a Babel-
23
+ // compatible transform (i.e. "__esModule" has not been set), then set
24
+ // "default" to the CommonJS "module.exports" for node compatibility.
25
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
26
+ mod
27
+ ));
28
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
29
+ var graphqlCodeGen_exports = {};
30
+ __export(graphqlCodeGen_exports, {
31
+ generateTypeDefGraphQLApi: () => generateTypeDefGraphQLApi,
32
+ generateTypeDefGraphQLWeb: () => generateTypeDefGraphQLWeb,
33
+ getLoadDocumentsOptions: () => getLoadDocumentsOptions,
34
+ getResolverFnType: () => getResolverFnType
35
+ });
36
+ module.exports = __toCommonJS(graphqlCodeGen_exports);
37
+ var import_fs = __toESM(require("fs"));
38
+ var import_path = __toESM(require("path"));
39
+ var addPlugin = __toESM(require("@graphql-codegen/add"));
40
+ var import_cli = require("@graphql-codegen/cli");
41
+ var import_core = require("@graphql-codegen/core");
42
+ var typescriptPlugin = __toESM(require("@graphql-codegen/typescript"));
43
+ var typescriptOperations = __toESM(require("@graphql-codegen/typescript-operations"));
44
+ var import_code_file_loader = require("@graphql-tools/code-file-loader");
45
+ var import_graphql_file_loader = require("@graphql-tools/graphql-file-loader");
46
+ var import_load = require("@graphql-tools/load");
47
+ var import_execa = __toESM(require("execa"));
48
+ var import_graphql = require("graphql");
49
+ var import_project_config = require("@cedarjs/project-config");
50
+ var import_project = require("../project");
51
+ var rwTypescriptResolvers = __toESM(require("./plugins/rw-typescript-resolvers"));
52
+ var CodegenSide = /* @__PURE__ */ ((CodegenSide2) => {
53
+ CodegenSide2[CodegenSide2["API"] = 0] = "API";
54
+ CodegenSide2[CodegenSide2["WEB"] = 1] = "WEB";
55
+ return CodegenSide2;
56
+ })(CodegenSide || {});
57
+ const generateTypeDefGraphQLApi = async () => {
58
+ const config = (0, import_project_config.getConfig)();
59
+ const errors = [];
60
+ if (config.experimental.useSDLCodeGenForGraphQLTypes) {
61
+ const paths = (0, import_project_config.getPaths)();
62
+ const sdlCodegen = await import("@sdl-codegen/node");
63
+ const dtsFiles = [];
64
+ try {
65
+ const output = await sdlCodegen.runFullCodegen("redwood", { paths });
66
+ dtsFiles.concat(output.paths);
67
+ } catch (e) {
68
+ if (e instanceof Error) {
69
+ errors.push({
70
+ message: e.message,
71
+ error: e
72
+ });
73
+ }
74
+ }
75
+ return {
76
+ typeDefFiles: dtsFiles,
77
+ errors
78
+ };
79
+ }
80
+ const filename = import_path.default.join((0, import_project_config.getPaths)().api.types, "graphql.d.ts");
81
+ const prismaModels = await getPrismaModels();
82
+ const prismaImports = Object.keys(prismaModels).map((key) => {
83
+ return `${key} as Prisma${key}`;
84
+ });
85
+ const extraPlugins = [
86
+ {
87
+ name: "add",
88
+ options: {
89
+ content: [
90
+ 'import { Prisma } from "@prisma/client"',
91
+ "import { MergePrismaWithSdlTypes, MakeRelationsOptional } from '@cedarjs/api'",
92
+ `import { ${prismaImports.join(", ")} } from '@prisma/client'`
93
+ ],
94
+ placement: "prepend"
95
+ },
96
+ codegenPlugin: addPlugin
97
+ },
98
+ {
99
+ name: "print-mapped-models",
100
+ options: {},
101
+ codegenPlugin: printMappedModelsPlugin
102
+ },
103
+ {
104
+ name: "typescript-resolvers",
105
+ options: {},
106
+ codegenPlugin: rwTypescriptResolvers
107
+ }
108
+ ];
109
+ try {
110
+ return {
111
+ typeDefFiles: await runCodegenGraphQL(
112
+ [],
113
+ extraPlugins,
114
+ filename,
115
+ 0 /* API */
116
+ ),
117
+ errors
118
+ };
119
+ } catch (e) {
120
+ errors.push({
121
+ message: "Error: Could not generate GraphQL type definitions (api)",
122
+ error: e
123
+ });
124
+ return {
125
+ typeDefFiles: [],
126
+ errors
127
+ };
128
+ }
129
+ };
130
+ const generateTypeDefGraphQLWeb = async () => {
131
+ const filename = import_path.default.join((0, import_project_config.getPaths)().web.types, "graphql.d.ts");
132
+ const options = getLoadDocumentsOptions(filename);
133
+ const documentsGlob = "./web/src/**/!(*.d).{ts,tsx,js,jsx}";
134
+ let documents;
135
+ try {
136
+ documents = await (0, import_load.loadDocuments)([documentsGlob], options);
137
+ } catch {
138
+ return {
139
+ typeDefFiles: [],
140
+ errors: []
141
+ };
142
+ }
143
+ const extraPlugins = [
144
+ {
145
+ name: "add",
146
+ options: {
147
+ content: 'import { Prisma } from "@prisma/client"',
148
+ placement: "prepend"
149
+ },
150
+ codegenPlugin: addPlugin
151
+ },
152
+ {
153
+ name: "typescript-operations",
154
+ options: {},
155
+ codegenPlugin: typescriptOperations
156
+ }
157
+ ];
158
+ const errors = [];
159
+ try {
160
+ return {
161
+ typeDefFiles: await runCodegenGraphQL(
162
+ documents,
163
+ extraPlugins,
164
+ filename,
165
+ 1 /* WEB */
166
+ ),
167
+ errors
168
+ };
169
+ } catch (e) {
170
+ errors.push({
171
+ message: "Error: Could not generate GraphQL type definitions (web)",
172
+ error: e
173
+ });
174
+ return {
175
+ typeDefFiles: [],
176
+ errors
177
+ };
178
+ }
179
+ };
180
+ async function runCodegenGraphQL(documents, extraPlugins, filename, side) {
181
+ const userCodegenConfig = await (0, import_cli.loadCodegenConfig)({
182
+ configFilePath: (0, import_project_config.getPaths)().base
183
+ });
184
+ const mergedConfig = {
185
+ ...await getPluginConfig(side),
186
+ ...userCodegenConfig?.config?.config
187
+ };
188
+ const options = getCodegenOptions(documents, mergedConfig, extraPlugins);
189
+ const output = await (0, import_core.codegen)(options);
190
+ import_fs.default.mkdirSync(import_path.default.dirname(filename), { recursive: true });
191
+ import_fs.default.writeFileSync(filename, output);
192
+ return [filename];
193
+ }
194
+ function getLoadDocumentsOptions(filename) {
195
+ const loadTypedefsConfig = {
196
+ cwd: (0, import_project_config.getPaths)().base,
197
+ ignore: [import_path.default.join(process.cwd(), filename)],
198
+ loaders: [new import_code_file_loader.CodeFileLoader()],
199
+ sort: true
200
+ };
201
+ return loadTypedefsConfig;
202
+ }
203
+ async function getPrismaClient(hasGenerated = false) {
204
+ const { default: localPrisma } = await import("@prisma/client");
205
+ if (!localPrisma.ModelName) {
206
+ if (hasGenerated) {
207
+ return { ModelName: {} };
208
+ } else {
209
+ import_execa.default.sync("yarn rw prisma generate", { shell: true });
210
+ Object.keys(require.cache).forEach((key) => {
211
+ if (key.includes("/node_modules/@prisma/client/") || key.includes("/node_modules/.prisma/client/")) {
212
+ delete require.cache[key];
213
+ }
214
+ });
215
+ return getPrismaClient(true);
216
+ }
217
+ }
218
+ return localPrisma;
219
+ }
220
+ async function getPrismaModels() {
221
+ const localPrisma = await getPrismaClient();
222
+ const prismaModels = localPrisma.ModelName;
223
+ if (prismaModels.RW_DataMigration) {
224
+ delete prismaModels.RW_DataMigration;
225
+ }
226
+ return prismaModels;
227
+ }
228
+ async function getPluginConfig(side) {
229
+ const prismaModels = await getPrismaModels();
230
+ Object.keys(prismaModels).forEach((key) => {
231
+ prismaModels[key] = `MergePrismaWithSdlTypes<Prisma${key}, MakeRelationsOptional<${key}, AllMappedModels>, AllMappedModels>`;
232
+ });
233
+ const scalars = {
234
+ // We need these, otherwise these scalars are mapped to any
235
+ BigInt: "number",
236
+ // @Note: DateTime fields can be valid Date-strings, or the Date object in the api side. They're always strings on the web side.
237
+ DateTime: side === 1 /* WEB */ ? "string" : "Date | string",
238
+ Date: side === 1 /* WEB */ ? "string" : "Date | string",
239
+ JSON: "Prisma.JsonValue",
240
+ JSONObject: "Prisma.JsonObject",
241
+ Time: side === 1 /* WEB */ ? "string" : "Date | string",
242
+ Byte: "Buffer"
243
+ };
244
+ const config = (0, import_project_config.getConfig)();
245
+ if (config.graphql.includeScalars.File) {
246
+ scalars.File = "File";
247
+ }
248
+ const pluginConfig = {
249
+ makeResolverTypeCallable: true,
250
+ namingConvention: "keep",
251
+ // to allow camelCased query names
252
+ scalars,
253
+ // prevent type names being PetQueryQuery, RW generators already append
254
+ // Query/Mutation/etc
255
+ omitOperationSuffix: true,
256
+ showUnusedMappers: false,
257
+ customResolverFn: getResolverFnType(),
258
+ mappers: prismaModels,
259
+ avoidOptionals: {
260
+ // We do this, so that service tests can call resolvers without doing a null check
261
+ // see https://github.com/redwoodjs/redwood/pull/6222#issuecomment-1230156868
262
+ // Look at type or source https://shrtm.nu/2BA0 for possible config, not well documented
263
+ resolvers: true
264
+ },
265
+ contextType: `@cedarjs/graphql-server/dist/types#RedwoodGraphQLContext`
266
+ };
267
+ return pluginConfig;
268
+ }
269
+ const getResolverFnType = () => {
270
+ const tsConfig = (0, import_project.getTsConfigs)();
271
+ if (tsConfig.api?.compilerOptions?.strict) {
272
+ return `(
273
+ args: TArgs,
274
+ obj?: { root: TParent; context: TContext; info: GraphQLResolveInfo }
275
+ ) => TResult | Promise<TResult>`;
276
+ } else {
277
+ return `(
278
+ args?: TArgs,
279
+ obj?: { root: TParent; context: TContext; info: GraphQLResolveInfo }
280
+ ) => TResult | Promise<TResult>`;
281
+ }
282
+ };
283
+ const printMappedModelsPlugin = {
284
+ plugin: (schema, _documents, config) => {
285
+ const sdlTypesWhichAreMapped = Object.values(schema.getTypeMap()).filter((type) => {
286
+ return type.astNode?.kind === import_graphql.Kind.OBJECT_TYPE_DEFINITION;
287
+ }).filter((objectDefType) => {
288
+ const modelName = objectDefType.astNode?.name.value;
289
+ return modelName && modelName in config.mappers;
290
+ }).map((objectDefType) => objectDefType.astNode?.name.value);
291
+ return `type MaybeOrArrayOfMaybe<T> = T | Maybe<T> | Maybe<T>[];
292
+ type AllMappedModels = MaybeOrArrayOfMaybe<${sdlTypesWhichAreMapped.join(
293
+ " | "
294
+ )}>`;
295
+ }
296
+ };
297
+ function getCodegenOptions(documents, config, extraPlugins) {
298
+ const plugins = [
299
+ { typescript: { enumsAsTypes: true } },
300
+ ...extraPlugins.map((plugin) => ({ [plugin.name]: plugin.options }))
301
+ ];
302
+ const pluginMap = {
303
+ typescript: typescriptPlugin,
304
+ ...extraPlugins.reduce(
305
+ (acc, cur) => ({ ...acc, [cur.name]: cur.codegenPlugin }),
306
+ {}
307
+ )
308
+ };
309
+ const options = {
310
+ // The typescript plugin returns a string instead of writing to a file, so
311
+ // `filename` is not used
312
+ filename: "",
313
+ // `schemaAst` is used instead of `schema` if `schemaAst` is defined, and
314
+ // `schema` isn't. In the source for GenerateOptions they have this
315
+ // comment:
316
+ // Remove schemaAst and change schema to GraphQLSchema in the next major
317
+ // version
318
+ // When that happens we'll have have to remove our `schema` line, and
319
+ // rename `schemaAst` to `schema`
320
+ schema: void 0,
321
+ schemaAst: (0, import_load.loadSchemaSync)((0, import_project_config.getPaths)().generated.schema, {
322
+ loaders: [new import_graphql_file_loader.GraphQLFileLoader()],
323
+ sort: true
324
+ }),
325
+ documents,
326
+ config,
327
+ plugins,
328
+ pluginMap,
329
+ pluginContext: {}
330
+ };
331
+ return options;
332
+ }
333
+ // Annotate the CommonJS export names for ESM import in node:
334
+ 0 && (module.exports = {
335
+ generateTypeDefGraphQLApi,
336
+ generateTypeDefGraphQLWeb,
337
+ getLoadDocumentsOptions,
338
+ getResolverFnType
339
+ });
@@ -0,0 +1,8 @@
1
+ export declare const generateGraphQLSchema: () => Promise<{
2
+ schemaPath: string;
3
+ errors: {
4
+ message: string;
5
+ error: unknown;
6
+ }[];
7
+ }>;
8
+ //# sourceMappingURL=graphqlSchema.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"graphqlSchema.d.ts","sourceRoot":"","sources":["../../src/generate/graphqlSchema.ts"],"names":[],"mappings":"AAkBA,eAAO,MAAM,qBAAqB;;;iBAmDP,MAAM;eAAS,OAAO;;EAyEhD,CAAA"}
@@ -0,0 +1,153 @@
1
+ "use strict";
2
+ var __create = Object.create;
3
+ var __defProp = Object.defineProperty;
4
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
+ var __getOwnPropNames = Object.getOwnPropertyNames;
6
+ var __getProtoOf = Object.getPrototypeOf;
7
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
8
+ var __export = (target, all) => {
9
+ for (var name in all)
10
+ __defProp(target, name, { get: all[name], enumerable: true });
11
+ };
12
+ var __copyProps = (to, from, except, desc) => {
13
+ if (from && typeof from === "object" || typeof from === "function") {
14
+ for (let key of __getOwnPropNames(from))
15
+ if (!__hasOwnProp.call(to, key) && key !== except)
16
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
17
+ }
18
+ return to;
19
+ };
20
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
21
+ // If the importer is in node compatibility mode or this is not an ESM
22
+ // file that has been converted to a CommonJS file using a Babel-
23
+ // compatible transform (i.e. "__esModule" has not been set), then set
24
+ // "default" to the CommonJS "module.exports" for node compatibility.
25
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
26
+ mod
27
+ ));
28
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
29
+ var graphqlSchema_exports = {};
30
+ __export(graphqlSchema_exports, {
31
+ generateGraphQLSchema: () => generateGraphQLSchema
32
+ });
33
+ module.exports = __toCommonJS(graphqlSchema_exports);
34
+ var import_fs = __toESM(require("fs"));
35
+ var import_core = require("@graphql-codegen/core");
36
+ var schemaAstPlugin = __toESM(require("@graphql-codegen/schema-ast"));
37
+ var import_code_file_loader = require("@graphql-tools/code-file-loader");
38
+ var import_load = require("@graphql-tools/load");
39
+ var import_internals = require("@prisma/internals");
40
+ var import_chalk = __toESM(require("chalk"));
41
+ var import_graphql = require("graphql");
42
+ var import_terminal_link = __toESM(require("terminal-link"));
43
+ var import_graphql_server = require("@cedarjs/graphql-server");
44
+ var import_project_config = require("@cedarjs/project-config");
45
+ const generateGraphQLSchema = async () => {
46
+ const redwoodProjectPaths = (0, import_project_config.getPaths)();
47
+ const redwoodProjectConfig = (0, import_project_config.getConfig)();
48
+ const schemaPointerMap = {
49
+ [(0, import_graphql.print)(import_graphql_server.rootSchema.schema)]: {},
50
+ "graphql/**/*.sdl.{js,ts}": {},
51
+ "directives/**/*.{js,ts}": {},
52
+ "subscriptions/**/*.{js,ts}": {}
53
+ };
54
+ for (const [name, schema] of Object.entries(import_graphql_server.rootSchema.scalarSchemas)) {
55
+ if (redwoodProjectConfig.graphql.includeScalars[name]) {
56
+ schemaPointerMap[(0, import_graphql.print)(schema)] = {};
57
+ }
58
+ }
59
+ if ((0, import_project_config.resolveFile)(`${(0, import_project_config.getPaths)().api.src}/server`)) {
60
+ try {
61
+ const { liveDirectiveTypeDefs } = await import("@cedarjs/realtime");
62
+ schemaPointerMap[liveDirectiveTypeDefs] = {};
63
+ } catch (error) {
64
+ if (error.code !== "ERR_MODULE_NOT_FOUND") {
65
+ throw error;
66
+ }
67
+ }
68
+ }
69
+ const loadSchemaConfig = {
70
+ assumeValidSDL: true,
71
+ sort: true,
72
+ convertExtensions: true,
73
+ includeSources: true,
74
+ cwd: redwoodProjectPaths.api.src,
75
+ schema: Object.keys(schemaPointerMap),
76
+ generates: {
77
+ [redwoodProjectPaths.generated.schema]: {
78
+ plugins: ["schema-ast"]
79
+ }
80
+ },
81
+ silent: false,
82
+ errorsOnly: false,
83
+ pluginContext: {},
84
+ loaders: [new import_code_file_loader.CodeFileLoader()]
85
+ };
86
+ let loadedSchema;
87
+ const errors = [];
88
+ try {
89
+ loadedSchema = await (0, import_load.loadSchema)(schemaPointerMap, loadSchemaConfig);
90
+ } catch (e) {
91
+ if (e instanceof Error) {
92
+ const match = e.message.match(/Unknown type: "(\w+)"/);
93
+ const name = match?.[1];
94
+ const schemaPrisma = (await (0, import_internals.getSchema)(redwoodProjectPaths.api.dbSchema)).toString();
95
+ const errorObject = {
96
+ message: `Schema loading failed. ${e.message}`,
97
+ error: e
98
+ };
99
+ errors.push(errorObject);
100
+ if (name && schemaPrisma.includes(`model ${name}`)) {
101
+ errorObject.message = [
102
+ errorObject.message,
103
+ "",
104
+ ` ${import_chalk.default.bgYellow(` ${import_chalk.default.black.bold("Heads up")} `)}`,
105
+ "",
106
+ import_chalk.default.yellow(
107
+ ` It looks like you have a ${name} model in your Prisma schema.`
108
+ ),
109
+ import_chalk.default.yellow(
110
+ ` If it's part of a relation, you may have to generate SDL or scaffolding for ${name} too.`
111
+ ),
112
+ import_chalk.default.yellow(
113
+ ` So, if you haven't done that yet, ignore this error message and run the SDL or scaffold generator for ${name} now.`
114
+ ),
115
+ "",
116
+ import_chalk.default.yellow(
117
+ ` See the ${(0, import_terminal_link.default)(
118
+ "Troubleshooting Generators",
119
+ "https://redwoodjs.com/docs/schema-relations#troubleshooting-generators"
120
+ )} section in our docs for more help.`
121
+ )
122
+ ].join("\n");
123
+ }
124
+ }
125
+ }
126
+ const options = {
127
+ config: {},
128
+ // no extra config needed for merged schema file generation
129
+ plugins: [{ "schema-ast": {} }],
130
+ pluginMap: { "schema-ast": schemaAstPlugin },
131
+ schema: {},
132
+ schemaAst: loadedSchema,
133
+ filename: redwoodProjectPaths.generated.schema,
134
+ documents: []
135
+ };
136
+ if (loadedSchema) {
137
+ try {
138
+ const schema = await (0, import_core.codegen)(options);
139
+ import_fs.default.writeFileSync(redwoodProjectPaths.generated.schema, schema);
140
+ return { schemaPath: redwoodProjectPaths.generated.schema, errors };
141
+ } catch (e) {
142
+ errors.push({
143
+ message: `GraphQL Schema codegen failed`,
144
+ error: e
145
+ });
146
+ }
147
+ }
148
+ return { schemaPath: "", errors };
149
+ };
150
+ // Annotate the CommonJS export names for ESM import in node:
151
+ 0 && (module.exports = {
152
+ generateGraphQLSchema
153
+ });
@@ -0,0 +1,6 @@
1
+ import type { Types, PluginFunction } from '@graphql-codegen/plugin-helpers';
2
+ import { TypeScriptResolversPluginConfig } from '@graphql-codegen/typescript-resolvers';
3
+ import { RwTypeScriptResolversVisitor } from './visitor';
4
+ export declare const plugin: PluginFunction<TypeScriptResolversPluginConfig, Types.ComplexPluginOutput>;
5
+ export { RwTypeScriptResolversVisitor, TypeScriptResolversPluginConfig };
6
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/generate/plugins/rw-typescript-resolvers/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAA;AAK5E,OAAO,EACL,+BAA+B,EAEhC,MAAM,uCAAuC,CAAA;AAG9C,OAAO,EAAE,4BAA4B,EAAE,MAAM,WAAW,CAAA;AAExD,eAAO,MAAM,MAAM,EAAE,cAAc,CACjC,+BAA+B,EAC/B,KAAK,CAAC,mBAAmB,CAgF1B,CAAA;AAED,OAAO,EAAE,4BAA4B,EAAE,+BAA+B,EAAE,CAAA"}
@@ -0,0 +1,67 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+ var rw_typescript_resolvers_exports = {};
20
+ __export(rw_typescript_resolvers_exports, {
21
+ RwTypeScriptResolversVisitor: () => import_visitor.RwTypeScriptResolversVisitor,
22
+ TypeScriptResolversPluginConfig: () => import_typescript_resolvers.TypeScriptResolversPluginConfig,
23
+ plugin: () => plugin
24
+ });
25
+ module.exports = __toCommonJS(rw_typescript_resolvers_exports);
26
+ var import_plugin_helpers = require("@graphql-codegen/plugin-helpers");
27
+ var import_typescript_resolvers = require("@graphql-codegen/typescript-resolvers");
28
+ var import_visitor = require("./visitor");
29
+ const plugin = (schema, _documents, config) => {
30
+ const visitor = new import_visitor.RwTypeScriptResolversVisitor(config, schema);
31
+ const visitorResult = (0, import_plugin_helpers.oldVisit)((0, import_plugin_helpers.getCachedDocumentNodeFromSchema)(schema), {
32
+ leave: visitor
33
+ });
34
+ const { prepend, content } = (0, import_typescript_resolvers.plugin)(schema, [], config);
35
+ prepend.push(`export type OptArgsResolverFn<TResult, TParent = {}, TContext = {}, TArgs = {}> = (
36
+ args?: TArgs,
37
+ obj?: { root: TParent; context: TContext; info: GraphQLResolveInfo }
38
+ ) => TResult | Promise<TResult>
39
+
40
+ export type RequiredResolverFn<TResult, TParent = {}, TContext = {}, TArgs = {}> = (
41
+ args: TArgs,
42
+ obj: { root: TParent; context: TContext; info: GraphQLResolveInfo }
43
+ ) => TResult | Promise<TResult>`);
44
+ const splitContent = content.split("\n");
45
+ const visitorResultStart = splitContent.indexOf(
46
+ visitorResult.definitions.filter((d) => typeof d === "string")[0].split("\n")[0]
47
+ );
48
+ const splitRootResolver = visitor.getRootResolver().split("\n");
49
+ const visitorResultEnd = splitContent.findIndex(
50
+ (line, index) => line === splitRootResolver[0] && splitContent[index + 1] === splitRootResolver[1]
51
+ );
52
+ const newContent = [
53
+ ...splitContent.slice(0, visitorResultStart),
54
+ ...visitorResult.definitions.filter((d) => typeof d === "string"),
55
+ ...splitContent.slice(visitorResultEnd)
56
+ ];
57
+ return {
58
+ prepend,
59
+ content: newContent.join("\n")
60
+ };
61
+ };
62
+ // Annotate the CommonJS export names for ESM import in node:
63
+ 0 && (module.exports = {
64
+ RwTypeScriptResolversVisitor,
65
+ TypeScriptResolversPluginConfig,
66
+ plugin
67
+ });
@@ -0,0 +1,9 @@
1
+ import type { TypeScriptResolversPluginConfig } from '@graphql-codegen/typescript-resolvers';
2
+ import { TypeScriptResolversVisitor } from '@graphql-codegen/typescript-resolvers';
3
+ import type { FieldDefinitionNode, GraphQLSchema, ObjectTypeDefinitionNode } from 'graphql';
4
+ export declare class RwTypeScriptResolversVisitor extends TypeScriptResolversVisitor {
5
+ constructor(pluginConfig: TypeScriptResolversPluginConfig, schema: GraphQLSchema);
6
+ FieldDefinition(node: FieldDefinitionNode, key: string | number, parent: any): (parentName: string) => string | null;
7
+ ObjectTypeDefinition(node: ObjectTypeDefinitionNode): string;
8
+ }
9
+ //# sourceMappingURL=visitor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"visitor.d.ts","sourceRoot":"","sources":["../../../../src/generate/plugins/rw-typescript-resolvers/visitor.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,+BAA+B,EAAE,MAAM,uCAAuC,CAAA;AAC5F,OAAO,EAAE,0BAA0B,EAAE,MAAM,uCAAuC,CAAA;AAKlF,OAAO,KAAK,EACV,mBAAmB,EACnB,aAAa,EACb,wBAAwB,EACzB,MAAM,SAAS,CAAA;AAEhB,qBAAa,4BAA6B,SAAQ,0BAA0B;gBAExE,YAAY,EAAE,+BAA+B,EAC7C,MAAM,EAAE,aAAa;IAKvB,eAAe,CACb,IAAI,EAAE,mBAAmB,EACzB,GAAG,EAAE,MAAM,GAAG,MAAM,EACpB,MAAM,EAAE,GAAG,GACV,CAAC,UAAU,EAAE,MAAM,KAAK,MAAM,GAAG,IAAI;IAuBxC,oBAAoB,CAAC,IAAI,EAAE,wBAAwB,GAAG,MAAM;CAgG7D"}
@@ -0,0 +1,84 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+ var visitor_exports = {};
20
+ __export(visitor_exports, {
21
+ RwTypeScriptResolversVisitor: () => RwTypeScriptResolversVisitor
22
+ });
23
+ module.exports = __toCommonJS(visitor_exports);
24
+ var import_typescript_resolvers = require("@graphql-codegen/typescript-resolvers");
25
+ var import_visitor_plugin_common = require("@graphql-codegen/visitor-plugin-common");
26
+ class RwTypeScriptResolversVisitor extends import_typescript_resolvers.TypeScriptResolversVisitor {
27
+ constructor(pluginConfig, schema) {
28
+ super(pluginConfig, schema);
29
+ }
30
+ FieldDefinition(node, key, parent) {
31
+ const hasArguments = node.arguments && node.arguments.length > 0;
32
+ const superFieldDefinition = super.FieldDefinition(node, key, parent);
33
+ return (parentName) => {
34
+ const fieldDef = superFieldDefinition(parentName);
35
+ if (!hasArguments && fieldDef?.includes(": Resolver<")) {
36
+ return fieldDef.replace(": Resolver<", ": OptArgsResolverFn<");
37
+ }
38
+ return fieldDef;
39
+ };
40
+ }
41
+ // Original implementation is here:
42
+ // https://github.com/dotansimha/graphql-code-generator/blob/c6c60a3078f3797af435c3852220d8898964031d/packages/plugins/other/visitor-plugin-common/src/base-resolvers-visitor.ts#L1091
43
+ ObjectTypeDefinition(node) {
44
+ const originalBlock = super.ObjectTypeDefinition(node);
45
+ const name = this.convertName(node, {
46
+ suffix: this.config.resolverTypeSuffix
47
+ });
48
+ const typeName = node.name;
49
+ const parentType = this.getParentTypeToUse(typeName);
50
+ const fieldsContent = (node.fields || []).map((f) => f(node.name));
51
+ const isRootType = [
52
+ this.schema.getQueryType()?.name,
53
+ this.schema.getMutationType()?.name,
54
+ this.schema.getSubscriptionType()?.name
55
+ ].includes(typeName);
56
+ if (!isRootType) {
57
+ fieldsContent.push(
58
+ (0, import_visitor_plugin_common.indent)(
59
+ `${this.config.internalResolversPrefix}isTypeOf?: IsTypeOfResolverFn<ParentType, ContextType>${this.getPunctuation(
60
+ "type"
61
+ )}`
62
+ )
63
+ );
64
+ }
65
+ const blockRelationsResolver = new import_visitor_plugin_common.DeclarationBlock(
66
+ this._declarationBlockConfig
67
+ ).export().asKind("type").withName(
68
+ name.replace("Resolvers", "RelationResolvers"),
69
+ `<ContextType = ${this.config.contextType.type}, ${this.transformParentGenericType(parentType)}>`
70
+ ).withBlock(
71
+ fieldsContent.map(
72
+ (content) => content.replace(
73
+ /: (?:OptArgs)?Resolver(?:Fn)?/,
74
+ "?: RequiredResolverFn"
75
+ )
76
+ ).join("\n")
77
+ );
78
+ return originalBlock + "\n" + blockRelationsResolver.string;
79
+ }
80
+ }
81
+ // Annotate the CommonJS export names for ESM import in node:
82
+ 0 && (module.exports = {
83
+ RwTypeScriptResolversVisitor
84
+ });