joist-graphql-codegen 0.1.536 → 1.0.0
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/build/generateEnumDetailResolvers.d.ts +2 -2
- package/build/generateEnumDetailResolvers.js +9 -6
- package/build/generateEnumDetailResolvers.js.map +1 -1
- package/build/generateEnumsGraphql.d.ts +2 -2
- package/build/generateEnumsGraphql.js +10 -5
- package/build/generateEnumsGraphql.js.map +1 -1
- package/build/generateGraphqlCodegen.d.ts +2 -2
- package/build/generateGraphqlCodegen.js +3 -4
- package/build/generateGraphqlCodegen.js.map +1 -1
- package/build/generateGraphqlCodegen.test.js +1 -1
- package/build/generateGraphqlCodegen.test.js.map +1 -1
- package/build/generateGraphqlSchemaFiles.js +82 -34
- package/build/generateGraphqlSchemaFiles.js.map +1 -1
- package/build/generateGraphqlSchemaFiles.test.js +177 -9
- package/build/generateGraphqlSchemaFiles.test.js.map +1 -1
- package/build/generateObjectResolvers.d.ts +12 -0
- package/build/generateObjectResolvers.js +58 -0
- package/build/generateObjectResolvers.js.map +1 -0
- package/build/generateSaveResolvers.d.ts +12 -0
- package/build/generateSaveResolvers.js +64 -0
- package/build/generateSaveResolvers.js.map +1 -0
- package/build/graphqlUtils.d.ts +17 -1
- package/build/graphqlUtils.js +68 -14
- package/build/graphqlUtils.js.map +1 -1
- package/build/history.js +3 -3
- package/build/history.js.map +1 -1
- package/build/index.d.ts +4 -2
- package/build/index.js +40 -7
- package/build/index.js.map +1 -1
- package/build/utils.d.ts +1 -0
- package/build/utils.js +15 -2
- package/build/utils.js.map +1 -1
- package/package.json +24 -11
- package/jest.config.js +0 -10
- package/package.json.bak +0 -25
- package/src/generateEnumDetailResolvers.ts +0 -31
- package/src/generateEnumsGraphql.ts +0 -20
- package/src/generateGraphqlCodegen.test.ts +0 -18
- package/src/generateGraphqlCodegen.ts +0 -39
- package/src/generateGraphqlSchemaFiles.test.ts +0 -225
- package/src/generateGraphqlSchemaFiles.ts +0 -154
- package/src/graphqlUtils.ts +0 -134
- package/src/history.ts +0 -19
- package/src/index.ts +0 -19
- package/src/utils.ts +0 -41
- package/tsconfig.json +0 -22
- package/tsconfig.tsbuildinfo +0 -5731
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import { CodeGenFile,
|
|
1
|
+
import { CodeGenFile, EnumMetadata } from "joist-codegen";
|
|
2
2
|
/** Generates a `src/resolvers/enumResolvers.ts` with a resolver for each of our domain's "enum detail" types. */
|
|
3
|
-
export declare function generateEnumDetailResolvers(enums:
|
|
3
|
+
export declare function generateEnumDetailResolvers(enums: EnumMetadata): CodeGenFile;
|
|
@@ -9,18 +9,21 @@ const pluralize_1 = __importDefault(require("pluralize"));
|
|
|
9
9
|
const ts_poet_1 = require("ts-poet");
|
|
10
10
|
/** Generates a `src/resolvers/enumResolvers.ts` with a resolver for each of our domain's "enum detail" types. */
|
|
11
11
|
function generateEnumDetailResolvers(enums) {
|
|
12
|
-
const enumNames = Object.
|
|
13
|
-
const resolvers =
|
|
14
|
-
const type = ts_poet_1.imp(`${pluralize_1.default(name)}@src/entities`);
|
|
15
|
-
return ts_poet_1.code `
|
|
12
|
+
const enumNames = Object.values(enums).map(({ name }) => name);
|
|
13
|
+
const resolvers = Object.values(enums).map(({ name, extraPrimitives }) => {
|
|
14
|
+
const type = (0, ts_poet_1.imp)(`${(0, pluralize_1.default)(name)}@src/entities`);
|
|
15
|
+
return (0, ts_poet_1.code) `
|
|
16
16
|
${name}Detail: {
|
|
17
17
|
code: (root) => root,
|
|
18
18
|
name: (root) => ${type}.getByCode(root).name,
|
|
19
|
+
${extraPrimitives
|
|
20
|
+
.map((p) => (0, change_case_1.camelCase)(p.columnName))
|
|
21
|
+
.map((fieldName) => (0, ts_poet_1.code) `${fieldName}: (root) => ${type}.getByCode(root).${fieldName},`)}
|
|
19
22
|
},
|
|
20
23
|
`;
|
|
21
24
|
});
|
|
22
|
-
const Resolvers = ts_poet_1.imp("Resolvers@src/generated/graphql-types");
|
|
23
|
-
const contents = ts_poet_1.code `
|
|
25
|
+
const Resolvers = (0, ts_poet_1.imp)("Resolvers@src/generated/graphql-types");
|
|
26
|
+
const contents = (0, ts_poet_1.code) `
|
|
24
27
|
type EnumDetails = ${enumNames.map((n) => `"${n}Detail"`).join(" | ")};
|
|
25
28
|
|
|
26
29
|
export const enumResolvers: Pick<${Resolvers}, EnumDetails> = {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generateEnumDetailResolvers.js","sourceRoot":"","sources":["../src/generateEnumDetailResolvers.ts"],"names":[],"mappings":";;;;;;AAAA,
|
|
1
|
+
{"version":3,"file":"generateEnumDetailResolvers.js","sourceRoot":"","sources":["../src/generateEnumDetailResolvers.ts"],"names":[],"mappings":";;;;;;AAAA,6CAAwC;AAExC,0DAAkC;AAClC,qCAAoC;AAEpC,iHAAiH;AACjH,SAAgB,2BAA2B,CAAC,KAAmB;IAC7D,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC;IAE/D,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,eAAe,EAAE,EAAE,EAAE;QACvE,MAAM,IAAI,GAAG,IAAA,aAAG,EAAC,GAAG,IAAA,mBAAS,EAAC,IAAI,CAAC,eAAe,CAAC,CAAC;QACpD,OAAO,IAAA,cAAI,EAAA;QACP,IAAI;;0BAEc,IAAI;UACpB,eAAe;aACd,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAA,uBAAS,EAAC,CAAC,CAAC,UAAU,CAAC,CAAC;aACnC,GAAG,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,IAAA,cAAI,EAAA,GAAG,SAAS,eAAe,IAAI,oBAAoB,SAAS,GAAG,CAAC;;KAE7F,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,MAAM,SAAS,GAAG,IAAA,aAAG,EAAC,uCAAuC,CAAC,CAAC;IAE/D,MAAM,QAAQ,GAAG,IAAA,cAAI,EAAA;yBACE,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC;;uCAElC,SAAS;QACxC,SAAS;;GAEd,CAAC;IAEF,OAAO,EAAE,IAAI,EAAE,+BAA+B,EAAE,SAAS,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;AAC9E,CAAC;AA3BD,kEA2BC"}
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import { CodeGenFile,
|
|
1
|
+
import { CodeGenFile, EnumMetadata } from "joist-codegen";
|
|
2
2
|
/** Generates a `schema/enums.graphql` with GQL enums that match all of our domain enums. */
|
|
3
|
-
export declare function generateEnumsGraphql(enums:
|
|
3
|
+
export declare function generateEnumsGraphql(enums: EnumMetadata): Promise<CodeGenFile>;
|
|
@@ -5,16 +5,21 @@ const change_case_1 = require("change-case");
|
|
|
5
5
|
const graphqlUtils_1 = require("./graphqlUtils");
|
|
6
6
|
/** Generates a `schema/enums.graphql` with GQL enums that match all of our domain enums. */
|
|
7
7
|
async function generateEnumsGraphql(enums) {
|
|
8
|
-
const contents = Object.
|
|
9
|
-
.map((
|
|
10
|
-
const name = change_case_1.pascalCase(_name);
|
|
8
|
+
const contents = Object.values(enums)
|
|
9
|
+
.map(({ name, rows, extraPrimitives }) => {
|
|
11
10
|
const enumDecl = `enum ${name} { ${rows.map((r) => r.code).join(" ")} }`;
|
|
12
|
-
const detailDecl = `type ${name}Detail { code: ${name}! name: String!
|
|
11
|
+
const detailDecl = `type ${name}Detail { code: ${name}! name: String! ${extraPrimitives
|
|
12
|
+
// Not supporting jsonb columns in GraphQL enums for now...would be doable if we
|
|
13
|
+
// add a jsonb type --> GQL type mapping, or maybe even created that GQL type ourselves
|
|
14
|
+
// from a superstruct definition of the type.
|
|
15
|
+
.filter((p) => !(0, graphqlUtils_1.isJsonbColumn)(p))
|
|
16
|
+
.map((p) => `${(0, change_case_1.camelCase)(p.columnName)}: ${(0, graphqlUtils_1.mapTypescriptTypeToGraphQLType)(p.fieldName, p.fieldType)}!`)
|
|
17
|
+
.join(" ")} }`;
|
|
13
18
|
return [enumDecl, "", detailDecl, ""];
|
|
14
19
|
})
|
|
15
20
|
.flat()
|
|
16
21
|
.join("\n");
|
|
17
|
-
const formatted = await graphqlUtils_1.formatGraphQL(contents);
|
|
22
|
+
const formatted = await (0, graphqlUtils_1.formatGraphQL)(contents);
|
|
18
23
|
return { name: "../../schema/enums.graphql", overwrite: true, contents: formatted };
|
|
19
24
|
}
|
|
20
25
|
exports.generateEnumsGraphql = generateEnumsGraphql;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generateEnumsGraphql.js","sourceRoot":"","sources":["../src/generateEnumsGraphql.ts"],"names":[],"mappings":";;;AAAA,
|
|
1
|
+
{"version":3,"file":"generateEnumsGraphql.js","sourceRoot":"","sources":["../src/generateEnumsGraphql.ts"],"names":[],"mappings":";;;AAAA,6CAAwC;AAExC,iDAAwH;AAExH,4FAA4F;AACrF,KAAK,UAAU,oBAAoB,CAAC,KAAmB;IAC5D,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC;SAClC,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,eAAe,EAAE,EAAE,EAAE;QACvC,MAAM,QAAQ,GAAG,QAAQ,IAAI,MAAM,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC;QACzE,MAAM,UAAU,GAAG,QAAQ,IAAI,kBAAkB,IAAI,mBAAmB,eAAe;YACrF,gFAAgF;YAChF,uFAAuF;YACvF,6CAA6C;aAC5C,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,IAAA,4BAAa,EAAC,CAAC,CAAC,CAAC;aAChC,GAAG,CACF,CAAC,CAAC,EAAE,EAAE,CACJ,GAAG,IAAA,uBAAS,EAAC,CAAC,CAAC,UAAU,CAAC,KAAK,IAAA,6CAA8B,EAC3D,CAAC,CAAC,SAAS,EACX,CAAC,CAAC,SAAqC,CACxC,GAAG,CACP;aACA,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC;QACjB,OAAO,CAAC,QAAQ,EAAE,EAAE,EAAE,UAAU,EAAE,EAAE,CAAC,CAAC;IACxC,CAAC,CAAC;SACD,IAAI,EAAE;SACN,IAAI,CAAC,IAAI,CAAC,CAAC;IAEd,MAAM,SAAS,GAAG,MAAM,IAAA,4BAAa,EAAC,QAAQ,CAAC,CAAC;IAEhD,OAAO,EAAE,IAAI,EAAE,4BAA4B,EAAE,SAAS,EAAE,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,CAAC;AACtF,CAAC;AAzBD,oDAyBC"}
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import { CodeGenFile, EntityDbMetadata,
|
|
1
|
+
import { CodeGenFile, EntityDbMetadata, EnumMetadata } from "joist-codegen";
|
|
2
2
|
/** Generates a `graphql-codegen-joist.js` with the auto-generated mapped type/enum value settings. */
|
|
3
|
-
export declare function generateGraphqlCodegen(entities: EntityDbMetadata[], enums:
|
|
3
|
+
export declare function generateGraphqlCodegen(entities: EntityDbMetadata[], enums: EnumMetadata): CodeGenFile;
|
|
@@ -1,17 +1,16 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.generateGraphqlCodegen = void 0;
|
|
4
|
-
const change_case_1 = require("change-case");
|
|
5
4
|
const ts_poet_1 = require("ts-poet");
|
|
6
5
|
/** Generates a `graphql-codegen-joist.js` with the auto-generated mapped type/enum value settings. */
|
|
7
6
|
function generateGraphqlCodegen(entities, enums) {
|
|
8
|
-
const enumNames = Object.
|
|
7
|
+
const enumNames = Object.values(enums).map(({ name }) => name);
|
|
9
8
|
// Combine the entity mapped types and enum detail mapped types
|
|
10
9
|
const mappedTypes = sortObject(Object.fromEntries([
|
|
11
|
-
...entities.map(({ entity }) => [entity.name, `src/entities#${entity.idType.
|
|
10
|
+
...entities.map(({ entity }) => [entity.name, `src/entities#${entity.idType.symbol}`]),
|
|
12
11
|
...enumNames.map((name) => [`${name}Detail`, `src/entities#${name}`]),
|
|
13
12
|
]));
|
|
14
|
-
const contents = ts_poet_1.code `
|
|
13
|
+
const contents = (0, ts_poet_1.code) `
|
|
15
14
|
const mappers = {
|
|
16
15
|
${Object.entries(mappedTypes).map(([key, value]) => `${key}: "${value}",`)}
|
|
17
16
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generateGraphqlCodegen.js","sourceRoot":"","sources":["../src/generateGraphqlCodegen.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"generateGraphqlCodegen.js","sourceRoot":"","sources":["../src/generateGraphqlCodegen.ts"],"names":[],"mappings":";;;AACA,qCAA+B;AAE/B,sGAAsG;AACtG,SAAgB,sBAAsB,CAAC,QAA4B,EAAE,KAAmB;IACtF,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC;IAE/D,+DAA+D;IAC/D,MAAM,WAAW,GAAG,UAAU,CAC5B,MAAM,CAAC,WAAW,CAAC;QACjB,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,IAAI,EAAE,gBAAgB,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;QACtF,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,GAAG,IAAI,QAAQ,EAAE,gBAAgB,IAAI,EAAE,CAAC,CAAC;KACtE,CAAC,CACH,CAAC;IAEF,MAAM,QAAQ,GAAG,IAAA,cAAI,EAAA;;QAEf,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,MAAM,KAAK,IAAI,CAAC;;;;QAIxE,SAAS,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,IAAI,mBAAmB,IAAI,IAAI,CAAC;;;;GAIhE,CAAC;IAEF,OAAO,EAAE,IAAI,EAAE,gCAAgC,EAAE,SAAS,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;AAC/E,CAAC;AAxBD,wDAwBC;AAED,SAAS,UAAU,CAAmB,GAAM;IAC1C,OAAO,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC;SACpB,IAAI,EAAE;SACN,MAAM,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;QACnB,GAAG,CAAC,GAAc,CAAC,GAAG,GAAG,CAAC,GAAc,CAAC,CAAC;QAC1C,OAAO,GAAG,CAAC;IACb,CAAC,EAAE,EAAc,CAAM,CAAC;AAC5B,CAAC"}
|
|
@@ -5,7 +5,7 @@ describe("generateGraphqlCodegen", () => {
|
|
|
5
5
|
it("creates a json file", () => {
|
|
6
6
|
const entities = [];
|
|
7
7
|
const enums = {};
|
|
8
|
-
const file = generateGraphqlCodegen_1.generateGraphqlCodegen(entities, enums);
|
|
8
|
+
const file = (0, generateGraphqlCodegen_1.generateGraphqlCodegen)(entities, enums);
|
|
9
9
|
expect(file.contents.toString()).toMatchInlineSnapshot(`
|
|
10
10
|
"const mappers = {};
|
|
11
11
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generateGraphqlCodegen.test.js","sourceRoot":"","sources":["../src/generateGraphqlCodegen.test.ts"],"names":[],"mappings":";;AACA,qEAAkE;AAElE,QAAQ,CAAC,wBAAwB,EAAE,GAAG,EAAE;IACtC,EAAE,CAAC,qBAAqB,EAAE,GAAG,EAAE;QAC7B,MAAM,QAAQ,GAAuB,EAAE,CAAC;QACxC,MAAM,KAAK,
|
|
1
|
+
{"version":3,"file":"generateGraphqlCodegen.test.js","sourceRoot":"","sources":["../src/generateGraphqlCodegen.test.ts"],"names":[],"mappings":";;AACA,qEAAkE;AAElE,QAAQ,CAAC,wBAAwB,EAAE,GAAG,EAAE;IACtC,EAAE,CAAC,qBAAqB,EAAE,GAAG,EAAE;QAC7B,MAAM,QAAQ,GAAuB,EAAE,CAAC;QACxC,MAAM,KAAK,GAAiB,EAAE,CAAC;QAC/B,MAAM,IAAI,GAAG,IAAA,+CAAsB,EAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;QACrD,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC,CAAC,qBAAqB,CAAC;;;;;;;KAOtD,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -17,30 +17,54 @@ async function generateGraphqlSchemaFiles(fs, entities) {
|
|
|
17
17
|
// Generate all of the "ideal" fields based solely on the domain model
|
|
18
18
|
const fields = [
|
|
19
19
|
...createEntityFields(entities),
|
|
20
|
+
...createSaveMutation(entities),
|
|
20
21
|
...createSaveEntityInputFields(entities),
|
|
21
22
|
...createSaveEntityResultFields(entities),
|
|
22
23
|
];
|
|
24
|
+
const unions = createPolymorphicUnions(entities);
|
|
23
25
|
// Load the history and filter out only "new" / not-yet-added-to-.graphql fields
|
|
24
|
-
const history = await history_1.loadHistory(fs);
|
|
25
|
-
const
|
|
26
|
-
|
|
26
|
+
const history = await (0, history_1.loadHistory)(fs);
|
|
27
|
+
const newEntries = [
|
|
28
|
+
...fields.filter(({ objectName, fieldName }) => !history[objectName]?.includes(fieldName)),
|
|
29
|
+
...unions.filter(({ objectName, types }) => {
|
|
30
|
+
const set = new Set(history[objectName] ?? []);
|
|
31
|
+
return !(set.size === types.length && types.every((type) => set.has(type)));
|
|
32
|
+
}),
|
|
33
|
+
];
|
|
34
|
+
if (newEntries.length === 0) {
|
|
27
35
|
return;
|
|
28
36
|
}
|
|
29
37
|
// Update the `.graphql` files with our new types/fields
|
|
30
|
-
await Promise.all(Object.entries(joist_utils_1.groupBy(
|
|
31
|
-
return graphqlUtils_1.upsertIntoFile(fs, file, fields);
|
|
38
|
+
await Promise.all(Object.entries((0, joist_utils_1.groupBy)(newEntries, (f) => f.file)).map(([file, fields]) => {
|
|
39
|
+
return (0, graphqlUtils_1.upsertIntoFile)(fs, file, fields);
|
|
32
40
|
}));
|
|
33
41
|
// Record the current batch of fields back to the history file
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
42
|
+
newEntries.forEach((entry) => {
|
|
43
|
+
if (entry.objectType === "union") {
|
|
44
|
+
const { objectName, types } = entry;
|
|
45
|
+
history[objectName] = types;
|
|
46
|
+
}
|
|
47
|
+
else {
|
|
48
|
+
const { objectName, fieldName } = entry;
|
|
49
|
+
const fields = (history[objectName] = history[objectName] || []);
|
|
50
|
+
if (!fields.includes(fieldName)) {
|
|
51
|
+
fields.push(fieldName);
|
|
52
|
+
}
|
|
38
53
|
}
|
|
39
54
|
});
|
|
40
|
-
await history_1.writeHistory(fs, history);
|
|
55
|
+
await (0, history_1.writeHistory)(fs, history);
|
|
41
56
|
}
|
|
42
57
|
exports.generateGraphqlSchemaFiles = generateGraphqlSchemaFiles;
|
|
43
58
|
/** Make all of the fields for `type Author`, `type Book`, etc. */
|
|
59
|
+
function createPolymorphicUnions(entities) {
|
|
60
|
+
return entities.flatMap((e) => {
|
|
61
|
+
const file = fileName(e);
|
|
62
|
+
return e.polymorphics.map(({ fieldType, components }) => {
|
|
63
|
+
return { file, objectType: "union", objectName: fieldType, types: components.map((c) => c.otherEntity.name) };
|
|
64
|
+
});
|
|
65
|
+
});
|
|
66
|
+
}
|
|
67
|
+
/** Make all of the fields for `type Author`, `type Book`, etc. */
|
|
44
68
|
function createEntityFields(entities) {
|
|
45
69
|
return entities.flatMap((e) => {
|
|
46
70
|
const file = fileName(e);
|
|
@@ -48,12 +72,19 @@ function createEntityFields(entities) {
|
|
|
48
72
|
const objectName = e.entity.name;
|
|
49
73
|
const common = { file, objectType, objectName };
|
|
50
74
|
const id = { ...common, fieldName: "id", fieldType: "ID!" };
|
|
51
|
-
const primitives = e.primitives
|
|
52
|
-
|
|
75
|
+
const primitives = e.primitives
|
|
76
|
+
// jsonb columns have to be hand-mapped for now
|
|
77
|
+
.filter((p) => !(0, graphqlUtils_1.isJsonbColumn)(p))
|
|
78
|
+
.map(({ fieldName, fieldType: tsType, notNull }) => {
|
|
79
|
+
const fieldType = `${(0, graphqlUtils_1.mapTypescriptTypeToGraphQLType)(fieldName, tsType)}${maybeRequired(notNull)}`;
|
|
80
|
+
return { ...common, fieldName, fieldType };
|
|
81
|
+
});
|
|
82
|
+
const enums = e.enums.map(({ fieldName, enumType, notNull, isArray }) => {
|
|
83
|
+
const fieldType = isArray ? `[${enumType.symbol}!]!` : `${enumType.symbol}${maybeRequired(notNull)}`;
|
|
53
84
|
return { ...common, fieldName, fieldType };
|
|
54
85
|
});
|
|
55
|
-
const
|
|
56
|
-
const fieldType = `${enumType.
|
|
86
|
+
const pgEnums = e.pgEnums.map(({ fieldName, enumType, notNull }) => {
|
|
87
|
+
const fieldType = `${enumType.symbol}${maybeRequired(notNull)}`;
|
|
57
88
|
return { ...common, fieldName, fieldType };
|
|
58
89
|
});
|
|
59
90
|
const m2os = e.manyToOnes.map(({ fieldName, otherEntity, notNull }) => {
|
|
@@ -71,7 +102,27 @@ function createEntityFields(entities) {
|
|
|
71
102
|
const o2os = e.oneToOnes.map(({ fieldName, otherEntity }) => {
|
|
72
103
|
return { ...common, fieldName, fieldType: otherEntity.name };
|
|
73
104
|
});
|
|
74
|
-
|
|
105
|
+
const polys = e.polymorphics.map(({ fieldName, fieldType }) => {
|
|
106
|
+
return { ...common, fieldName, fieldType };
|
|
107
|
+
});
|
|
108
|
+
return [id, ...primitives, ...enums, ...pgEnums, ...m2os, ...o2ms, ...m2ms, ...o2os, ...polys];
|
|
109
|
+
});
|
|
110
|
+
}
|
|
111
|
+
/** Makes the `Mutations.save${entity}` placeholder. */
|
|
112
|
+
function createSaveMutation(entities) {
|
|
113
|
+
return entities.map((e) => {
|
|
114
|
+
const file = fileName(e);
|
|
115
|
+
const inputType = `Save${e.entity.name}Input`;
|
|
116
|
+
const outputType = `Save${e.entity.name}Result`;
|
|
117
|
+
return {
|
|
118
|
+
file,
|
|
119
|
+
objectType: "output",
|
|
120
|
+
objectName: "Mutation",
|
|
121
|
+
fieldName: `save${e.entity.name}`,
|
|
122
|
+
fieldType: `${outputType}!`,
|
|
123
|
+
argsString: `input: ${inputType}!`,
|
|
124
|
+
extends: true,
|
|
125
|
+
};
|
|
75
126
|
});
|
|
76
127
|
}
|
|
77
128
|
/** Make all of the fields for `type SaveAuthorInput`, `type SaveBookBook`, etc. */
|
|
@@ -82,17 +133,26 @@ function createSaveEntityInputFields(entities) {
|
|
|
82
133
|
const objectName = `Save${e.entity.name}Input`;
|
|
83
134
|
const common = { file, objectType, objectName };
|
|
84
135
|
const id = { ...common, fieldName: "id", fieldType: "ID" };
|
|
85
|
-
const primitives = e.primitives
|
|
86
|
-
|
|
136
|
+
const primitives = e.primitives
|
|
137
|
+
.filter((f) => f.derived === false)
|
|
138
|
+
.filter((p) => !(0, graphqlUtils_1.isJsonbColumn)(p))
|
|
139
|
+
.map(({ fieldName, fieldType: tsType }) => {
|
|
140
|
+
const fieldType = `${(0, graphqlUtils_1.mapTypescriptTypeToGraphQLType)(fieldName, tsType)}`;
|
|
87
141
|
return { ...common, fieldName, fieldType };
|
|
88
142
|
});
|
|
89
|
-
const enums = e.enums.map(({ fieldName, enumType }) => {
|
|
90
|
-
return { ...common, fieldName, fieldType: enumType.
|
|
143
|
+
const enums = e.enums.map(({ fieldName, enumType, isArray }) => {
|
|
144
|
+
return { ...common, fieldName, fieldType: isArray ? `[${enumType.symbol}!]` : enumType.symbol };
|
|
145
|
+
});
|
|
146
|
+
const pgEnums = e.pgEnums.map(({ fieldName, enumType }) => {
|
|
147
|
+
return { ...common, fieldName, fieldType: enumType.symbol };
|
|
91
148
|
});
|
|
92
149
|
const m2os = e.manyToOnes.map(({ fieldName }) => {
|
|
93
150
|
return { ...common, fieldName: `${fieldName}Id`, fieldType: "ID" };
|
|
94
151
|
});
|
|
95
|
-
|
|
152
|
+
const polys = e.polymorphics.map(({ fieldName }) => {
|
|
153
|
+
return { ...common, fieldName: `${fieldName}Id`, fieldType: "ID" };
|
|
154
|
+
});
|
|
155
|
+
return [id, ...primitives, ...enums, ...pgEnums, ...m2os, ...polys];
|
|
96
156
|
});
|
|
97
157
|
}
|
|
98
158
|
/** Makes the fields for `type SaveAuthorResult`, `type SaveBookResult`, etc. */
|
|
@@ -102,28 +162,16 @@ function createSaveEntityResultFields(entities) {
|
|
|
102
162
|
const { entity: { name }, } = e;
|
|
103
163
|
const objectType = "output";
|
|
104
164
|
const objectName = `Save${name}Result`;
|
|
105
|
-
const fieldName = change_case_1.camelCase(name);
|
|
165
|
+
const fieldName = (0, change_case_1.camelCase)(name);
|
|
106
166
|
const entity = { file, objectType, objectName, fieldName, fieldType: `${name}!` };
|
|
107
167
|
return [entity];
|
|
108
168
|
});
|
|
109
169
|
}
|
|
110
|
-
function mapFieldTypeToGraphQLType(type) {
|
|
111
|
-
switch (type) {
|
|
112
|
-
case "string":
|
|
113
|
-
return "String";
|
|
114
|
-
case "boolean":
|
|
115
|
-
return "Boolean";
|
|
116
|
-
case "number":
|
|
117
|
-
return "Int";
|
|
118
|
-
default:
|
|
119
|
-
return type;
|
|
120
|
-
}
|
|
121
|
-
}
|
|
122
170
|
function maybeRequired(notNull) {
|
|
123
171
|
return notNull ? "!" : "";
|
|
124
172
|
}
|
|
125
173
|
/** I.e. `Book` --> `books.graphql`. */
|
|
126
174
|
function fileName(e) {
|
|
127
|
-
return `${change_case_1.camelCase(e.entity.name)}.graphql`;
|
|
175
|
+
return `${(0, change_case_1.camelCase)(e.entity.name)}.graphql`;
|
|
128
176
|
}
|
|
129
177
|
//# sourceMappingURL=generateGraphqlSchemaFiles.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generateGraphqlSchemaFiles.js","sourceRoot":"","sources":["../src/generateGraphqlSchemaFiles.ts"],"names":[],"mappings":";;;AAAA,6CAAwC;AAExC,6CAAsC;
|
|
1
|
+
{"version":3,"file":"generateGraphqlSchemaFiles.js","sourceRoot":"","sources":["../src/generateGraphqlSchemaFiles.ts"],"names":[],"mappings":"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"}
|