@trackunit/react-graphql-tools 0.0.29 → 0.0.32
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/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,12 @@
|
|
|
2
2
|
|
|
3
3
|
This file was generated using [@jscutlery/semver](https://github.com/jscutlery/semver).
|
|
4
4
|
|
|
5
|
+
## [0.0.32](https://github.com/Trackunit/manager/compare/react-graphql-tools/0.0.31...react-graphql-tools/0.0.32) (2023-10-05)
|
|
6
|
+
|
|
7
|
+
## [0.0.31](https://github.com/Trackunit/manager/compare/react-graphql-tools/0.0.30...react-graphql-tools/0.0.31) (2023-10-04)
|
|
8
|
+
|
|
9
|
+
## [0.0.30](https://github.com/Trackunit/manager/compare/react-graphql-tools/0.0.29...react-graphql-tools/0.0.30) (2023-10-04)
|
|
10
|
+
|
|
5
11
|
## [0.0.29](https://github.com/Trackunit/manager/compare/react-graphql-tools/0.0.28...react-graphql-tools/0.0.29) (2023-09-13)
|
|
6
12
|
|
|
7
13
|
## [0.0.28](https://github.com/Trackunit/manager/compare/react-graphql-tools/0.0.27...react-graphql-tools/0.0.28) (2023-09-11)
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@trackunit/react-graphql-tools",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.32",
|
|
4
4
|
"main": "./src/index.js",
|
|
5
5
|
"executors": "./executors.json",
|
|
6
6
|
"repository": "https://github.com/Trackunit/manager",
|
|
@@ -9,6 +9,7 @@
|
|
|
9
9
|
"node": ">=18.x"
|
|
10
10
|
},
|
|
11
11
|
"dependencies": {
|
|
12
|
+
"@faker-js/faker": "^7.5.0",
|
|
12
13
|
"@graphql-codegen/cli": "^4.0.1",
|
|
13
14
|
"@graphql-codegen/client-preset": "^4.0.1",
|
|
14
15
|
"@react-google-maps/api": "^2.18.1",
|
|
@@ -7,6 +7,7 @@ const fs_1 = require("fs");
|
|
|
7
7
|
const path_1 = require("path");
|
|
8
8
|
const prettier = tslib_1.__importStar(require("prettier"));
|
|
9
9
|
const ts_morph_1 = require("ts-morph");
|
|
10
|
+
const scrubMockFile_1 = require("./scrubMockFile");
|
|
10
11
|
/**
|
|
11
12
|
* Removes unused identifiers from the source file.
|
|
12
13
|
*
|
|
@@ -119,6 +120,7 @@ const scrubFile = (file, nxRoot, isVerbose) => tslib_1.__awaiter(void 0, void 0,
|
|
|
119
120
|
if (fileContent.length === 0) {
|
|
120
121
|
console.warn(`File ${file} is empty`);
|
|
121
122
|
}
|
|
123
|
+
const scrubbedMockFileContent = yield (0, scrubMockFile_1.scrubMockFileContent)(fileContent, nxRoot, isVerbose);
|
|
122
124
|
const scrubbedFileContent = yield (0, exports.scrubFileContent)(fileContent, nxRoot, isVerbose);
|
|
123
125
|
let options = null;
|
|
124
126
|
try {
|
|
@@ -143,6 +145,13 @@ const scrubFile = (file, nxRoot, isVerbose) => tslib_1.__awaiter(void 0, void 0,
|
|
|
143
145
|
prettySrc = prettier.format(scrubbedFileContent, prettierOptions);
|
|
144
146
|
}
|
|
145
147
|
(0, fs_1.writeFileSync)(file, prettySrc, { encoding: "utf-8" });
|
|
148
|
+
let prettyMockSrc = scrubbedMockFileContent;
|
|
149
|
+
if (prettierOptions) {
|
|
150
|
+
prettierOptions.parser = "typescript";
|
|
151
|
+
prettyMockSrc = prettier.format(scrubbedMockFileContent, prettierOptions);
|
|
152
|
+
}
|
|
153
|
+
const parentDir = file.split("/").slice(0, -1).join("/");
|
|
154
|
+
(0, fs_1.writeFileSync)(parentDir + "/mock.ts", prettyMockSrc, { encoding: "utf-8" });
|
|
146
155
|
return prettySrc;
|
|
147
156
|
});
|
|
148
157
|
exports.scrubFile = scrubFile;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scrubFile.js","sourceRoot":"","sources":["../../../../../../../libs/react/graphql-tools/src/executors/createHooks/scrubFile.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable no-console */\nimport { readFileSync, writeFileSync } from \"fs\";\nimport { join } from \"path\";\nimport * as prettier from \"prettier\";\nimport { EnumDeclaration, Project, SourceFile } from \"ts-morph\";\n\n/**\n * Removes unused identifiers from the source file.\n *\n * This does more then sourceFile.fixUnusedIdentifiers(diagnostic) as it also removes unused enums and interfaces.\n *\n * @param sourceFile The source file to remove unused identifiers from.\n */\nconst removeUnusedIdentifiers = (sourceFile: SourceFile) => {\n const diagnostics = sourceFile.getPreEmitDiagnostics();\n diagnostics.forEach(diagnostic => {\n const messageText = diagnostic.getMessageText();\n\n if (typeof messageText === \"string\" && messageText.startsWith(\"'\")) {\n const identifierName = messageText.match(/'([^']+)'/)?.[1];\n if (identifierName) {\n if (messageText.includes(\"is declared but never used\")) {\n const identifier =\n sourceFile.getVariableDeclaration(identifierName) ||\n sourceFile.getInterface(identifierName) ||\n sourceFile.getEnum(identifierName) ||\n sourceFile.getClass(identifierName) ||\n sourceFile.getTypeAlias(identifierName);\n\n if (!identifier) {\n // eslint-disable-next-line no-console\n console.log(\"Could not find: \", messageText);\n } else {\n identifier.remove();\n }\n }\n }\n }\n });\n};\n\nconst convertEnumToConstObject = (enumDeclaration: EnumDeclaration) => {\n const enumName = enumDeclaration.getName();\n const members = enumDeclaration.getMembers();\n\n const properties = members.map(member => {\n const name = member.getName();\n const value = member.getValue();\n return `${name}: '${value}'`;\n });\n\n const lowerCaseFirstLetter = enumName[0].toLowerCase() + enumName.slice(1);\n const constObjectText = `export const ${lowerCaseFirstLetter} = {\\n ${properties.join(\n \",\\n \"\n )},\\n} as const;\\nexport type ${enumName} = typeof ${lowerCaseFirstLetter}[keyof typeof ${lowerCaseFirstLetter}];`;\n\n // Replace the EnumDeclaration with the const object text\n enumDeclaration.replaceWithText(constObjectText);\n};\n\n/**\n * Generates React hooks from your graphql files.\n */\nexport const scrubFileContent = async (fileContent: string, nxRoot: string, isVerbose?: boolean) => {\n const start = new Date().getTime();\n\n const project = new Project({\n compilerOptions: {\n noUnusedLocals: true,\n noUnusedParameters: true,\n },\n });\n const generatedFile = project.createSourceFile(\"tmp.ts\", fileContent);\n\n generatedFile.insertStatements(0, \"/* eslint-disable @typescript-eslint/no-explicit-any */\");\n generatedFile.insertStatements(1, \"/* eslint-disable @typescript-eslint/array-type */\");\n\n generatedFile.getTypeAliases().forEach(node => {\n if (!node.getName().startsWith(\"Incremental\")) {\n node.setIsExported(false);\n }\n if (\n node.getName().startsWith(\"Query\") ||\n node.getName().startsWith(\"Mutation\") ||\n // Since they reference each other we remove them here.\n node.getName() === \"Site\" ||\n node.getName() === \"Event\" ||\n node.getName() === \"Asset\"\n ) {\n node.remove();\n }\n });\n generatedFile.getEnums().forEach(node => {\n node.setIsExported(false);\n });\n let lastWidth = 0;\n do {\n lastWidth = generatedFile.getFullWidth();\n removeUnusedIdentifiers(generatedFile);\n if (isVerbose) {\n console.log(\"Cleanup\", lastWidth, generatedFile.getFullWidth());\n }\n } while (lastWidth !== generatedFile.getFullWidth());\n\n generatedFile.getTypeAliases().forEach(node => {\n node.setIsExported(true);\n });\n generatedFile.getVariableStatements().forEach(variableStatement => {\n variableStatement.setIsExported(true);\n });\n generatedFile.getEnums().forEach(node => {\n node.setIsExported(true);\n convertEnumToConstObject(node);\n });\n\n if (isVerbose) {\n const end = new Date().getTime();\n const time = end - start;\n console.log(\"Execution time: \" + time);\n }\n return generatedFile.getFullText();\n};\n\n/**\n * Scrubs the file content.\n *\n * @param file The file to scrub.\n */\nexport const scrubFile = async (file: string, nxRoot: string, isVerbose?: boolean) => {\n const fileContent = readFileSync(file, { encoding: \"utf-8\" });\n if (fileContent.length === 0) {\n console.warn(`File ${file} is empty`);\n }\n const scrubbedFileContent = await scrubFileContent(fileContent, nxRoot, isVerbose);\n\n let options = null;\n try {\n options = prettier\n .resolveConfig(join(nxRoot, \".prettierrc\"), {\n useCache: false,\n editorconfig: false,\n config: join(nxRoot, \".prettierrc\"),\n })\n .catch((error: Error) => console.log(error));\n } catch (e) {\n console.log(e);\n }\n if (!options) {\n throw new Error(\"Could not find prettier config\");\n }\n const prettierOptions = await options;\n\n let prettySrc = scrubbedFileContent;\n if (prettierOptions) {\n prettierOptions.parser = \"typescript\";\n prettySrc = prettier.format(scrubbedFileContent, prettierOptions);\n }\n\n writeFileSync(file, prettySrc, { encoding: \"utf-8\" });\n return prettySrc;\n};\n"]}
|
|
1
|
+
{"version":3,"file":"scrubFile.js","sourceRoot":"","sources":["../../../../../../../libs/react/graphql-tools/src/executors/createHooks/scrubFile.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable no-console */\nimport { readFileSync, writeFileSync } from \"fs\";\nimport { join } from \"path\";\nimport * as prettier from \"prettier\";\nimport { EnumDeclaration, Project, SourceFile } from \"ts-morph\";\nimport { scrubMockFileContent } from \"./scrubMockFile\";\n\n/**\n * Removes unused identifiers from the source file.\n *\n * This does more then sourceFile.fixUnusedIdentifiers(diagnostic) as it also removes unused enums and interfaces.\n *\n * @param sourceFile The source file to remove unused identifiers from.\n */\nconst removeUnusedIdentifiers = (sourceFile: SourceFile) => {\n const diagnostics = sourceFile.getPreEmitDiagnostics();\n diagnostics.forEach(diagnostic => {\n const messageText = diagnostic.getMessageText();\n\n if (typeof messageText === \"string\" && messageText.startsWith(\"'\")) {\n const identifierName = messageText.match(/'([^']+)'/)?.[1];\n if (identifierName) {\n if (messageText.includes(\"is declared but never used\")) {\n const identifier =\n sourceFile.getVariableDeclaration(identifierName) ||\n sourceFile.getInterface(identifierName) ||\n sourceFile.getEnum(identifierName) ||\n sourceFile.getClass(identifierName) ||\n sourceFile.getTypeAlias(identifierName);\n\n if (!identifier) {\n // eslint-disable-next-line no-console\n console.log(\"Could not find: \", messageText);\n } else {\n identifier.remove();\n }\n }\n }\n }\n });\n};\n\nconst convertEnumToConstObject = (enumDeclaration: EnumDeclaration) => {\n const enumName = enumDeclaration.getName();\n const members = enumDeclaration.getMembers();\n\n const properties = members.map(member => {\n const name = member.getName();\n const value = member.getValue();\n return `${name}: '${value}'`;\n });\n\n const lowerCaseFirstLetter = enumName[0].toLowerCase() + enumName.slice(1);\n const constObjectText = `export const ${lowerCaseFirstLetter} = {\\n ${properties.join(\n \",\\n \"\n )},\\n} as const;\\nexport type ${enumName} = typeof ${lowerCaseFirstLetter}[keyof typeof ${lowerCaseFirstLetter}];`;\n\n // Replace the EnumDeclaration with the const object text\n enumDeclaration.replaceWithText(constObjectText);\n};\n\n/**\n * Generates React hooks from your graphql files.\n */\nexport const scrubFileContent = async (fileContent: string, nxRoot: string, isVerbose?: boolean) => {\n const start = new Date().getTime();\n\n const project = new Project({\n compilerOptions: {\n noUnusedLocals: true,\n noUnusedParameters: true,\n },\n });\n const generatedFile = project.createSourceFile(\"tmp.ts\", fileContent);\n\n generatedFile.insertStatements(0, \"/* eslint-disable @typescript-eslint/no-explicit-any */\");\n generatedFile.insertStatements(1, \"/* eslint-disable @typescript-eslint/array-type */\");\n\n generatedFile.getTypeAliases().forEach(node => {\n if (!node.getName().startsWith(\"Incremental\")) {\n node.setIsExported(false);\n }\n\n if (\n node.getName().startsWith(\"Query\") ||\n node.getName().startsWith(\"Mutation\") ||\n // Since they reference each other we remove them here.\n node.getName() === \"Site\" ||\n node.getName() === \"Event\" ||\n node.getName() === \"Asset\"\n ) {\n node.remove();\n }\n });\n generatedFile.getEnums().forEach(node => {\n node.setIsExported(false);\n });\n let lastWidth = 0;\n do {\n lastWidth = generatedFile.getFullWidth();\n removeUnusedIdentifiers(generatedFile);\n if (isVerbose) {\n console.log(\"Cleanup\", lastWidth, generatedFile.getFullWidth());\n }\n } while (lastWidth !== generatedFile.getFullWidth());\n\n generatedFile.getTypeAliases().forEach(node => {\n node.setIsExported(true);\n });\n generatedFile.getVariableStatements().forEach(variableStatement => {\n variableStatement.setIsExported(true);\n });\n generatedFile.getEnums().forEach(node => {\n node.setIsExported(true);\n convertEnumToConstObject(node);\n });\n\n if (isVerbose) {\n const end = new Date().getTime();\n const time = end - start;\n console.log(\"Execution time: \" + time);\n }\n\n return generatedFile.getFullText();\n};\n\n/**\n * Scrubs the file content.\n *\n * @param file The file to scrub.\n */\nexport const scrubFile = async (file: string, nxRoot: string, isVerbose?: boolean) => {\n const fileContent = readFileSync(file, { encoding: \"utf-8\" });\n if (fileContent.length === 0) {\n console.warn(`File ${file} is empty`);\n }\n const scrubbedMockFileContent = await scrubMockFileContent(fileContent, nxRoot, isVerbose);\n\n const scrubbedFileContent = await scrubFileContent(fileContent, nxRoot, isVerbose);\n\n let options = null;\n try {\n options = prettier\n .resolveConfig(join(nxRoot, \".prettierrc\"), {\n useCache: false,\n editorconfig: false,\n config: join(nxRoot, \".prettierrc\"),\n })\n .catch((error: Error) => console.log(error));\n } catch (e) {\n console.log(e);\n }\n if (!options) {\n throw new Error(\"Could not find prettier config\");\n }\n const prettierOptions = await options;\n\n let prettySrc = scrubbedFileContent;\n if (prettierOptions) {\n prettierOptions.parser = \"typescript\";\n prettySrc = prettier.format(scrubbedFileContent, prettierOptions);\n }\n writeFileSync(file, prettySrc, { encoding: \"utf-8\" });\n\n let prettyMockSrc = scrubbedMockFileContent;\n if (prettierOptions) {\n prettierOptions.parser = \"typescript\";\n prettyMockSrc = prettier.format(scrubbedMockFileContent, prettierOptions);\n }\n const parentDir = file.split(\"/\").slice(0, -1).join(\"/\");\n writeFileSync(parentDir + \"/mock.ts\", prettyMockSrc, { encoding: \"utf-8\" });\n return prettySrc;\n};\n"]}
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.scrubMockFileContent = void 0;
|
|
4
|
+
const tslib_1 = require("tslib");
|
|
5
|
+
/* eslint-disable no-console */
|
|
6
|
+
const faker_1 = require("@faker-js/faker");
|
|
7
|
+
const ts_morph_1 = require("ts-morph");
|
|
8
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
9
|
+
const generateMockFromType = (type) => {
|
|
10
|
+
faker_1.faker.seed(123);
|
|
11
|
+
if (type.isStringLiteral()) {
|
|
12
|
+
return type.compilerType.value; // Get the value of the string literal
|
|
13
|
+
}
|
|
14
|
+
if (type.isNumberLiteral()) {
|
|
15
|
+
return parseFloat(type.compilerType.value);
|
|
16
|
+
}
|
|
17
|
+
if (type.isBooleanLiteral()) {
|
|
18
|
+
return type.compilerType.value === "true";
|
|
19
|
+
}
|
|
20
|
+
if (type.getText() === "string") {
|
|
21
|
+
return faker_1.faker.random.word();
|
|
22
|
+
}
|
|
23
|
+
if (type.getText() === "number") {
|
|
24
|
+
return faker_1.faker.datatype.number();
|
|
25
|
+
}
|
|
26
|
+
if (type.getText() === "Date" || type.getText() === "DateTime" || type.getText() === "DateTimeISOString") {
|
|
27
|
+
return "2023-01-22T15:08:12.527Z";
|
|
28
|
+
}
|
|
29
|
+
if (type.isUnion()) {
|
|
30
|
+
// We'll take the first type in the union for simplicity
|
|
31
|
+
return generateMockFromType(type.getUnionTypes()[0]);
|
|
32
|
+
}
|
|
33
|
+
if (type.isArray()) {
|
|
34
|
+
return [generateMockFromType(type.getArrayElementTypeOrThrow())];
|
|
35
|
+
}
|
|
36
|
+
if (type.isObject()) {
|
|
37
|
+
const properties = type.getProperties();
|
|
38
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
39
|
+
const obj = {};
|
|
40
|
+
for (const prop of properties) {
|
|
41
|
+
const propType = prop.getValueDeclarationOrThrow().getType();
|
|
42
|
+
if (prop.getName() === "__typename") {
|
|
43
|
+
obj[prop.getName()] = propType.getText().replace(/"/g, "");
|
|
44
|
+
}
|
|
45
|
+
else {
|
|
46
|
+
obj[prop.getName()] = generateMockFromType(propType);
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
return obj;
|
|
50
|
+
}
|
|
51
|
+
return null; // Default
|
|
52
|
+
};
|
|
53
|
+
/**
|
|
54
|
+
* Generates React hooks from your graphql files.
|
|
55
|
+
*/
|
|
56
|
+
const scrubMockFileContent = (fileContent, nxRoot, isVerbose) => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
|
|
57
|
+
const start = new Date().getTime();
|
|
58
|
+
const project = new ts_morph_1.Project({
|
|
59
|
+
compilerOptions: {
|
|
60
|
+
noUnusedLocals: true,
|
|
61
|
+
noUnusedParameters: true,
|
|
62
|
+
},
|
|
63
|
+
});
|
|
64
|
+
const generatedFile = project.createSourceFile("tmpMock.ts", fileContent);
|
|
65
|
+
const mockThese = [];
|
|
66
|
+
generatedFile.insertStatements(0, "/* eslint-disable @typescript-eslint/no-explicit-any */");
|
|
67
|
+
generatedFile.insertStatements(1, "/* eslint-disable @typescript-eslint/array-type */");
|
|
68
|
+
generatedFile.getTypeAliases().forEach(node => {
|
|
69
|
+
if (node.getName().endsWith("Query") && node.getName().length > "Query".length) {
|
|
70
|
+
mockThese.push(node);
|
|
71
|
+
}
|
|
72
|
+
});
|
|
73
|
+
if (isVerbose) {
|
|
74
|
+
const end = new Date().getTime();
|
|
75
|
+
const time = end - start;
|
|
76
|
+
console.log("Mock Execution time: " + time);
|
|
77
|
+
}
|
|
78
|
+
const mock = mockThese.map(mocker => {
|
|
79
|
+
return `
|
|
80
|
+
|
|
81
|
+
export const mockFor${mocker.getName()} = (variables: gql.${mocker.getName()}Variables, data?: DeepPartialNullable<gql.${mocker.getName()}> ) => {
|
|
82
|
+
return queryFor(gql.${mocker
|
|
83
|
+
.getName()
|
|
84
|
+
.substring(0, mocker.getName().length - "Query".length)}Document, variables,
|
|
85
|
+
mergeDeep(
|
|
86
|
+
${JSON.stringify(generateMockFromType(mocker.getType()), null, 4)}
|
|
87
|
+
, data || {}) as gql.${mocker.getName()}
|
|
88
|
+
);
|
|
89
|
+
}`;
|
|
90
|
+
});
|
|
91
|
+
return `
|
|
92
|
+
import { OperationVariables } from "@apollo/client";
|
|
93
|
+
import { mergeDeep } from "@apollo/client/utilities";
|
|
94
|
+
import { queryFor, DeepPartialNullable } from "@trackunit/react-core-contexts-test";
|
|
95
|
+
import * as gql from "../graphql-api/graphql";
|
|
96
|
+
|
|
97
|
+
${mock.join("\n")}
|
|
98
|
+
`;
|
|
99
|
+
});
|
|
100
|
+
exports.scrubMockFileContent = scrubMockFileContent;
|
|
101
|
+
//# sourceMappingURL=scrubMockFile.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scrubMockFile.js","sourceRoot":"","sources":["../../../../../../../libs/react/graphql-tools/src/executors/createHooks/scrubMockFile.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable no-console */\nimport { faker } from \"@faker-js/faker\";\nimport { Project, TypeAliasDeclaration } from \"ts-morph\";\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nconst generateMockFromType = (type: any): any => {\n faker.seed(123);\n\n if (type.isStringLiteral()) {\n return type.compilerType.value; // Get the value of the string literal\n }\n if (type.isNumberLiteral()) {\n return parseFloat(type.compilerType.value);\n }\n if (type.isBooleanLiteral()) {\n return type.compilerType.value === \"true\";\n }\n\n if (type.getText() === \"string\") {\n return faker.random.word();\n }\n if (type.getText() === \"number\") {\n return faker.datatype.number();\n }\n if (type.getText() === \"Date\" || type.getText() === \"DateTime\" || type.getText() === \"DateTimeISOString\") {\n return \"2023-01-22T15:08:12.527Z\";\n }\n if (type.isUnion()) {\n // We'll take the first type in the union for simplicity\n return generateMockFromType(type.getUnionTypes()[0]);\n }\n if (type.isArray()) {\n return [generateMockFromType(type.getArrayElementTypeOrThrow())];\n }\n if (type.isObject()) {\n const properties = type.getProperties();\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const obj: any = {};\n for (const prop of properties) {\n const propType = prop.getValueDeclarationOrThrow().getType();\n if (prop.getName() === \"__typename\") {\n obj[prop.getName()] = propType.getText().replace(/\"/g, \"\");\n } else {\n obj[prop.getName()] = generateMockFromType(propType);\n }\n }\n return obj;\n }\n return null; // Default\n};\n\n/**\n * Generates React hooks from your graphql files.\n */\nexport const scrubMockFileContent = async (fileContent: string, nxRoot: string, isVerbose?: boolean) => {\n const start = new Date().getTime();\n\n const project = new Project({\n compilerOptions: {\n noUnusedLocals: true,\n noUnusedParameters: true,\n },\n });\n const generatedFile = project.createSourceFile(\"tmpMock.ts\", fileContent);\n const mockThese: TypeAliasDeclaration[] = [];\n\n generatedFile.insertStatements(0, \"/* eslint-disable @typescript-eslint/no-explicit-any */\");\n generatedFile.insertStatements(1, \"/* eslint-disable @typescript-eslint/array-type */\");\n\n generatedFile.getTypeAliases().forEach(node => {\n if (node.getName().endsWith(\"Query\") && node.getName().length > \"Query\".length) {\n mockThese.push(node);\n }\n });\n\n if (isVerbose) {\n const end = new Date().getTime();\n const time = end - start;\n console.log(\"Mock Execution time: \" + time);\n }\n\n const mock = mockThese.map(mocker => {\n return `\n \n export const mockFor${mocker.getName()} = (variables: gql.${mocker.getName()}Variables, data?: DeepPartialNullable<gql.${mocker.getName()}> ) => {\n return queryFor(gql.${mocker\n .getName()\n .substring(0, mocker.getName().length - \"Query\".length)}Document, variables, \n mergeDeep(\n ${JSON.stringify(generateMockFromType(mocker.getType()), null, 4)}\n , data || {}) as gql.${mocker.getName()}\n );\n }`;\n });\n\n return `\n import { OperationVariables } from \"@apollo/client\";\n import { mergeDeep } from \"@apollo/client/utilities\";\n import { queryFor, DeepPartialNullable } from \"@trackunit/react-core-contexts-test\";\n import * as gql from \"../graphql-api/graphql\";\n \n ${mock.join(\"\\n\")}\n `;\n};\n"]}
|