joist-graphql-codegen 2.3.0-next.41 → 2.3.0-next.43

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 (125) hide show
  1. package/build/_virtual/_rolldown/runtime.cjs +23 -0
  2. package/build/generateEnumDetailResolvers.cjs +40 -0
  3. package/build/generateEnumDetailResolvers.cjs.map +1 -0
  4. package/build/generateEnumDetailResolvers.d.cts +8 -0
  5. package/build/generateEnumDetailResolvers.d.cts.map +1 -0
  6. package/build/generateEnumDetailResolvers.d.mts +8 -0
  7. package/build/generateEnumDetailResolvers.d.mts.map +1 -0
  8. package/build/generateEnumDetailResolvers.js +23 -23
  9. package/build/generateEnumDetailResolvers.js.map +1 -1
  10. package/build/generateEnumsGraphql.cjs +29 -0
  11. package/build/generateEnumsGraphql.cjs.map +1 -0
  12. package/build/generateEnumsGraphql.d.cts +8 -0
  13. package/build/generateEnumsGraphql.d.cts.map +1 -0
  14. package/build/generateEnumsGraphql.d.mts +8 -0
  15. package/build/generateEnumsGraphql.d.mts.map +1 -0
  16. package/build/generateEnumsGraphql.js +24 -27
  17. package/build/generateEnumsGraphql.js.map +1 -1
  18. package/build/generateGraphqlCodegen.cjs +54 -0
  19. package/build/generateGraphqlCodegen.cjs.map +1 -0
  20. package/build/generateGraphqlCodegen.d.cts +8 -0
  21. package/build/generateGraphqlCodegen.d.cts.map +1 -0
  22. package/build/generateGraphqlCodegen.d.mts +8 -0
  23. package/build/generateGraphqlCodegen.d.mts.map +1 -0
  24. package/build/generateGraphqlCodegen.js +28 -30
  25. package/build/generateGraphqlCodegen.js.map +1 -1
  26. package/build/generateGraphqlSchemaFiles.cjs +491 -0
  27. package/build/generateGraphqlSchemaFiles.cjs.map +1 -0
  28. package/build/{generateGraphqlSchemaFiles.d.ts → generateGraphqlSchemaFiles.d.cts} +6 -2
  29. package/build/generateGraphqlSchemaFiles.d.cts.map +1 -0
  30. package/build/generateGraphqlSchemaFiles.d.mts +15 -0
  31. package/build/generateGraphqlSchemaFiles.d.mts.map +1 -0
  32. package/build/generateGraphqlSchemaFiles.js +444 -286
  33. package/build/generateGraphqlSchemaFiles.js.map +1 -1
  34. package/build/generateObjectResolvers.cjs +70 -0
  35. package/build/generateObjectResolvers.cjs.map +1 -0
  36. package/build/{generateObjectResolvers.d.ts → generateObjectResolvers.d.cts} +5 -1
  37. package/build/generateObjectResolvers.d.cts.map +1 -0
  38. package/build/generateObjectResolvers.d.mts +17 -0
  39. package/build/generateObjectResolvers.d.mts.map +1 -0
  40. package/build/generateObjectResolvers.js +48 -38
  41. package/build/generateObjectResolvers.js.map +1 -1
  42. package/build/generateQueryPageResolvers.cjs +51 -0
  43. package/build/generateQueryPageResolvers.cjs.map +1 -0
  44. package/build/generateQueryPageResolvers.d.cts +8 -0
  45. package/build/generateQueryPageResolvers.d.cts.map +1 -0
  46. package/build/generateQueryPageResolvers.d.mts +8 -0
  47. package/build/generateQueryPageResolvers.d.mts.map +1 -0
  48. package/build/generateQueryPageResolvers.js +31 -35
  49. package/build/generateQueryPageResolvers.js.map +1 -1
  50. package/build/generateQueryResolvers.cjs +55 -0
  51. package/build/generateQueryResolvers.cjs.map +1 -0
  52. package/build/generateQueryResolvers.d.cts +10 -0
  53. package/build/generateQueryResolvers.d.cts.map +1 -0
  54. package/build/generateQueryResolvers.d.mts +10 -0
  55. package/build/generateQueryResolvers.d.mts.map +1 -0
  56. package/build/generateQueryResolvers.js +38 -36
  57. package/build/generateQueryResolvers.js.map +1 -1
  58. package/build/generateResolverUtils.cjs +36 -0
  59. package/build/generateResolverUtils.cjs.map +1 -0
  60. package/build/generateResolverUtils.d.cts +8 -0
  61. package/build/generateResolverUtils.d.cts.map +1 -0
  62. package/build/generateResolverUtils.d.mts +8 -0
  63. package/build/generateResolverUtils.d.mts.map +1 -0
  64. package/build/generateResolverUtils.js +25 -26
  65. package/build/generateResolverUtils.js.map +1 -1
  66. package/build/generateSaveResolvers.cjs +57 -0
  67. package/build/generateSaveResolvers.cjs.map +1 -0
  68. package/build/{generateSaveResolvers.d.ts → generateSaveResolvers.d.cts} +5 -1
  69. package/build/generateSaveResolvers.d.cts.map +1 -0
  70. package/build/generateSaveResolvers.d.mts +17 -0
  71. package/build/generateSaveResolvers.d.mts.map +1 -0
  72. package/build/generateSaveResolvers.js +39 -40
  73. package/build/generateSaveResolvers.js.map +1 -1
  74. package/build/graphqlUtils.cjs +160 -0
  75. package/build/graphqlUtils.cjs.map +1 -0
  76. package/build/graphqlUtils.d.cts +31 -0
  77. package/build/graphqlUtils.d.cts.map +1 -0
  78. package/build/graphqlUtils.d.mts +31 -0
  79. package/build/graphqlUtils.d.mts.map +1 -0
  80. package/build/graphqlUtils.js +120 -218
  81. package/build/graphqlUtils.js.map +1 -1
  82. package/build/history.cjs +25 -0
  83. package/build/history.cjs.map +1 -0
  84. package/build/history.d.cts +9 -0
  85. package/build/history.d.cts.map +1 -0
  86. package/build/history.d.mts +9 -0
  87. package/build/history.d.mts.map +1 -0
  88. package/build/history.js +17 -14
  89. package/build/history.js.map +1 -1
  90. package/build/index.cjs +57 -0
  91. package/build/index.cjs.map +1 -0
  92. package/build/index.d.cts +7 -0
  93. package/build/index.d.cts.map +1 -0
  94. package/build/index.d.mts +7 -0
  95. package/build/index.d.mts.map +1 -0
  96. package/build/index.js +48 -54
  97. package/build/index.js.map +1 -1
  98. package/build/testUtils.cjs +181 -0
  99. package/build/testUtils.cjs.map +1 -0
  100. package/build/testUtils.d.cts +20 -0
  101. package/build/testUtils.d.cts.map +1 -0
  102. package/build/testUtils.d.mts +20 -0
  103. package/build/testUtils.d.mts.map +1 -0
  104. package/build/testUtils.js +152 -158
  105. package/build/testUtils.js.map +1 -1
  106. package/build/utils.cjs +51 -0
  107. package/build/utils.cjs.map +1 -0
  108. package/build/utils.d.cts +16 -0
  109. package/build/utils.d.cts.map +1 -0
  110. package/build/utils.d.mts +16 -0
  111. package/build/utils.d.mts.map +1 -0
  112. package/build/utils.js +37 -49
  113. package/build/utils.js.map +1 -1
  114. package/package.json +28 -5
  115. package/build/generateEnumDetailResolvers.d.ts +0 -4
  116. package/build/generateEnumsGraphql.d.ts +0 -4
  117. package/build/generateGraphqlCodegen.d.ts +0 -4
  118. package/build/generateQueryPageResolvers.d.ts +0 -4
  119. package/build/generateQueryResolvers.d.ts +0 -6
  120. package/build/generateResolverUtils.d.ts +0 -4
  121. package/build/graphqlUtils.d.ts +0 -27
  122. package/build/history.d.ts +0 -5
  123. package/build/index.d.ts +0 -3
  124. package/build/testUtils.d.ts +0 -24
  125. package/build/utils.d.ts +0 -12
@@ -1 +1 @@
1
- {"version":3,"file":"graphqlUtils.js","sourceRoot":"","sources":["../src/graphqlUtils.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"graphqlUtils.js","names":[],"sources":["../src/graphqlUtils.ts"],"sourcesContent":["import {\n type DocumentNode,\n type InputObjectTypeDefinitionNode,\n type ObjectTypeDefinitionNode,\n type ObjectTypeExtensionNode,\n type UnionTypeDefinitionNode,\n parse,\n print,\n visit,\n} from \"graphql\";\nimport { type PrimitiveField, type PrimitiveTypescriptType } from \"joist-codegen\";\nimport { groupBy } from \"joist-utils\";\nimport prettier, { type Options, resolveConfig } from \"prettier\";\nimport { Code, Import } from \"ts-poet\";\n\nimport { type Fs } from \"./utils.ts\";\n\n/** A type for the fields we want to add to `*.graphql` files. */\nexport type GqlField = {\n file: string;\n objectType: \"input\" | \"output\";\n objectName: string;\n fieldName: string;\n fieldType: string;\n // Not a true AST, but just `foo: Bar, zaz: number`\n argsString?: string;\n extends?: boolean;\n};\n\nexport type GqlUnion = { file: string; objectName: string; objectType: \"union\"; types: string[] };\n\nexport type GqlEntry = GqlField | GqlUnion;\n\n/** Given a `file` and `fields` to go in it (for potentially different objects), upserts into the existing types. */\nexport async function upsertIntoFile(fs: Fs, file: string, fields: GqlEntry[]): Promise<void> {\n // Group the fields by each individual object (either input types or output types)\n const byObjectName = groupBy(fields, (f) => f.objectName);\n const existingDoc = parseOrNewEmptyDoc(await fs.load(file));\n\n // For each type, create a \"new\" / ideal definition that exactly matches the domain model\n const newDocs = Object.entries(byObjectName).map(([objectName, fields]) => {\n const [entry] = fields;\n return [\n objectName,\n entry.objectType === \"union\"\n ? createUnionDoc(entry as GqlUnion)\n : createFieldDoc(objectName, fields as GqlField[]),\n ] as [string, DocumentNode];\n });\n\n // Merge each `newDoc` object definition into the file's existing types\n const content = print(mergeDocs(existingDoc, newDocs));\n const formatted = await formatGraphQL(content);\n\n await fs.save(file, formatted);\n}\n\nlet prettierPromise: Promise<Options | null>;\n\nexport async function formatGraphQL(content: string): Promise<string> {\n const prettierConfig = await (prettierPromise ??= resolveConfig(\"./\"));\n return prettier.format(content, {\n parser: \"graphql\",\n ...prettierConfig,\n plugins: [],\n });\n}\n\n/**\n * Creates a new AST DocumentNode for the given object + field definitions.\n *\n * This leverages `parse` to do the dirty work of taking an \"easy for us to create\"\n * string of GraphQL SDL and turning it into a \"pita to create by hand\" AST\n * of object / field / type / etc. nodes.\n */\nfunction createFieldDoc(objectName: string, fields: GqlField[]): DocumentNode {\n const [{ objectType }] = fields;\n const type = objectType === \"output\" ? \"type\" : objectType;\n const maybeArgs = (f: GqlField) => (f.argsString ? `(${f.argsString})` : \"\");\n const maybeExtends = fields.some((f: GqlField) => f.extends) ? \"extend \" : \"\";\n const source = `${maybeExtends}${type} ${objectName} {\n ${fields.map((f) => `${f.fieldName}${maybeArgs(f)}: ${f.fieldType}`)}\n }`;\n return parse(source);\n}\n\nfunction createUnionDoc(union: GqlUnion): DocumentNode {\n const { objectName, types } = union;\n return parse(`union ${objectName} = ${types.join(\" | \")}`);\n}\n\nfunction parseOrNewEmptyDoc(content: string | undefined): DocumentNode {\n return content ? parse(content) : newEmptyDocument();\n}\n\nfunction newEmptyDocument(): DocumentNode {\n // I can't figure out how to `parse(\"\")`, i.e. create an empty DocumentNode, so pretend\n // to make a `type Foo` but then throw it away so that DocumentNode ends up empty.\n return visit(parse(\"type Foo\"), {\n ObjectTypeDefinition() {\n return null;\n },\n });\n}\n\n/**\n * Merges a given `newType` from `newDoc` into `existingDoc*.\n *\n * There are existing \"merge schema\" libraries/tools out there, but we want to be very purposeful\n * about keeping the existing SDL and this is really not too bad because we're only stitching\n * ~two levels of the AST (document -> objects and object -> fields).\n *\n * We also cheat by using `createNewDoc` to get ASTs of the new content, so we don't have\n * to laboriously built up the ASTs by hand.\n */\nfunction mergeDocs(existingDoc: DocumentNode, newDocs: [string, DocumentNode][]): DocumentNode {\n // Now merged the two\n return visit(existingDoc, {\n // If the `type Book` does not exist yet, add it\n Document(node) {\n return {\n ...node,\n definitions: [\n ...node.definitions,\n ...newDocs\n .filter(([objectType]) => {\n return !node.definitions.some(\n (d) =>\n (d.kind === \"ObjectTypeDefinition\" ||\n d.kind === \"ObjectTypeExtension\" ||\n d.kind === \"InputObjectTypeDefinition\" ||\n d.kind === \"UnionTypeDefinition\") &&\n d.name.value === objectType,\n );\n })\n .flatMap(([, d]) => d.definitions),\n ].sort(byOperationExtensionsFirst),\n };\n },\n\n // If fields don't exist yet, add them\n ObjectTypeDefinition(node) {\n return mergeObjectTypeFields(node, newDocs);\n },\n\n ObjectTypeExtension(node) {\n return mergeObjectTypeFields(node, newDocs);\n },\n\n // If fields don't exist yet, add them\n InputObjectTypeDefinition(node) {\n const found = newDocs.find(([objectType]) => node.name.value === objectType);\n if (found) {\n const [, newDoc] = found;\n const existingFieldNames = (node.fields || []).map((f) => f.name.value);\n const newObjectType = newDoc.definitions[0] as InputObjectTypeDefinitionNode;\n return {\n ...node,\n fields: [\n ...(node.fields || []),\n ...(newObjectType.fields || []).filter((f) => !existingFieldNames.includes(f.name.value)),\n ],\n };\n }\n return node;\n },\n\n UnionTypeDefinition(node) {\n const found = newDocs.find(([objectType]) => node.name.value === objectType);\n if (found) {\n const [, newDoc] = found;\n const [definition] = newDoc.definitions as UnionTypeDefinitionNode[];\n return {\n ...node,\n types: definition.types,\n };\n }\n return node;\n },\n });\n}\n\n/** Merges generated fields into an existing `type` or `extend type`. */\nfunction mergeObjectTypeFields<T extends ObjectTypeDefinitionNode | ObjectTypeExtensionNode>(\n node: T,\n newDocs: [string, DocumentNode][],\n): T {\n const found = newDocs.find(([objectType]) => node.name.value === objectType);\n if (found) {\n const [, newDoc] = found;\n const existingFieldNames = (node.fields || []).map((f) => f.name.value);\n const newObjectType = newDoc.definitions[0] as ObjectTypeDefinitionNode;\n return {\n ...node,\n fields: [\n ...(node.fields || []),\n ...(newObjectType.fields || []).filter((f) => !existingFieldNames.includes(f.name.value)),\n ],\n };\n }\n return node;\n}\n\n/** Keeps the primary operation extensions at the top of generated schema files. */\nfunction byOperationExtensionsFirst(\n a: DocumentNode[\"definitions\"][number],\n b: DocumentNode[\"definitions\"][number],\n): number {\n return operationExtensionRank(a) - operationExtensionRank(b);\n}\n\n/** Returns the priority for placing generated operation extensions before types/inputs. */\nfunction operationExtensionRank(definition: DocumentNode[\"definitions\"][number]): number {\n if (definition.kind === \"ObjectTypeExtension\" && definition.name.value === \"Query\") return 0;\n if (definition.kind === \"ObjectTypeExtension\" && definition.name.value === \"Mutation\") return 1;\n return 2;\n}\n\nexport type GraphQLType = \"BigInt\" | \"Boolean\" | \"String\" | \"Int\" | \"Date\" | \"DateTime\" | string;\n\nexport type SupportedTypescriptTypes = Exclude<PrimitiveTypescriptType, \"Object\" | Import>;\n\nexport function mapTypescriptTypeToGraphQLType(\n fieldName: string,\n type: PrimitiveTypescriptType | Import | Code,\n): GraphQLType | undefined {\n if (type === \"string\") {\n return \"String\";\n } else if (type === \"boolean\") {\n return \"Boolean\";\n } else if (type === \"number\") {\n return \"Int\";\n } else if (type === \"bigint\") {\n return \"BigInt\";\n } else if (type instanceof Code) {\n const rawType = type.toCodeString([]);\n if (rawType.startsWith(\"Date\")) {\n // Legacy javascript Date doesn't have different `date` vs. `datetime` types but GraphQL does\n // so lean on the `..._at` suffix convention to know \"DateTime\".\n return fieldName.endsWith(\"At\") ? \"DateTime\" : \"Date\";\n } else if (rawType.startsWith(\"Temporal.ZonedDateTime\")) {\n return \"DateTime\";\n } else if (rawType.startsWith(\"Temporal.PlainDateTime\")) {\n return \"DateTime\";\n } else if (rawType.startsWith(\"Temporal.PlainDate\")) {\n return \"Date\";\n } else {\n // If this is a fancy import like a superstruct/something, we can't guess what it will be in GraphQL\n return undefined;\n }\n } else if (type instanceof Import) {\n // If this is a fancy import like a superstruct/something, we can't guess what it will be in GraphQL\n return undefined;\n } else {\n // Anything else like `jsonb` (which shows up as `Object`) is also unlikely to be a valid\n // GraphQL type, and doing things like `someField: Object` w/o predefined scalar types will\n // cause GraphQL parsing errors.\n return undefined;\n }\n}\n\nexport function isJsonbColumn(p: PrimitiveField) {\n return p.fieldType === \"Object\" || p.fieldType instanceof Import;\n}\n"],"mappings":"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"}
@@ -0,0 +1,25 @@
1
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
+ const require_utils = require("./utils.cjs");
3
+ let fs = require("fs");
4
+ let _dprint_formatter = require("@dprint/formatter");
5
+ let _dprint_json = require("@dprint/json");
6
+ //#region src/history.ts
7
+ const jsonFormatter = (0, _dprint_formatter.createFromBuffer)((0, fs.readFileSync)((0, _dprint_json.getPath)()));
8
+ const configPath = ".history.json";
9
+ async function loadHistory(fs$1) {
10
+ const content = await fs$1.load(configPath);
11
+ return content ? JSON.parse(content.toString()) : {};
12
+ }
13
+ async function writeHistory(fs$2, history) {
14
+ const input = JSON.stringify(require_utils.sortKeys(history));
15
+ const content = jsonFormatter.formatText({
16
+ filePath: "test.json",
17
+ fileText: input
18
+ });
19
+ await fs$2.save(configPath, content);
20
+ }
21
+ //#endregion
22
+ exports.loadHistory = loadHistory;
23
+ exports.writeHistory = writeHistory;
24
+
25
+ //# sourceMappingURL=history.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"history.cjs","names":["createFromBuffer","readFileSync","getPath","fs","sortKeys"],"sources":["../src/history.ts"],"sourcesContent":["import { readFileSync } from \"fs\";\n\nimport { createFromBuffer } from \"@dprint/formatter\";\nimport { getPath } from \"@dprint/json\";\n\nimport { type Fs, sortKeys } from \"./utils.ts\";\n\n/** A map from GraphQL object type name -> its field names that have already been scaffolded. */\nexport type History = Record<string, string[]>;\n\nconst jsonFormatter = createFromBuffer(readFileSync(getPath()));\nconst configPath = \".history.json\";\n\nexport async function loadHistory(fs: Fs): Promise<History> {\n const content = await fs.load(configPath);\n return content ? JSON.parse(content.toString()) : {};\n}\n\nexport async function writeHistory(fs: Fs, history: History): Promise<void> {\n const input = JSON.stringify(sortKeys(history));\n const content = jsonFormatter.formatText({ filePath: \"test.json\", fileText: input });\n await fs.save(configPath, content);\n}\n"],"mappings":";;;;;;AAUA,MAAM,iBAAA,GAAgBA,kBAAAA,iBAAAA,EAAAA,GAAiBC,GAAAA,aAAAA,EAAAA,GAAaC,aAAAA,QAAAA,CAAQ,CAAC,CAAC;AAC9D,MAAM,aAAa;AAEnB,eAAsB,YAAY,MAA0B;CAC1D,MAAM,UAAU,MAAMC,KAAG,KAAK,UAAU;CACxC,OAAO,UAAU,KAAK,MAAM,QAAQ,SAAS,CAAC,IAAI,CAAC;AACrD;AAEA,eAAsB,aAAa,MAAQ,SAAiC;CAC1E,MAAM,QAAQ,KAAK,UAAUC,cAAAA,SAAS,OAAO,CAAC;CAC9C,MAAM,UAAU,cAAc,WAAW;EAAE,UAAU;EAAa,UAAU;CAAM,CAAC;CACnF,MAAMD,KAAG,KAAK,YAAY,OAAO;AACnC"}
@@ -0,0 +1,9 @@
1
+ import { Fs } from "./utils.cjs";
2
+ //#region src/history.d.ts
3
+ /** A map from GraphQL object type name -> its field names that have already been scaffolded. */
4
+ type History = Record<string, string[]>;
5
+ declare function loadHistory(fs: Fs): Promise<History>;
6
+ declare function writeHistory(fs: Fs, history: History): Promise<void>;
7
+ //#endregion
8
+ export { History, loadHistory, writeHistory };
9
+ //# sourceMappingURL=history.d.cts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"history.d.cts","names":[],"sources":["../src/history.ts"],"mappings":";;;KAQY,UAAU;iBAKA,YAAY,IAAI,KAAK,QAAQ;iBAK7B,aAAa,IAAI,IAAI,SAAS,UAAU"}
@@ -0,0 +1,9 @@
1
+ import { Fs } from "./utils.mjs";
2
+ //#region src/history.d.ts
3
+ /** A map from GraphQL object type name -> its field names that have already been scaffolded. */
4
+ type History = Record<string, string[]>;
5
+ declare function loadHistory(fs: Fs): Promise<History>;
6
+ declare function writeHistory(fs: Fs, history: History): Promise<void>;
7
+ //#endregion
8
+ export { History, loadHistory, writeHistory };
9
+ //# sourceMappingURL=history.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"history.d.mts","names":[],"sources":["../src/history.ts"],"mappings":";;;KAQY,UAAU;iBAKA,YAAY,IAAI,KAAK,QAAQ;iBAK7B,aAAa,IAAI,IAAI,SAAS,UAAU"}
package/build/history.js CHANGED
@@ -1,20 +1,23 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.loadHistory = loadHistory;
4
- exports.writeHistory = writeHistory;
5
- const fs_1 = require("fs");
6
- const formatter_1 = require("@dprint/formatter");
7
- const json_1 = require("@dprint/json");
8
- const utils_1 = require("./utils");
9
- const jsonFormatter = (0, formatter_1.createFromBuffer)((0, fs_1.readFileSync)((0, json_1.getPath)()));
1
+ import { sortKeys } from "./utils.js";
2
+ import { readFileSync } from "fs";
3
+ import { createFromBuffer } from "@dprint/formatter";
4
+ import { getPath } from "@dprint/json";
5
+ //#region src/history.ts
6
+ const jsonFormatter = createFromBuffer(readFileSync(getPath()));
10
7
  const configPath = ".history.json";
11
8
  async function loadHistory(fs) {
12
- const content = await fs.load(configPath);
13
- return content ? JSON.parse(content.toString()) : {};
9
+ const content = await fs.load(configPath);
10
+ return content ? JSON.parse(content.toString()) : {};
14
11
  }
15
12
  async function writeHistory(fs, history) {
16
- const input = JSON.stringify((0, utils_1.sortKeys)(history));
17
- const content = jsonFormatter.formatText({ filePath: "test.json", fileText: input });
18
- await fs.save(configPath, content);
13
+ const input = JSON.stringify(sortKeys(history));
14
+ const content = jsonFormatter.formatText({
15
+ filePath: "test.json",
16
+ fileText: input
17
+ });
18
+ await fs.save(configPath, content);
19
19
  }
20
+ //#endregion
21
+ export { loadHistory, writeHistory };
22
+
20
23
  //# sourceMappingURL=history.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"history.js","sourceRoot":"","sources":["../src/history.ts"],"names":[],"mappings":";;;;AAAA,2BAAkC;AAElC,iDAAqD;AACrD,uCAAuC;AAEvC,mCAAuC;AAKvC,MAAM,aAAa,GAAG,IAAA,4BAAgB,EAAC,IAAA,iBAAY,EAAC,IAAA,cAAO,GAAE,CAAC,CAAC,CAAC;AAChE,MAAM,UAAU,GAAG,eAAe,CAAC;AAE5B,KAAK,sBAAsB,EAAM;IACtC,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IAC1C,OAAO,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;AACvD,CAAC;AAEM,KAAK,uBAAuB,EAAM,EAAE,OAAgB;IACzD,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,IAAA,gBAAQ,EAAC,OAAO,CAAC,CAAC,CAAC;IAChD,MAAM,OAAO,GAAG,aAAa,CAAC,UAAU,CAAC,EAAE,QAAQ,EAAE,WAAW,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAC;IACrF,MAAM,EAAE,CAAC,IAAI,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;AACrC,CAAC"}
1
+ {"version":3,"file":"history.js","names":[],"sources":["../src/history.ts"],"sourcesContent":["import { readFileSync } from \"fs\";\n\nimport { createFromBuffer } from \"@dprint/formatter\";\nimport { getPath } from \"@dprint/json\";\n\nimport { type Fs, sortKeys } from \"./utils.ts\";\n\n/** A map from GraphQL object type name -> its field names that have already been scaffolded. */\nexport type History = Record<string, string[]>;\n\nconst jsonFormatter = createFromBuffer(readFileSync(getPath()));\nconst configPath = \".history.json\";\n\nexport async function loadHistory(fs: Fs): Promise<History> {\n const content = await fs.load(configPath);\n return content ? JSON.parse(content.toString()) : {};\n}\n\nexport async function writeHistory(fs: Fs, history: History): Promise<void> {\n const input = JSON.stringify(sortKeys(history));\n const content = jsonFormatter.formatText({ filePath: \"test.json\", fileText: input });\n await fs.save(configPath, content);\n}\n"],"mappings":";;;;;AAUA,MAAM,gBAAgB,iBAAiB,aAAa,QAAQ,CAAC,CAAC;AAC9D,MAAM,aAAa;AAEnB,eAAsB,YAAY,IAA0B;CAC1D,MAAM,UAAU,MAAM,GAAG,KAAK,UAAU;CACxC,OAAO,UAAU,KAAK,MAAM,QAAQ,SAAS,CAAC,IAAI,CAAC;AACrD;AAEA,eAAsB,aAAa,IAAQ,SAAiC;CAC1E,MAAM,QAAQ,KAAK,UAAU,SAAS,OAAO,CAAC;CAC9C,MAAM,UAAU,cAAc,WAAW;EAAE,UAAU;EAAa,UAAU;CAAM,CAAC;CACnF,MAAM,GAAG,KAAK,YAAY,OAAO;AACnC"}
@@ -0,0 +1,57 @@
1
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
+ const require_utils = require("./utils.cjs");
3
+ const require_generateEnumDetailResolvers = require("./generateEnumDetailResolvers.cjs");
4
+ const require_generateEnumsGraphql = require("./generateEnumsGraphql.cjs");
5
+ const require_generateGraphqlCodegen = require("./generateGraphqlCodegen.cjs");
6
+ const require_history = require("./history.cjs");
7
+ const require_generateGraphqlSchemaFiles = require("./generateGraphqlSchemaFiles.cjs");
8
+ const require_generateObjectResolvers = require("./generateObjectResolvers.cjs");
9
+ const require_generateQueryPageResolvers = require("./generateQueryPageResolvers.cjs");
10
+ const require_generateQueryResolvers = require("./generateQueryResolvers.cjs");
11
+ const require_generateResolverUtils = require("./generateResolverUtils.cjs");
12
+ const require_generateSaveResolvers = require("./generateSaveResolvers.cjs");
13
+ require("joist-codegen");
14
+ require("ts-poet");
15
+ //#region src/index.ts
16
+ async function run(config, dbMeta) {
17
+ const fs = require_utils.newFsImpl("./schema");
18
+ await require_generateGraphqlSchemaFiles.generateGraphqlSchemaFiles(config, fs, dbMeta);
19
+ const { entities, enums } = dbMeta;
20
+ const conditionalResolvers = [
21
+ ...require_generateObjectResolvers.generateObjectResolvers(config, entities),
22
+ ...require_generateSaveResolvers.generateSaveResolvers(config, dbMeta),
23
+ ...require_generateQueryResolvers.generateQueryResolvers(config, dbMeta),
24
+ ...require_generateQueryPageResolvers.generateQueryPageResolvers(config, dbMeta),
25
+ ...require_generateResolverUtils.generateResolverUtils(config)
26
+ ];
27
+ await writeOnce(config, require_utils.newFsImpl("./src"), conditionalResolvers);
28
+ return [
29
+ await require_generateEnumsGraphql.generateEnumsGraphql(enums),
30
+ require_generateEnumDetailResolvers.generateEnumDetailResolvers(config, enums),
31
+ require_generateGraphqlCodegen.generateGraphqlCodegen(config, entities, enums)
32
+ ];
33
+ }
34
+ /** Conditionally outputs files only once, so we don't re-spam unwanted/unneeded files. */
35
+ async function writeOnce(config, fs, files) {
36
+ const history = await require_history.loadHistory(fs);
37
+ const filesHistory = history["files"] = history["files"] || [];
38
+ const esmExt = require_utils.getImportExtension(config);
39
+ await Promise.all(files.map(async (file) => {
40
+ if (!filesHistory.includes(file.name)) {
41
+ if (!await fs.exists(file.name)) await fs.save(file.name, contentToString(file, esmExt));
42
+ filesHistory.push(file.name);
43
+ }
44
+ }));
45
+ await require_history.writeHistory(fs, history);
46
+ }
47
+ function contentToString(file, esmExt) {
48
+ if (typeof file.contents === "string") return file.contents;
49
+ return file.contents.toString({
50
+ path: file.name,
51
+ importExtensions: esmExt || false
52
+ });
53
+ }
54
+ //#endregion
55
+ exports.run = run;
56
+
57
+ //# sourceMappingURL=index.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.cjs","names":["newFsImpl","generateGraphqlSchemaFiles","generateObjectResolvers","generateSaveResolvers","generateQueryResolvers","generateQueryPageResolvers","generateResolverUtils","generateEnumsGraphql","generateEnumDetailResolvers","generateGraphqlCodegen","loadHistory","getImportExtension","writeHistory"],"sources":["../src/index.ts"],"sourcesContent":["import { type Config, type DbMetadata } from \"joist-codegen\";\nimport { type CodegenFile } from \"ts-poet\";\n\nimport { generateEnumDetailResolvers } from \"./generateEnumDetailResolvers.ts\";\nimport { generateEnumsGraphql } from \"./generateEnumsGraphql.ts\";\nimport { generateGraphqlCodegen } from \"./generateGraphqlCodegen.ts\";\nimport { generateGraphqlSchemaFiles } from \"./generateGraphqlSchemaFiles.ts\";\nimport { generateObjectResolvers } from \"./generateObjectResolvers.ts\";\nimport { generateQueryPageResolvers } from \"./generateQueryPageResolvers.ts\";\nimport { generateQueryResolvers } from \"./generateQueryResolvers.ts\";\nimport { generateResolverUtils } from \"./generateResolverUtils.ts\";\nimport { generateSaveResolvers } from \"./generateSaveResolvers.ts\";\nimport { loadHistory, writeHistory } from \"./history.ts\";\nimport { type Fs, getImportExtension, newFsImpl } from \"./utils.ts\";\n\nexport async function run(config: Config, dbMeta: DbMetadata): Promise<CodegenFile[]> {\n const fs = newFsImpl(\"./schema\");\n\n // We upsert directly into schema files so we don't use the usual `CodeGenFile[]` return type;\n await generateGraphqlSchemaFiles(config, fs, dbMeta);\n\n // We use the history file to ensure we only generate these once\n const { entities, enums } = dbMeta;\n const conditionalResolvers = [\n ...generateObjectResolvers(config, entities),\n ...generateSaveResolvers(config, dbMeta),\n ...generateQueryResolvers(config, dbMeta),\n ...generateQueryPageResolvers(config, dbMeta),\n ...generateResolverUtils(config),\n ];\n const srcFs = newFsImpl(\"./src\");\n await writeOnce(config, srcFs, conditionalResolvers);\n\n return [\n await generateEnumsGraphql(enums),\n generateEnumDetailResolvers(config, enums),\n generateGraphqlCodegen(config, entities, enums),\n ];\n}\n\n/** Conditionally outputs files only once, so we don't re-spam unwanted/unneeded files. */\nasync function writeOnce(config: Config, fs: Fs, files: CodegenFile[]) {\n // We sneak a `files` entry into the history map, which is usually `type -> fields[]`\n const history = await loadHistory(fs);\n const filesHistory = (history[\"files\"] = history[\"files\"] || []);\n const esmExt = getImportExtension(config);\n await Promise.all(\n files.map(async (file) => {\n if (!filesHistory.includes(file.name)) {\n // Even if it's not in the history, make sure it doesn't already exist on disk\n if (!(await fs.exists(file.name))) {\n await fs.save(file.name, contentToString(file, esmExt));\n }\n filesHistory.push(file.name);\n }\n }),\n );\n await writeHistory(fs, history);\n}\n\nfunction contentToString(file: CodegenFile, esmExt: \"ts\" | \"js\" | null): string {\n if (typeof file.contents === \"string\") {\n return file.contents;\n }\n return file.contents.toString({\n path: file.name,\n importExtensions: esmExt || false,\n });\n}\n"],"mappings":";;;;;;;;;;;;;;;AAeA,eAAsB,IAAI,QAAgB,QAA4C;CACpF,MAAM,KAAKA,cAAAA,UAAU,UAAU;CAG/B,MAAMC,mCAAAA,2BAA2B,QAAQ,IAAI,MAAM;CAGnD,MAAM,EAAE,UAAU,UAAU;CAC5B,MAAM,uBAAuB;EAC3B,GAAGC,gCAAAA,wBAAwB,QAAQ,QAAQ;EAC3C,GAAGC,8BAAAA,sBAAsB,QAAQ,MAAM;EACvC,GAAGC,+BAAAA,uBAAuB,QAAQ,MAAM;EACxC,GAAGC,mCAAAA,2BAA2B,QAAQ,MAAM;EAC5C,GAAGC,8BAAAA,sBAAsB,MAAM;CACjC;CAEA,MAAM,UAAU,QADFN,cAAAA,UAAU,OACI,GAAG,oBAAoB;CAEnD,OAAO;EACL,MAAMO,6BAAAA,qBAAqB,KAAK;EAChCC,oCAAAA,4BAA4B,QAAQ,KAAK;EACzCC,+BAAAA,uBAAuB,QAAQ,UAAU,KAAK;CAChD;AACF;;AAGA,eAAe,UAAU,QAAgB,IAAQ,OAAsB;CAErE,MAAM,UAAU,MAAMC,gBAAAA,YAAY,EAAE;CACpC,MAAM,eAAgB,QAAQ,WAAW,QAAQ,YAAY,CAAC;CAC9D,MAAM,SAASC,cAAAA,mBAAmB,MAAM;CACxC,MAAM,QAAQ,IACZ,MAAM,IAAI,OAAO,SAAS;EACxB,IAAI,CAAC,aAAa,SAAS,KAAK,IAAI,GAAG;GAErC,IAAI,CAAE,MAAM,GAAG,OAAO,KAAK,IAAI,GAC7B,MAAM,GAAG,KAAK,KAAK,MAAM,gBAAgB,MAAM,MAAM,CAAC;GAExD,aAAa,KAAK,KAAK,IAAI;EAC7B;CACF,CAAC,CACH;CACA,MAAMC,gBAAAA,aAAa,IAAI,OAAO;AAChC;AAEA,SAAS,gBAAgB,MAAmB,QAAoC;CAC9E,IAAI,OAAO,KAAK,aAAa,UAC3B,OAAO,KAAK;CAEd,OAAO,KAAK,SAAS,SAAS;EAC5B,MAAM,KAAK;EACX,kBAAkB,UAAU;CAC9B,CAAC;AACH"}
@@ -0,0 +1,7 @@
1
+ import { Config, DbMetadata } from "joist-codegen";
2
+ import { CodegenFile } from "ts-poet";
3
+ //#region src/index.d.ts
4
+ declare function run(config: Config, dbMeta: DbMetadata): Promise<CodegenFile[]>;
5
+ //#endregion
6
+ export { run };
7
+ //# sourceMappingURL=index.d.cts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.cts","names":[],"sources":["../src/index.ts"],"mappings":";;;iBAesB,IAAI,QAAQ,QAAQ,QAAQ,aAAa,QAAQ"}
@@ -0,0 +1,7 @@
1
+ import { Config, DbMetadata } from "joist-codegen";
2
+ import { CodegenFile } from "ts-poet";
3
+ //#region src/index.d.ts
4
+ declare function run(config: Config, dbMeta: DbMetadata): Promise<CodegenFile[]>;
5
+ //#endregion
6
+ export { run };
7
+ //# sourceMappingURL=index.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.mts","names":[],"sources":["../src/index.ts"],"mappings":";;;iBAesB,IAAI,QAAQ,QAAQ,QAAQ,aAAa,QAAQ"}
package/build/index.js CHANGED
@@ -1,62 +1,56 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.run = run;
4
- const generateEnumDetailResolvers_1 = require("./generateEnumDetailResolvers");
5
- const generateEnumsGraphql_1 = require("./generateEnumsGraphql");
6
- const generateGraphqlCodegen_1 = require("./generateGraphqlCodegen");
7
- const generateGraphqlSchemaFiles_1 = require("./generateGraphqlSchemaFiles");
8
- const generateObjectResolvers_1 = require("./generateObjectResolvers");
9
- const generateQueryPageResolvers_1 = require("./generateQueryPageResolvers");
10
- const generateQueryResolvers_1 = require("./generateQueryResolvers");
11
- const generateResolverUtils_1 = require("./generateResolverUtils");
12
- const generateSaveResolvers_1 = require("./generateSaveResolvers");
13
- const history_1 = require("./history");
14
- const utils_1 = require("./utils");
1
+ import { getImportExtension, newFsImpl } from "./utils.js";
2
+ import { generateEnumDetailResolvers } from "./generateEnumDetailResolvers.js";
3
+ import { generateEnumsGraphql } from "./generateEnumsGraphql.js";
4
+ import { generateGraphqlCodegen } from "./generateGraphqlCodegen.js";
5
+ import { loadHistory, writeHistory } from "./history.js";
6
+ import { generateGraphqlSchemaFiles } from "./generateGraphqlSchemaFiles.js";
7
+ import { generateObjectResolvers } from "./generateObjectResolvers.js";
8
+ import { generateQueryPageResolvers } from "./generateQueryPageResolvers.js";
9
+ import { generateQueryResolvers } from "./generateQueryResolvers.js";
10
+ import { generateResolverUtils } from "./generateResolverUtils.js";
11
+ import { generateSaveResolvers } from "./generateSaveResolvers.js";
12
+ import "joist-codegen";
13
+ import "ts-poet";
14
+ //#region src/index.ts
15
15
  async function run(config, dbMeta) {
16
- const fs = (0, utils_1.newFsImpl)("./schema");
17
- // We upsert directly into schema files so we don't use the usual `CodeGenFile[]` return type;
18
- await (0, generateGraphqlSchemaFiles_1.generateGraphqlSchemaFiles)(config, fs, dbMeta);
19
- // We use the history file to ensure we only generate these once
20
- const { entities, enums } = dbMeta;
21
- const conditionalResolvers = [
22
- ...(0, generateObjectResolvers_1.generateObjectResolvers)(config, entities),
23
- ...(0, generateSaveResolvers_1.generateSaveResolvers)(config, dbMeta),
24
- ...(0, generateQueryResolvers_1.generateQueryResolvers)(config, dbMeta),
25
- ...(0, generateQueryPageResolvers_1.generateQueryPageResolvers)(config, dbMeta),
26
- ...(0, generateResolverUtils_1.generateResolverUtils)(config),
27
- ];
28
- const srcFs = (0, utils_1.newFsImpl)("./src");
29
- await writeOnce(config, srcFs, conditionalResolvers);
30
- return [
31
- await (0, generateEnumsGraphql_1.generateEnumsGraphql)(enums),
32
- (0, generateEnumDetailResolvers_1.generateEnumDetailResolvers)(config, enums),
33
- (0, generateGraphqlCodegen_1.generateGraphqlCodegen)(config, entities, enums),
34
- ];
16
+ const fs = newFsImpl("./schema");
17
+ await generateGraphqlSchemaFiles(config, fs, dbMeta);
18
+ const { entities, enums } = dbMeta;
19
+ const conditionalResolvers = [
20
+ ...generateObjectResolvers(config, entities),
21
+ ...generateSaveResolvers(config, dbMeta),
22
+ ...generateQueryResolvers(config, dbMeta),
23
+ ...generateQueryPageResolvers(config, dbMeta),
24
+ ...generateResolverUtils(config)
25
+ ];
26
+ await writeOnce(config, newFsImpl("./src"), conditionalResolvers);
27
+ return [
28
+ await generateEnumsGraphql(enums),
29
+ generateEnumDetailResolvers(config, enums),
30
+ generateGraphqlCodegen(config, entities, enums)
31
+ ];
35
32
  }
36
33
  /** Conditionally outputs files only once, so we don't re-spam unwanted/unneeded files. */
37
34
  async function writeOnce(config, fs, files) {
38
- // We sneak a `files` entry into the history map, which is usually `type -> fields[]`
39
- const history = await (0, history_1.loadHistory)(fs);
40
- const filesHistory = (history["files"] = history["files"] || []);
41
- const esmExt = (0, utils_1.getImportExtension)(config);
42
- await Promise.all(files.map(async (file) => {
43
- if (!filesHistory.includes(file.name)) {
44
- // Even if it's not in the history, make sure it doesn't already exist on disk
45
- if (!(await fs.exists(file.name))) {
46
- await fs.save(file.name, contentToString(file, esmExt));
47
- }
48
- filesHistory.push(file.name);
49
- }
50
- }));
51
- await (0, history_1.writeHistory)(fs, history);
35
+ const history = await loadHistory(fs);
36
+ const filesHistory = history["files"] = history["files"] || [];
37
+ const esmExt = getImportExtension(config);
38
+ await Promise.all(files.map(async (file) => {
39
+ if (!filesHistory.includes(file.name)) {
40
+ if (!await fs.exists(file.name)) await fs.save(file.name, contentToString(file, esmExt));
41
+ filesHistory.push(file.name);
42
+ }
43
+ }));
44
+ await writeHistory(fs, history);
52
45
  }
53
46
  function contentToString(file, esmExt) {
54
- if (typeof file.contents === "string") {
55
- return file.contents;
56
- }
57
- return file.contents.toString({
58
- path: file.name,
59
- importExtensions: esmExt || false,
60
- });
47
+ if (typeof file.contents === "string") return file.contents;
48
+ return file.contents.toString({
49
+ path: file.name,
50
+ importExtensions: esmExt || false
51
+ });
61
52
  }
53
+ //#endregion
54
+ export { run };
55
+
62
56
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAGA,+EAA4E;AAC5E,iEAA8D;AAC9D,qEAAkE;AAClE,6EAA0E;AAC1E,uEAAoE;AACpE,6EAA0E;AAC1E,qEAAkE;AAClE,mEAAgE;AAChE,mEAAgE;AAChE,uCAAsD;AACtD,mCAA4D;AAErD,KAAK,cAAc,MAAc,EAAE,MAAkB;IAC1D,MAAM,EAAE,GAAG,IAAA,iBAAS,EAAC,UAAU,CAAC,CAAC;IAEjC,8FAA8F;IAC9F,MAAM,IAAA,uDAA0B,EAAC,MAAM,EAAE,EAAE,EAAE,MAAM,CAAC,CAAC;IAErD,gEAAgE;IAChE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,GAAG,MAAM,CAAC;IACnC,MAAM,oBAAoB,GAAG;QAC3B,GAAG,IAAA,iDAAuB,EAAC,MAAM,EAAE,QAAQ,CAAC;QAC5C,GAAG,IAAA,6CAAqB,EAAC,MAAM,EAAE,MAAM,CAAC;QACxC,GAAG,IAAA,+CAAsB,EAAC,MAAM,EAAE,MAAM,CAAC;QACzC,GAAG,IAAA,uDAA0B,EAAC,MAAM,EAAE,MAAM,CAAC;QAC7C,GAAG,IAAA,6CAAqB,EAAC,MAAM,CAAC;KACjC,CAAC;IACF,MAAM,KAAK,GAAG,IAAA,iBAAS,EAAC,OAAO,CAAC,CAAC;IACjC,MAAM,SAAS,CAAC,MAAM,EAAE,KAAK,EAAE,oBAAoB,CAAC,CAAC;IAErD,OAAO;QACL,MAAM,IAAA,2CAAoB,EAAC,KAAK,CAAC;QACjC,IAAA,yDAA2B,EAAC,MAAM,EAAE,KAAK,CAAC;QAC1C,IAAA,+CAAsB,EAAC,MAAM,EAAE,QAAQ,EAAE,KAAK,CAAC;KAChD,CAAC;AACJ,CAAC;AAED,0FAA0F;AAC1F,KAAK,UAAU,SAAS,CAAC,MAAc,EAAE,EAAM,EAAE,KAAoB;IACnE,qFAAqF;IACrF,MAAM,OAAO,GAAG,MAAM,IAAA,qBAAW,EAAC,EAAE,CAAC,CAAC;IACtC,MAAM,YAAY,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;IACjE,MAAM,MAAM,GAAG,IAAA,0BAAkB,EAAC,MAAM,CAAC,CAAC;IAC1C,MAAM,OAAO,CAAC,GAAG,CACf,KAAK,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;QACvB,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YACtC,8EAA8E;YAC9E,IAAI,CAAC,CAAC,MAAM,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC;gBAClC,MAAM,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,eAAe,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC;YAC1D,CAAC;YACD,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC/B,CAAC;IACH,CAAC,CAAC,CACH,CAAC;IACF,MAAM,IAAA,sBAAY,EAAC,EAAE,EAAE,OAAO,CAAC,CAAC;AAClC,CAAC;AAED,SAAS,eAAe,CAAC,IAAiB,EAAE,MAA0B;IACpE,IAAI,OAAO,IAAI,CAAC,QAAQ,KAAK,QAAQ,EAAE,CAAC;QACtC,OAAO,IAAI,CAAC,QAAQ,CAAC;IACvB,CAAC;IACD,OAAO,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC;QAC5B,IAAI,EAAE,IAAI,CAAC,IAAI;QACf,gBAAgB,EAAE,MAAM,IAAI,KAAK;KAClC,CAAC,CAAC;AACL,CAAC"}
1
+ {"version":3,"file":"index.js","names":[],"sources":["../src/index.ts"],"sourcesContent":["import { type Config, type DbMetadata } from \"joist-codegen\";\nimport { type CodegenFile } from \"ts-poet\";\n\nimport { generateEnumDetailResolvers } from \"./generateEnumDetailResolvers.ts\";\nimport { generateEnumsGraphql } from \"./generateEnumsGraphql.ts\";\nimport { generateGraphqlCodegen } from \"./generateGraphqlCodegen.ts\";\nimport { generateGraphqlSchemaFiles } from \"./generateGraphqlSchemaFiles.ts\";\nimport { generateObjectResolvers } from \"./generateObjectResolvers.ts\";\nimport { generateQueryPageResolvers } from \"./generateQueryPageResolvers.ts\";\nimport { generateQueryResolvers } from \"./generateQueryResolvers.ts\";\nimport { generateResolverUtils } from \"./generateResolverUtils.ts\";\nimport { generateSaveResolvers } from \"./generateSaveResolvers.ts\";\nimport { loadHistory, writeHistory } from \"./history.ts\";\nimport { type Fs, getImportExtension, newFsImpl } from \"./utils.ts\";\n\nexport async function run(config: Config, dbMeta: DbMetadata): Promise<CodegenFile[]> {\n const fs = newFsImpl(\"./schema\");\n\n // We upsert directly into schema files so we don't use the usual `CodeGenFile[]` return type;\n await generateGraphqlSchemaFiles(config, fs, dbMeta);\n\n // We use the history file to ensure we only generate these once\n const { entities, enums } = dbMeta;\n const conditionalResolvers = [\n ...generateObjectResolvers(config, entities),\n ...generateSaveResolvers(config, dbMeta),\n ...generateQueryResolvers(config, dbMeta),\n ...generateQueryPageResolvers(config, dbMeta),\n ...generateResolverUtils(config),\n ];\n const srcFs = newFsImpl(\"./src\");\n await writeOnce(config, srcFs, conditionalResolvers);\n\n return [\n await generateEnumsGraphql(enums),\n generateEnumDetailResolvers(config, enums),\n generateGraphqlCodegen(config, entities, enums),\n ];\n}\n\n/** Conditionally outputs files only once, so we don't re-spam unwanted/unneeded files. */\nasync function writeOnce(config: Config, fs: Fs, files: CodegenFile[]) {\n // We sneak a `files` entry into the history map, which is usually `type -> fields[]`\n const history = await loadHistory(fs);\n const filesHistory = (history[\"files\"] = history[\"files\"] || []);\n const esmExt = getImportExtension(config);\n await Promise.all(\n files.map(async (file) => {\n if (!filesHistory.includes(file.name)) {\n // Even if it's not in the history, make sure it doesn't already exist on disk\n if (!(await fs.exists(file.name))) {\n await fs.save(file.name, contentToString(file, esmExt));\n }\n filesHistory.push(file.name);\n }\n }),\n );\n await writeHistory(fs, history);\n}\n\nfunction contentToString(file: CodegenFile, esmExt: \"ts\" | \"js\" | null): string {\n if (typeof file.contents === \"string\") {\n return file.contents;\n }\n return file.contents.toString({\n path: file.name,\n importExtensions: esmExt || false,\n });\n}\n"],"mappings":";;;;;;;;;;;;;;AAeA,eAAsB,IAAI,QAAgB,QAA4C;CACpF,MAAM,KAAK,UAAU,UAAU;CAG/B,MAAM,2BAA2B,QAAQ,IAAI,MAAM;CAGnD,MAAM,EAAE,UAAU,UAAU;CAC5B,MAAM,uBAAuB;EAC3B,GAAG,wBAAwB,QAAQ,QAAQ;EAC3C,GAAG,sBAAsB,QAAQ,MAAM;EACvC,GAAG,uBAAuB,QAAQ,MAAM;EACxC,GAAG,2BAA2B,QAAQ,MAAM;EAC5C,GAAG,sBAAsB,MAAM;CACjC;CAEA,MAAM,UAAU,QADF,UAAU,OACI,GAAG,oBAAoB;CAEnD,OAAO;EACL,MAAM,qBAAqB,KAAK;EAChC,4BAA4B,QAAQ,KAAK;EACzC,uBAAuB,QAAQ,UAAU,KAAK;CAChD;AACF;;AAGA,eAAe,UAAU,QAAgB,IAAQ,OAAsB;CAErE,MAAM,UAAU,MAAM,YAAY,EAAE;CACpC,MAAM,eAAgB,QAAQ,WAAW,QAAQ,YAAY,CAAC;CAC9D,MAAM,SAAS,mBAAmB,MAAM;CACxC,MAAM,QAAQ,IACZ,MAAM,IAAI,OAAO,SAAS;EACxB,IAAI,CAAC,aAAa,SAAS,KAAK,IAAI,GAAG;GAErC,IAAI,CAAE,MAAM,GAAG,OAAO,KAAK,IAAI,GAC7B,MAAM,GAAG,KAAK,KAAK,MAAM,gBAAgB,MAAM,MAAM,CAAC;GAExD,aAAa,KAAK,KAAK,IAAI;EAC7B;CACF,CAAC,CACH;CACA,MAAM,aAAa,IAAI,OAAO;AAChC;AAEA,SAAS,gBAAgB,MAAmB,QAAoC;CAC9E,IAAI,OAAO,KAAK,aAAa,UAC3B,OAAO,KAAK;CAEd,OAAO,KAAK,SAAS,SAAS;EAC5B,MAAM,KAAK;EACX,kBAAkB,UAAU;CAC9B,CAAC;AACH"}
@@ -0,0 +1,181 @@
1
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
+ const require_runtime = require("./_virtual/_rolldown/runtime.cjs");
3
+ const require_utils = require("./utils.cjs");
4
+ let change_case = require("change-case");
5
+ let joist_codegen = require("joist-codegen");
6
+ let pluralize = require("pluralize");
7
+ pluralize = require_runtime.__toESM(pluralize, 1);
8
+ let ts_poet = require("ts-poet");
9
+ let joist_utils = require("joist-utils");
10
+ //#region src/testUtils.ts
11
+ const { plural } = pluralize.default;
12
+ function newFs(files) {
13
+ return {
14
+ exists: async (fileName) => !!files[fileName],
15
+ load: async (fileName) => files[fileName],
16
+ save: async (fileName, content) => {
17
+ files[fileName] = content;
18
+ }
19
+ };
20
+ }
21
+ function newDbMeta(opt) {
22
+ const entities = Array.isArray(opt) ? opt : opt.entities ?? [];
23
+ const entitiesByName = (0, joist_utils.keyBy)(entities, "name");
24
+ for (const entity of entities) if (entity.baseClassName) {
25
+ const baseType = entitiesByName[entity.baseClassName];
26
+ entity.baseType = baseType;
27
+ baseType.subTypes.push(entity);
28
+ }
29
+ return {
30
+ entities,
31
+ enums: {},
32
+ pgEnums: {},
33
+ joinTables: [],
34
+ otherTables: [],
35
+ totalTables: 10,
36
+ entitiesByName
37
+ };
38
+ }
39
+ function newPrimitiveField(fieldName, opts = {}) {
40
+ return {
41
+ kind: "primitive",
42
+ fieldName,
43
+ columnName: (0, change_case.snakeCase)(fieldName),
44
+ columnType: "varchar",
45
+ fieldType: "string",
46
+ rawFieldType: "string",
47
+ derived: false,
48
+ notNull: true,
49
+ protected: false,
50
+ unique: false,
51
+ columnDefault: null,
52
+ superstruct: void 0,
53
+ zodSchema: void 0,
54
+ customSerde: void 0,
55
+ isArray: false,
56
+ hasConfigDefault: false,
57
+ ...opts
58
+ };
59
+ }
60
+ function newEntityMetadata(name, opts = {}) {
61
+ return {
62
+ name,
63
+ entity: (0, joist_codegen.makeEntity)(name),
64
+ primaryKey: newPrimitiveField("id", {
65
+ columnType: "int",
66
+ fieldType: "number",
67
+ rawFieldType: "number"
68
+ }),
69
+ primitives: [],
70
+ enums: [],
71
+ pgEnums: [],
72
+ manyToOnes: [],
73
+ oneToManys: [],
74
+ largeOneToManys: [],
75
+ manyToManys: [],
76
+ largeManyToManys: [],
77
+ manyToManyEnums: [],
78
+ oneToOnes: [],
79
+ polymorphics: [],
80
+ tableName: (0, change_case.snakeCase)(plural(name)),
81
+ tagName: name,
82
+ updatedAt: void 0,
83
+ createdAt: void 0,
84
+ deletedAt: void 0,
85
+ baseClassName: void 0,
86
+ baseType: void 0,
87
+ subTypes: [],
88
+ inheritanceType: void 0,
89
+ abstract: false,
90
+ nonDeferredFkOrder: 0,
91
+ get nonDeferredFks() {
92
+ return [];
93
+ },
94
+ get nonDeferredManyToManyFks() {
95
+ return [];
96
+ },
97
+ ...opts
98
+ };
99
+ }
100
+ function newEnumField(fieldName, opts = {}) {
101
+ const enumName = opts.enumName || "Color";
102
+ const enumType = (0, ts_poet.imp)(`${enumName}@./entities`);
103
+ const enumDetailType = (0, ts_poet.imp)(`${plural(enumName)}@./entities`);
104
+ const enumDetailsType = (0, ts_poet.imp)(`${enumName}Details@./entities`);
105
+ return {
106
+ kind: "enum",
107
+ fieldName,
108
+ columnName: (0, change_case.snakeCase)(fieldName),
109
+ columnType: "int",
110
+ columnDefault: null,
111
+ derived: false,
112
+ enumName,
113
+ enumType,
114
+ enumDetailType,
115
+ enumDetailsType,
116
+ notNull: true,
117
+ enumRows: [],
118
+ isArray: false,
119
+ hasConfigDefault: false,
120
+ ...opts
121
+ };
122
+ }
123
+ function newManyToOneField(fieldName, otherEntity, opts = {}) {
124
+ return {
125
+ kind: "m2o",
126
+ fieldName,
127
+ columnName: (0, change_case.snakeCase)(fieldName),
128
+ derived: false,
129
+ notNull: true,
130
+ hasConfigDefault: false,
131
+ dbType: "int",
132
+ otherFieldName: `other${fieldName}`,
133
+ otherEntity: (0, joist_codegen.makeEntity)(otherEntity),
134
+ isDeferredAndDeferrable: true,
135
+ constraintName: "",
136
+ onDelete: "NO ACTION",
137
+ ...opts
138
+ };
139
+ }
140
+ /** Creates a polymorphic field for tests. */
141
+ function newPolymorphicField(fieldName, components, opts = {}) {
142
+ return {
143
+ kind: "poly",
144
+ fieldName,
145
+ fieldType: `${(0, change_case.pascalCase)(fieldName)}Parent`,
146
+ notNull: true,
147
+ hasConfigDefault: false,
148
+ components: components.map((component) => ({
149
+ columnName: `${(0, change_case.snakeCase)(fieldName)}_${(0, change_case.snakeCase)(component)}_id`,
150
+ otherFieldName: fieldName,
151
+ otherEntity: (0, joist_codegen.makeEntity)(component),
152
+ isDeferredAndDeferrable: true,
153
+ constraintName: "",
154
+ notNull: false
155
+ })),
156
+ ...opts
157
+ };
158
+ }
159
+ /**
160
+ * Mimics the contentToString flow from packages/codegen/src/index.ts to test import extension handling.
161
+ * This reproduces the same logic used in production when saving files.
162
+ */
163
+ function renderCodegenFile(file, config) {
164
+ const esmExt = require_utils.getImportExtension(config);
165
+ if (typeof file.contents === "string") return file.contents;
166
+ return file.contents.toString({
167
+ path: file.name,
168
+ importExtensions: esmExt || false
169
+ });
170
+ }
171
+ //#endregion
172
+ exports.newDbMeta = newDbMeta;
173
+ exports.newEntityMetadata = newEntityMetadata;
174
+ exports.newEnumField = newEnumField;
175
+ exports.newFs = newFs;
176
+ exports.newManyToOneField = newManyToOneField;
177
+ exports.newPolymorphicField = newPolymorphicField;
178
+ exports.newPrimitiveField = newPrimitiveField;
179
+ exports.renderCodegenFile = renderCodegenFile;
180
+
181
+ //# sourceMappingURL=testUtils.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"testUtils.cjs","names":["keyBy","snakeCase","makeEntity","imp","pascalCase","getImportExtension"],"sources":["../src/testUtils.ts"],"sourcesContent":["import { pascalCase, snakeCase } from \"change-case\";\nimport {\n type Config,\n type DbMetadata,\n type EntityDbMetadata,\n type EnumField,\n type ManyToOneField,\n type PolymorphicField,\n type PrimitiveField,\n makeEntity,\n} from \"joist-codegen\";\nimport { keyBy } from \"joist-utils\";\nimport pluralize from \"pluralize\";\nimport { type CodegenFile, imp } from \"ts-poet\";\n\nimport { type Fs, getImportExtension } from \"./utils.ts\";\n\nconst { plural } = pluralize;\n\nexport function newFs(files: Record<string, string>): Fs {\n return {\n exists: async (fileName) => !!files[fileName],\n load: async (fileName) => files[fileName],\n save: async (fileName, content) => {\n files[fileName] = content;\n },\n };\n}\n\nexport function newDbMeta(opt: EntityDbMetadata[] | Partial<DbMetadata>): DbMetadata {\n const entities = Array.isArray(opt) ? opt : (opt.entities ?? []);\n const entitiesByName = keyBy(entities, \"name\");\n // Hook up baseType/subTypes\n for (const entity of entities) {\n if (entity.baseClassName) {\n const baseType = entitiesByName[entity.baseClassName];\n entity.baseType = baseType;\n baseType.subTypes.push(entity);\n }\n }\n return {\n entities,\n enums: {},\n pgEnums: {},\n joinTables: [],\n otherTables: [],\n totalTables: 10,\n entitiesByName,\n };\n}\n\nexport function newPrimitiveField(fieldName: string, opts: Partial<PrimitiveField> = {}): PrimitiveField {\n return {\n kind: \"primitive\",\n fieldName,\n columnName: snakeCase(fieldName),\n columnType: \"varchar\",\n fieldType: \"string\",\n rawFieldType: \"string\",\n derived: false,\n notNull: true,\n protected: false,\n unique: false,\n columnDefault: null,\n superstruct: undefined,\n zodSchema: undefined,\n customSerde: undefined,\n isArray: false,\n hasConfigDefault: false,\n ...opts,\n };\n}\n\nexport function newEntityMetadata(name: string, opts: Partial<EntityDbMetadata> = {}): EntityDbMetadata {\n return {\n name,\n entity: makeEntity(name),\n primaryKey: newPrimitiveField(\"id\", { columnType: \"int\", fieldType: \"number\", rawFieldType: \"number\" }),\n primitives: [],\n enums: [],\n pgEnums: [],\n manyToOnes: [],\n oneToManys: [],\n largeOneToManys: [],\n manyToManys: [],\n largeManyToManys: [],\n manyToManyEnums: [],\n oneToOnes: [],\n polymorphics: [],\n tableName: snakeCase(plural(name)),\n tagName: name,\n updatedAt: undefined,\n createdAt: undefined,\n deletedAt: undefined,\n baseClassName: undefined,\n baseType: undefined,\n subTypes: [],\n inheritanceType: undefined,\n abstract: false,\n nonDeferredFkOrder: 0,\n get nonDeferredFks() {\n return [];\n },\n get nonDeferredManyToManyFks() {\n return [];\n },\n ...opts,\n };\n}\n\nexport function newEnumField(fieldName: string, opts: Partial<EnumField> = {}): EnumField {\n const enumName = opts.enumName || \"Color\";\n const enumType = imp(`${enumName}@./entities`);\n const enumDetailType = imp(`${plural(enumName)}@./entities`);\n const enumDetailsType = imp(`${enumName}Details@./entities`);\n return {\n kind: \"enum\",\n fieldName,\n columnName: snakeCase(fieldName),\n columnType: \"int\",\n columnDefault: null,\n derived: false,\n enumName,\n enumType,\n enumDetailType,\n enumDetailsType,\n notNull: true,\n enumRows: [],\n isArray: false,\n hasConfigDefault: false,\n ...opts,\n };\n}\n\nexport function newManyToOneField(\n fieldName: string,\n otherEntity: string,\n opts: Partial<ManyToOneField> = {},\n): ManyToOneField {\n return {\n kind: \"m2o\",\n fieldName,\n columnName: snakeCase(fieldName),\n derived: false,\n notNull: true,\n hasConfigDefault: false,\n dbType: \"int\",\n otherFieldName: `other${fieldName}`,\n otherEntity: makeEntity(otherEntity),\n isDeferredAndDeferrable: true,\n constraintName: \"\",\n onDelete: \"NO ACTION\" as any,\n ...opts,\n };\n}\n\n/** Creates a polymorphic field for tests. */\nexport function newPolymorphicField(\n fieldName: string,\n components: string[],\n opts: Partial<PolymorphicField> = {},\n): PolymorphicField {\n return {\n kind: \"poly\",\n fieldName,\n fieldType: `${pascalCase(fieldName)}Parent`,\n notNull: true,\n hasConfigDefault: false,\n components: components.map((component) => ({\n columnName: `${snakeCase(fieldName)}_${snakeCase(component)}_id`,\n otherFieldName: fieldName,\n otherEntity: makeEntity(component),\n isDeferredAndDeferrable: true,\n constraintName: \"\",\n notNull: false as const,\n })),\n ...opts,\n } satisfies PolymorphicField;\n}\n\n/**\n * Mimics the contentToString flow from packages/codegen/src/index.ts to test import extension handling.\n * This reproduces the same logic used in production when saving files.\n */\nexport function renderCodegenFile(file: CodegenFile, config: Config): string {\n const esmExt = getImportExtension(config);\n if (typeof file.contents === \"string\") {\n return file.contents;\n }\n return file.contents.toString({\n path: file.name,\n importExtensions: esmExt || false,\n });\n}\n"],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ import { Fs } from "./utils.cjs";
2
+ import { Config, DbMetadata, EntityDbMetadata, EnumField, ManyToOneField, PolymorphicField, PrimitiveField } from "joist-codegen";
3
+ import { CodegenFile } from "ts-poet";
4
+ //#region src/testUtils.d.ts
5
+ declare function newFs(files: Record<string, string>): Fs;
6
+ declare function newDbMeta(opt: EntityDbMetadata[] | Partial<DbMetadata>): DbMetadata;
7
+ declare function newPrimitiveField(fieldName: string, opts?: Partial<PrimitiveField>): PrimitiveField;
8
+ declare function newEntityMetadata(name: string, opts?: Partial<EntityDbMetadata>): EntityDbMetadata;
9
+ declare function newEnumField(fieldName: string, opts?: Partial<EnumField>): EnumField;
10
+ declare function newManyToOneField(fieldName: string, otherEntity: string, opts?: Partial<ManyToOneField>): ManyToOneField;
11
+ /** Creates a polymorphic field for tests. */
12
+ declare function newPolymorphicField(fieldName: string, components: string[], opts?: Partial<PolymorphicField>): PolymorphicField;
13
+ /**
14
+ * Mimics the contentToString flow from packages/codegen/src/index.ts to test import extension handling.
15
+ * This reproduces the same logic used in production when saving files.
16
+ */
17
+ declare function renderCodegenFile(file: CodegenFile, config: Config): string;
18
+ //#endregion
19
+ export { newDbMeta, newEntityMetadata, newEnumField, newFs, newManyToOneField, newPolymorphicField, newPrimitiveField, renderCodegenFile };
20
+ //# sourceMappingURL=testUtils.d.cts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"testUtils.d.cts","names":[],"sources":["../src/testUtils.ts"],"mappings":";;;;iBAmBgB,MAAM,OAAO,yBAAyB;iBAUtC,UAAU,KAAK,qBAAqB,QAAQ,cAAc;iBAsB1D,kBAAkB,mBAAmB,OAAM,QAAQ,kBAAuB;iBAsB1E,kBAAkB,cAAc,OAAM,QAAQ,oBAAyB;iBAqCvE,aAAa,mBAAmB,OAAM,QAAQ,aAAkB;iBAwBhE,kBACd,mBACA,qBACA,OAAM,QAAQ,kBACb;;iBAmBa,oBACd,mBACA,sBACA,OAAM,QAAQ,oBACb;;;;;iBAuBa,kBAAkB,MAAM,aAAa,QAAQ"}