@cedarjs/internal 0.6.0 → 0.6.1-next.51
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.
- package/dist/ast.d.ts.map +1 -1
- package/dist/ast.js +28 -64
- package/dist/build/api.js +22 -56
- package/dist/cjs/ast.d.ts +26 -0
- package/dist/cjs/ast.d.ts.map +1 -0
- package/dist/cjs/ast.js +201 -0
- package/dist/cjs/build/api.d.ts +6 -0
- package/dist/cjs/build/api.d.ts.map +1 -0
- package/dist/cjs/build/api.js +109 -0
- package/dist/cjs/cliLogger.d.ts +11 -0
- package/dist/cjs/cliLogger.d.ts.map +1 -0
- package/dist/cjs/cliLogger.js +36 -0
- package/dist/cjs/dev.d.ts +2 -0
- package/dist/cjs/dev.d.ts.map +1 -0
- package/dist/cjs/dev.js +41 -0
- package/dist/cjs/files.d.ts +56 -0
- package/dist/cjs/files.d.ts.map +1 -0
- package/dist/cjs/files.js +230 -0
- package/dist/cjs/generate/clientPreset.d.ts +17 -0
- package/dist/cjs/generate/clientPreset.d.ts.map +1 -0
- package/dist/cjs/generate/clientPreset.js +85 -0
- package/dist/cjs/generate/generate.d.ts +10 -0
- package/dist/cjs/generate/generate.d.ts.map +1 -0
- package/dist/cjs/generate/generate.js +91 -0
- package/dist/cjs/generate/graphqlCodeGen.d.ts +16 -0
- package/dist/cjs/generate/graphqlCodeGen.d.ts.map +1 -0
- package/dist/cjs/generate/graphqlCodeGen.js +346 -0
- package/dist/cjs/generate/graphqlSchema.d.ts +8 -0
- package/dist/cjs/generate/graphqlSchema.d.ts.map +1 -0
- package/dist/cjs/generate/graphqlSchema.js +154 -0
- package/dist/cjs/generate/plugins/rw-typescript-resolvers/index.d.ts +7 -0
- package/dist/cjs/generate/plugins/rw-typescript-resolvers/index.d.ts.map +1 -0
- package/dist/cjs/generate/plugins/rw-typescript-resolvers/index.js +65 -0
- package/dist/cjs/generate/plugins/rw-typescript-resolvers/visitor.d.ts +9 -0
- package/dist/cjs/generate/plugins/rw-typescript-resolvers/visitor.d.ts.map +1 -0
- package/dist/cjs/generate/plugins/rw-typescript-resolvers/visitor.js +84 -0
- package/dist/cjs/generate/possibleTypes.d.ts +36 -0
- package/dist/cjs/generate/possibleTypes.d.ts.map +1 -0
- package/dist/cjs/generate/possibleTypes.js +106 -0
- package/dist/cjs/generate/templates/all-currentUser.d.ts.template +30 -0
- package/dist/cjs/generate/templates/api-globImports.d.ts.template +9 -0
- package/dist/cjs/generate/templates/api-globalContext.d.ts.template +7 -0
- package/dist/cjs/generate/templates/api-scenarios.d.ts.template +10 -0
- package/dist/cjs/generate/templates/api-test-globals.d.ts.template +5 -0
- package/dist/cjs/generate/templates/mirror-cell.d.ts.template +13 -0
- package/dist/cjs/generate/templates/mirror-directoryNamedModule.d.ts.template +5 -0
- package/dist/cjs/generate/templates/web-routerRoutes.d.ts.template +20 -0
- package/dist/cjs/generate/templates/web-routesPages.d.ts.template +13 -0
- package/dist/cjs/generate/templates/web-test-globals.d.ts.template +7 -0
- package/dist/cjs/generate/templates.d.ts +6 -0
- package/dist/cjs/generate/templates.d.ts.map +1 -0
- package/dist/cjs/generate/templates.js +68 -0
- package/dist/cjs/generate/trustedDocuments.d.ts +3 -0
- package/dist/cjs/generate/trustedDocuments.d.ts.map +1 -0
- package/dist/cjs/generate/trustedDocuments.js +95 -0
- package/dist/cjs/generate/typeDefinitions.d.ts +30 -0
- package/dist/cjs/generate/typeDefinitions.d.ts.map +1 -0
- package/dist/cjs/generate/typeDefinitions.js +369 -0
- package/dist/cjs/generate/types.d.ts +6 -0
- package/dist/cjs/generate/types.d.ts.map +1 -0
- package/dist/cjs/generate/types.js +16 -0
- package/dist/cjs/generate/watch.d.ts +3 -0
- package/dist/cjs/generate/watch.d.ts.map +1 -0
- package/dist/cjs/generate/watch.js +124 -0
- package/dist/cjs/gql.d.ts +14 -0
- package/dist/cjs/gql.d.ts.map +1 -0
- package/dist/cjs/gql.js +108 -0
- package/dist/cjs/index.d.ts +11 -0
- package/dist/cjs/index.d.ts.map +1 -0
- package/dist/cjs/index.js +49 -0
- package/dist/cjs/jsx.d.ts +16 -0
- package/dist/cjs/jsx.d.ts.map +1 -0
- package/dist/cjs/jsx.js +101 -0
- package/dist/cjs/jsxAttributeValue.d.ts +2 -0
- package/dist/cjs/jsxAttributeValue.d.ts.map +1 -0
- package/dist/cjs/jsxAttributeValue.js +129 -0
- package/dist/cjs/package.json +1 -0
- package/dist/cjs/project.d.ts +8 -0
- package/dist/cjs/project.d.ts.map +1 -0
- package/dist/cjs/project.js +82 -0
- package/dist/cjs/routes.d.ts +42 -0
- package/dist/cjs/routes.d.ts.map +1 -0
- package/dist/cjs/routes.js +111 -0
- package/dist/cjs/ts2js.d.ts +40 -0
- package/dist/cjs/ts2js.d.ts.map +1 -0
- package/dist/cjs/ts2js.js +159 -0
- package/dist/cjs/validateSchema.d.ts +14 -0
- package/dist/cjs/validateSchema.d.ts.map +1 -0
- package/dist/cjs/validateSchema.js +194 -0
- package/dist/cliLogger.js +4 -28
- package/dist/dev.js +4 -38
- package/dist/files.d.ts.map +1 -1
- package/dist/files.js +46 -95
- package/dist/generate/clientPreset.js +17 -39
- package/dist/generate/generate.js +14 -39
- package/dist/generate/graphqlCodeGen.d.ts.map +1 -1
- package/dist/generate/graphqlCodeGen.js +49 -79
- package/dist/generate/graphqlSchema.d.ts.map +1 -1
- package/dist/generate/graphqlSchema.js +26 -59
- package/dist/generate/plugins/rw-typescript-resolvers/index.d.ts +4 -3
- package/dist/generate/plugins/rw-typescript-resolvers/index.d.ts.map +1 -1
- package/dist/generate/plugins/rw-typescript-resolvers/index.js +11 -35
- package/dist/generate/plugins/rw-typescript-resolvers/visitor.js +10 -31
- package/dist/generate/possibleTypes.js +19 -53
- package/dist/generate/templates.d.ts.map +1 -1
- package/dist/generate/templates.js +14 -42
- package/dist/generate/trustedDocuments.js +13 -48
- package/dist/generate/typeDefinitions.d.ts +2 -2
- package/dist/generate/typeDefinitions.d.ts.map +1 -1
- package/dist/generate/typeDefinitions.js +83 -123
- package/dist/generate/types.js +0 -16
- package/dist/generate/watch.js +55 -63
- package/dist/gql.js +16 -42
- package/dist/index.d.ts +8 -8
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +13 -47
- package/dist/jsx.d.ts.map +1 -1
- package/dist/jsx.js +7 -40
- package/dist/jsxAttributeValue.js +2 -26
- package/dist/project.js +21 -58
- package/dist/routes.d.ts +1 -1
- package/dist/routes.d.ts.map +1 -1
- package/dist/routes.js +12 -48
- package/dist/ts2js.d.ts +1 -1
- package/dist/ts2js.js +33 -73
- package/dist/validateSchema.js +19 -47
- package/package.json +91 -31
|
@@ -0,0 +1,346 @@
|
|
|
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"), 1);
|
|
38
|
+
var import_path = __toESM(require("path"), 1);
|
|
39
|
+
var addPlugin = __toESM(require("@graphql-codegen/add"), 1);
|
|
40
|
+
var import_cli = require("@graphql-codegen/cli");
|
|
41
|
+
var import_core = require("@graphql-codegen/core");
|
|
42
|
+
var typescriptPlugin = __toESM(require("@graphql-codegen/typescript"), 1);
|
|
43
|
+
var typescriptOperations = __toESM(require("@graphql-codegen/typescript-operations"), 1);
|
|
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"), 1);
|
|
48
|
+
var import_graphql = require("graphql");
|
|
49
|
+
var import_project_config = require("@cedarjs/project-config");
|
|
50
|
+
var import_project = require("../project.js");
|
|
51
|
+
var rwTypescriptResolvers = __toESM(require("./plugins/rw-typescript-resolvers/index.js"), 1);
|
|
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
|
+
let localPrisma;
|
|
205
|
+
if (hasGenerated) {
|
|
206
|
+
const cacheBuster = `?t=${Date.now()}`;
|
|
207
|
+
const prismaClientPath = import_path.default.resolve(
|
|
208
|
+
process.cwd(),
|
|
209
|
+
"node_modules/.prisma/client/index.js"
|
|
210
|
+
);
|
|
211
|
+
const { default: freshPrisma } = await import(`file://${prismaClientPath}${cacheBuster}`);
|
|
212
|
+
localPrisma = freshPrisma;
|
|
213
|
+
} else {
|
|
214
|
+
const { default: packagePrisma } = await import("@prisma/client");
|
|
215
|
+
localPrisma = packagePrisma;
|
|
216
|
+
}
|
|
217
|
+
if (!localPrisma.ModelName) {
|
|
218
|
+
if (hasGenerated) {
|
|
219
|
+
return { ModelName: {} };
|
|
220
|
+
} else {
|
|
221
|
+
import_execa.default.sync("yarn rw prisma generate", { shell: true });
|
|
222
|
+
return getPrismaClient(true);
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
return localPrisma;
|
|
226
|
+
}
|
|
227
|
+
async function getPrismaModels() {
|
|
228
|
+
const localPrisma = await getPrismaClient();
|
|
229
|
+
const prismaModels = localPrisma.ModelName;
|
|
230
|
+
if (prismaModels.RW_DataMigration) {
|
|
231
|
+
delete prismaModels.RW_DataMigration;
|
|
232
|
+
}
|
|
233
|
+
return prismaModels;
|
|
234
|
+
}
|
|
235
|
+
async function getPluginConfig(side) {
|
|
236
|
+
const prismaModels = await getPrismaModels();
|
|
237
|
+
Object.keys(prismaModels).forEach((key) => {
|
|
238
|
+
prismaModels[key] = `MergePrismaWithSdlTypes<Prisma${key}, MakeRelationsOptional<${key}, AllMappedModels>, AllMappedModels>`;
|
|
239
|
+
});
|
|
240
|
+
const scalars = {
|
|
241
|
+
// We need these, otherwise these scalars are mapped to any
|
|
242
|
+
BigInt: "number",
|
|
243
|
+
// @Note: DateTime fields can be valid Date-strings, or the Date object in the api side. They're always strings on the web side.
|
|
244
|
+
DateTime: side === 1 /* WEB */ ? "string" : "Date | string",
|
|
245
|
+
Date: side === 1 /* WEB */ ? "string" : "Date | string",
|
|
246
|
+
JSON: "Prisma.JsonValue",
|
|
247
|
+
JSONObject: "Prisma.JsonObject",
|
|
248
|
+
Time: side === 1 /* WEB */ ? "string" : "Date | string",
|
|
249
|
+
Byte: "Buffer"
|
|
250
|
+
};
|
|
251
|
+
const config = (0, import_project_config.getConfig)();
|
|
252
|
+
if (config.graphql.includeScalars.File) {
|
|
253
|
+
scalars.File = "File";
|
|
254
|
+
}
|
|
255
|
+
const pluginConfig = {
|
|
256
|
+
makeResolverTypeCallable: true,
|
|
257
|
+
namingConvention: "keep",
|
|
258
|
+
// to allow camelCased query names
|
|
259
|
+
scalars,
|
|
260
|
+
// prevent type names being PetQueryQuery, RW generators already append
|
|
261
|
+
// Query/Mutation/etc
|
|
262
|
+
omitOperationSuffix: true,
|
|
263
|
+
showUnusedMappers: false,
|
|
264
|
+
customResolverFn: getResolverFnType(),
|
|
265
|
+
mappers: prismaModels,
|
|
266
|
+
avoidOptionals: {
|
|
267
|
+
// We do this, so that service tests can call resolvers without doing a null check
|
|
268
|
+
// see https://github.com/redwoodjs/redwood/pull/6222#issuecomment-1230156868
|
|
269
|
+
// Look at type or source https://shrtm.nu/2BA0 for possible config, not well documented
|
|
270
|
+
resolvers: true
|
|
271
|
+
},
|
|
272
|
+
contextType: `@cedarjs/graphql-server/dist/types#RedwoodGraphQLContext`
|
|
273
|
+
};
|
|
274
|
+
return pluginConfig;
|
|
275
|
+
}
|
|
276
|
+
const getResolverFnType = () => {
|
|
277
|
+
const tsConfig = (0, import_project.getTsConfigs)();
|
|
278
|
+
if (tsConfig.api?.compilerOptions?.strict) {
|
|
279
|
+
return `(
|
|
280
|
+
args: TArgs,
|
|
281
|
+
obj?: { root: TParent; context: TContext; info: GraphQLResolveInfo }
|
|
282
|
+
) => TResult | Promise<TResult>`;
|
|
283
|
+
} else {
|
|
284
|
+
return `(
|
|
285
|
+
args?: TArgs,
|
|
286
|
+
obj?: { root: TParent; context: TContext; info: GraphQLResolveInfo }
|
|
287
|
+
) => TResult | Promise<TResult>`;
|
|
288
|
+
}
|
|
289
|
+
};
|
|
290
|
+
const printMappedModelsPlugin = {
|
|
291
|
+
plugin: (schema, _documents, config) => {
|
|
292
|
+
const sdlTypesWhichAreMapped = Object.values(schema.getTypeMap()).filter((type) => {
|
|
293
|
+
return type.astNode?.kind === import_graphql.Kind.OBJECT_TYPE_DEFINITION;
|
|
294
|
+
}).filter((objectDefType) => {
|
|
295
|
+
const modelName = objectDefType.astNode?.name.value;
|
|
296
|
+
return modelName && modelName in config.mappers;
|
|
297
|
+
}).map((objectDefType) => objectDefType.astNode?.name.value);
|
|
298
|
+
return `type MaybeOrArrayOfMaybe<T> = T | Maybe<T> | Maybe<T>[];
|
|
299
|
+
type AllMappedModels = MaybeOrArrayOfMaybe<${sdlTypesWhichAreMapped.join(
|
|
300
|
+
" | "
|
|
301
|
+
)}>`;
|
|
302
|
+
}
|
|
303
|
+
};
|
|
304
|
+
function getCodegenOptions(documents, config, extraPlugins) {
|
|
305
|
+
const plugins = [
|
|
306
|
+
{ typescript: { enumsAsTypes: true } },
|
|
307
|
+
...extraPlugins.map((plugin) => ({ [plugin.name]: plugin.options }))
|
|
308
|
+
];
|
|
309
|
+
const pluginMap = {
|
|
310
|
+
typescript: typescriptPlugin,
|
|
311
|
+
...extraPlugins.reduce(
|
|
312
|
+
(acc, cur) => ({ ...acc, [cur.name]: cur.codegenPlugin }),
|
|
313
|
+
{}
|
|
314
|
+
)
|
|
315
|
+
};
|
|
316
|
+
const options = {
|
|
317
|
+
// The typescript plugin returns a string instead of writing to a file, so
|
|
318
|
+
// `filename` is not used
|
|
319
|
+
filename: "",
|
|
320
|
+
// `schemaAst` is used instead of `schema` if `schemaAst` is defined, and
|
|
321
|
+
// `schema` isn't. In the source for GenerateOptions they have this
|
|
322
|
+
// comment:
|
|
323
|
+
// Remove schemaAst and change schema to GraphQLSchema in the next major
|
|
324
|
+
// version
|
|
325
|
+
// When that happens we'll have have to remove our `schema` line, and
|
|
326
|
+
// rename `schemaAst` to `schema`
|
|
327
|
+
schema: void 0,
|
|
328
|
+
schemaAst: (0, import_load.loadSchemaSync)((0, import_project_config.getPaths)().generated.schema, {
|
|
329
|
+
loaders: [new import_graphql_file_loader.GraphQLFileLoader()],
|
|
330
|
+
sort: true
|
|
331
|
+
}),
|
|
332
|
+
documents,
|
|
333
|
+
config,
|
|
334
|
+
plugins,
|
|
335
|
+
pluginMap,
|
|
336
|
+
pluginContext: {}
|
|
337
|
+
};
|
|
338
|
+
return options;
|
|
339
|
+
}
|
|
340
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
341
|
+
0 && (module.exports = {
|
|
342
|
+
generateTypeDefGraphQLApi,
|
|
343
|
+
generateTypeDefGraphQLWeb,
|
|
344
|
+
getLoadDocumentsOptions,
|
|
345
|
+
getResolverFnType
|
|
346
|
+
});
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"graphqlSchema.d.ts","sourceRoot":"","sources":["../../../src/generate/graphqlSchema.ts"],"names":[],"mappings":"AAuBA,eAAO,MAAM,qBAAqB;;;iBAyDP,MAAM;eAAS,OAAO;;EAyEhD,CAAA"}
|
|
@@ -0,0 +1,154 @@
|
|
|
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"), 1);
|
|
35
|
+
var import_core = require("@graphql-codegen/core");
|
|
36
|
+
var schemaAstPlugin = __toESM(require("@graphql-codegen/schema-ast"), 1);
|
|
37
|
+
var import_code_file_loader = require("@graphql-tools/code-file-loader");
|
|
38
|
+
var import_load = require("@graphql-tools/load");
|
|
39
|
+
var import_internals = __toESM(require("@prisma/internals"), 1);
|
|
40
|
+
var import_ansis = __toESM(require("ansis"), 1);
|
|
41
|
+
var import_graphql = require("graphql");
|
|
42
|
+
var import_termi_link = require("termi-link");
|
|
43
|
+
var import_graphql_server = require("@cedarjs/graphql-server");
|
|
44
|
+
var import_project_config = require("@cedarjs/project-config");
|
|
45
|
+
const { getSchema } = import_internals.default;
|
|
46
|
+
const generateGraphQLSchema = async () => {
|
|
47
|
+
const redwoodProjectPaths = (0, import_project_config.getPaths)();
|
|
48
|
+
const redwoodProjectConfig = (0, import_project_config.getConfig)();
|
|
49
|
+
const schemaPointerMap = {
|
|
50
|
+
[(0, import_graphql.print)(import_graphql_server.rootSchema.schema)]: {},
|
|
51
|
+
"graphql/**/*.sdl.{js,ts}": {},
|
|
52
|
+
"directives/**/*.{js,ts}": {},
|
|
53
|
+
"subscriptions/**/*.{js,ts}": {}
|
|
54
|
+
};
|
|
55
|
+
for (const [name, schema] of Object.entries(import_graphql_server.rootSchema.scalarSchemas)) {
|
|
56
|
+
if (redwoodProjectConfig.graphql.includeScalars[name]) {
|
|
57
|
+
schemaPointerMap[(0, import_graphql.print)(schema)] = {};
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
if ((0, import_project_config.resolveFile)(`${(0, import_project_config.getPaths)().api.src}/server`)) {
|
|
61
|
+
try {
|
|
62
|
+
const { liveDirectiveTypeDefs } = await import("@cedarjs/realtime");
|
|
63
|
+
schemaPointerMap[liveDirectiveTypeDefs] = {};
|
|
64
|
+
} catch (error) {
|
|
65
|
+
if (error.code !== "ERR_MODULE_NOT_FOUND") {
|
|
66
|
+
throw error;
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
const loadSchemaConfig = {
|
|
71
|
+
assumeValidSDL: true,
|
|
72
|
+
sort: true,
|
|
73
|
+
convertExtensions: true,
|
|
74
|
+
includeSources: true,
|
|
75
|
+
cwd: redwoodProjectPaths.api.src,
|
|
76
|
+
schema: Object.keys(schemaPointerMap),
|
|
77
|
+
generates: {
|
|
78
|
+
[redwoodProjectPaths.generated.schema]: {
|
|
79
|
+
plugins: ["schema-ast"]
|
|
80
|
+
}
|
|
81
|
+
},
|
|
82
|
+
silent: false,
|
|
83
|
+
errorsOnly: false,
|
|
84
|
+
pluginContext: {},
|
|
85
|
+
loaders: [new import_code_file_loader.CodeFileLoader()]
|
|
86
|
+
};
|
|
87
|
+
let loadedSchema;
|
|
88
|
+
const errors = [];
|
|
89
|
+
try {
|
|
90
|
+
loadedSchema = await (0, import_load.loadSchema)(schemaPointerMap, loadSchemaConfig);
|
|
91
|
+
} catch (e) {
|
|
92
|
+
if (e instanceof Error) {
|
|
93
|
+
const match = e.message.match(/Unknown type: "(\w+)"/);
|
|
94
|
+
const name = match?.[1];
|
|
95
|
+
const schemaPrisma = (await getSchema(redwoodProjectPaths.api.dbSchema)).toString();
|
|
96
|
+
const errorObject = {
|
|
97
|
+
message: `Schema loading failed. ${e.message}`,
|
|
98
|
+
error: e
|
|
99
|
+
};
|
|
100
|
+
errors.push(errorObject);
|
|
101
|
+
if (name && schemaPrisma.includes(`model ${name}`)) {
|
|
102
|
+
errorObject.message = [
|
|
103
|
+
errorObject.message,
|
|
104
|
+
"",
|
|
105
|
+
` ${import_ansis.default.bgYellow(` ${import_ansis.default.black.bold("Heads up")} `)}`,
|
|
106
|
+
"",
|
|
107
|
+
import_ansis.default.yellow(
|
|
108
|
+
` It looks like you have a ${name} model in your Prisma schema.`
|
|
109
|
+
),
|
|
110
|
+
import_ansis.default.yellow(
|
|
111
|
+
` If it's part of a relation, you may have to generate SDL or scaffolding for ${name} too.`
|
|
112
|
+
),
|
|
113
|
+
import_ansis.default.yellow(
|
|
114
|
+
` So, if you haven't done that yet, ignore this error message and run the SDL or scaffold generator for ${name} now.`
|
|
115
|
+
),
|
|
116
|
+
"",
|
|
117
|
+
import_ansis.default.yellow(
|
|
118
|
+
` See the ${(0, import_termi_link.terminalLink)(
|
|
119
|
+
"Troubleshooting Generators",
|
|
120
|
+
"https://redwoodjs.com/docs/schema-relations#troubleshooting-generators"
|
|
121
|
+
)} section in our docs for more help.`
|
|
122
|
+
)
|
|
123
|
+
].join("\n");
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
const options = {
|
|
128
|
+
config: {},
|
|
129
|
+
// no extra config needed for merged schema file generation
|
|
130
|
+
plugins: [{ "schema-ast": {} }],
|
|
131
|
+
pluginMap: { "schema-ast": schemaAstPlugin },
|
|
132
|
+
schema: {},
|
|
133
|
+
schemaAst: loadedSchema,
|
|
134
|
+
filename: redwoodProjectPaths.generated.schema,
|
|
135
|
+
documents: []
|
|
136
|
+
};
|
|
137
|
+
if (loadedSchema) {
|
|
138
|
+
try {
|
|
139
|
+
const schema = await (0, import_core.codegen)(options);
|
|
140
|
+
import_fs.default.writeFileSync(redwoodProjectPaths.generated.schema, schema);
|
|
141
|
+
return { schemaPath: redwoodProjectPaths.generated.schema, errors };
|
|
142
|
+
} catch (e) {
|
|
143
|
+
errors.push({
|
|
144
|
+
message: `GraphQL Schema codegen failed`,
|
|
145
|
+
error: e
|
|
146
|
+
});
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
return { schemaPath: "", errors };
|
|
150
|
+
};
|
|
151
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
152
|
+
0 && (module.exports = {
|
|
153
|
+
generateGraphQLSchema
|
|
154
|
+
});
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { Types, PluginFunction } from '@graphql-codegen/plugin-helpers';
|
|
2
|
+
import type { TypeScriptResolversPluginConfig } from '@graphql-codegen/typescript-resolvers';
|
|
3
|
+
import { RwTypeScriptResolversVisitor } from './visitor.js';
|
|
4
|
+
export declare const plugin: PluginFunction<TypeScriptResolversPluginConfig, Types.ComplexPluginOutput>;
|
|
5
|
+
export { RwTypeScriptResolversVisitor };
|
|
6
|
+
export type { TypeScriptResolversPluginConfig };
|
|
7
|
+
//# 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,KAAK,EAAE,+BAA+B,EAAE,MAAM,uCAAuC,CAAA;AAI5F,OAAO,EAAE,4BAA4B,EAAE,MAAM,cAAc,CAAA;AAE3D,eAAO,MAAM,MAAM,EAAE,cAAc,CACjC,+BAA+B,EAC/B,KAAK,CAAC,mBAAmB,CAgF1B,CAAA;AAED,OAAO,EAAE,4BAA4B,EAAE,CAAA;AACvC,YAAY,EAAE,+BAA+B,EAAE,CAAA"}
|
|
@@ -0,0 +1,65 @@
|
|
|
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
|
+
plugin: () => plugin
|
|
23
|
+
});
|
|
24
|
+
module.exports = __toCommonJS(rw_typescript_resolvers_exports);
|
|
25
|
+
var import_plugin_helpers = require("@graphql-codegen/plugin-helpers");
|
|
26
|
+
var import_typescript_resolvers = require("@graphql-codegen/typescript-resolvers");
|
|
27
|
+
var import_visitor = require("./visitor.js");
|
|
28
|
+
const plugin = (schema, _documents, config) => {
|
|
29
|
+
const visitor = new import_visitor.RwTypeScriptResolversVisitor(config, schema);
|
|
30
|
+
const visitorResult = (0, import_plugin_helpers.oldVisit)((0, import_plugin_helpers.getCachedDocumentNodeFromSchema)(schema), {
|
|
31
|
+
leave: visitor
|
|
32
|
+
});
|
|
33
|
+
const { prepend, content } = (0, import_typescript_resolvers.plugin)(schema, [], config);
|
|
34
|
+
prepend.push(`export type OptArgsResolverFn<TResult, TParent = {}, TContext = {}, TArgs = {}> = (
|
|
35
|
+
args?: TArgs,
|
|
36
|
+
obj?: { root: TParent; context: TContext; info: GraphQLResolveInfo }
|
|
37
|
+
) => TResult | Promise<TResult>
|
|
38
|
+
|
|
39
|
+
export type RequiredResolverFn<TResult, TParent = {}, TContext = {}, TArgs = {}> = (
|
|
40
|
+
args: TArgs,
|
|
41
|
+
obj: { root: TParent; context: TContext; info: GraphQLResolveInfo }
|
|
42
|
+
) => TResult | Promise<TResult>`);
|
|
43
|
+
const splitContent = content.split("\n");
|
|
44
|
+
const visitorResultStart = splitContent.indexOf(
|
|
45
|
+
visitorResult.definitions.filter((d) => typeof d === "string")[0].split("\n")[0]
|
|
46
|
+
);
|
|
47
|
+
const splitRootResolver = visitor.getRootResolver().split("\n");
|
|
48
|
+
const visitorResultEnd = splitContent.findIndex(
|
|
49
|
+
(line, index) => line === splitRootResolver[0] && splitContent[index + 1] === splitRootResolver[1]
|
|
50
|
+
);
|
|
51
|
+
const newContent = [
|
|
52
|
+
...splitContent.slice(0, visitorResultStart),
|
|
53
|
+
...visitorResult.definitions.filter((d) => typeof d === "string"),
|
|
54
|
+
...splitContent.slice(visitorResultEnd)
|
|
55
|
+
];
|
|
56
|
+
return {
|
|
57
|
+
prepend,
|
|
58
|
+
content: newContent.join("\n")
|
|
59
|
+
};
|
|
60
|
+
};
|
|
61
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
62
|
+
0 && (module.exports = {
|
|
63
|
+
RwTypeScriptResolversVisitor,
|
|
64
|
+
plugin
|
|
65
|
+
});
|
|
@@ -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"}
|