@trackunit/react-graphql-tools 0.0.18 → 0.0.19

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,8 @@
2
2
 
3
3
  This file was generated using [@jscutlery/semver](https://github.com/jscutlery/semver).
4
4
 
5
+ ## [0.0.19](https://github.com/Trackunit/manager/compare/react-graphql-tools/0.0.18...react-graphql-tools/0.0.19) (2023-06-22)
6
+
5
7
  ## [0.0.18](https://github.com/Trackunit/manager/compare/react-graphql-tools/0.0.17...react-graphql-tools/0.0.18) (2023-06-19)
6
8
 
7
9
  ## [0.0.17](https://github.com/Trackunit/manager/compare/react-graphql-tools/0.0.16...react-graphql-tools/0.0.17) (2023-06-13)
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@trackunit/react-graphql-tools",
3
- "version": "0.0.18",
3
+ "version": "0.0.19",
4
4
  "main": "src/index.js",
5
5
  "executors": "./executors.json",
6
6
  "repository": "https://github.com/Trackunit/manager",
@@ -9,10 +9,8 @@
9
9
  "node": ">=16.x"
10
10
  },
11
11
  "dependencies": {
12
- "@graphql-codegen/cli": "3.3.1",
13
- "@graphql-codegen/fragment-matcher": "4.0.1",
14
- "@graphql-codegen/typescript-operations": "3.0.4",
15
- "@graphql-codegen/typescript-react-apollo": "3.3.7",
12
+ "@graphql-codegen/cli": "4.0.1",
13
+ "@graphql-codegen/client-preset": "4.0.1",
16
14
  "@react-google-maps/api": "2.18.1",
17
15
  "@react-spring/web": "9.6.0",
18
16
  "graphql": "15.8.0",
@@ -5,6 +5,7 @@ const tslib_1 = require("tslib");
5
5
  const fs_1 = require("fs");
6
6
  const path_1 = require("path");
7
7
  const generateHooks_1 = require("./generateHooks");
8
+ const scrubFile_1 = require("./scrubFile");
8
9
  /**
9
10
  * This executor generates react hooks for all graphql files.
10
11
  *
@@ -18,15 +19,29 @@ const CreateGraphqlHooks = (_unused, context) => tslib_1.__awaiter(void 0, void
18
19
  throw new Error("context projectsConfigurations is required");
19
20
  }
20
21
  const libRoot = context.projectsConfigurations.projects[context.projectName].root;
21
- const fullLibRoot = `${nxRoot}/${libRoot}`;
22
- const filePath = (0, path_1.join)(__dirname, "..", "..", "..", "..", "..", "..", "libs", "api", "public-gql-schema", "src", "public-schema.gql");
23
- if ((0, fs_1.existsSync)(filePath)) {
24
- yield (0, generateHooks_1.generateHooks)(filePath, fullLibRoot + "/src", context.root, { isVerbose: context.isVerbose });
22
+ const fullLibRoot = (0, path_1.join)(nxRoot, libRoot);
23
+ const tsConfigPath = (0, fs_1.existsSync)((0, path_1.join)(fullLibRoot, "tsconfig.lib.json"))
24
+ ? (0, path_1.join)(fullLibRoot, "tsconfig.lib.json")
25
+ : (0, path_1.join)(fullLibRoot, "tsconfig.app.json");
26
+ if (!tsConfigPath) {
27
+ throw new Error("context projectsConfigurations is required");
28
+ }
29
+ const codeGenFilePath = (0, path_1.join)(fullLibRoot, "codegen.ts");
30
+ if (!(0, fs_1.existsSync)(codeGenFilePath)) {
31
+ throw new Error(`codegen.ts file not found in ${fullLibRoot} please add this file and run again to generate hooks. The content should be
32
+ import { type CodegenConfig } from "@graphql-codegen/cli";
33
+ import { getGraphqlCodegenConfig } from "@trackunit/iris-app-build-utilities";
34
+
35
+ const config: CodegenConfig = {
36
+ ...getGraphqlCodegenConfig(__dirname),
37
+ // You can override codegen default config here
38
+ };
39
+ export default config;
40
+ `);
25
41
  }
26
- else {
27
- yield (0, generateHooks_1.generateHooks)("https://iris.trackunit.com/api/graphql/", fullLibRoot + "/src", context.root, {
28
- isVerbose: context.isVerbose,
29
- });
42
+ yield (0, generateHooks_1.generateHooks)({ nxRoot: context.root, codeGenFilePath, isVerbose: context.isVerbose, tsConfigPath });
43
+ if (process.env.SKIP_SCRUB !== "true") {
44
+ yield (0, scrubFile_1.scrubFile)((0, path_1.join)(fullLibRoot, "src", "generated", "graphql-api", "graphql.ts"), nxRoot, context.isVerbose);
30
45
  }
31
46
  return { success: 1 };
32
47
  });
@@ -1 +1 @@
1
- {"version":3,"file":"executor.js","sourceRoot":"","sources":["../../../../../../../libs/react/graphql-tools/src/executors/createHooks/executor.ts"],"names":[],"mappings":";;;;AACA,2BAAgC;AAChC,+BAA4B;AAC5B,mDAAgD;AAEhD;;;;;;GAMG;AACI,MAAM,kBAAkB,GAAG,CAAO,OAAgB,EAAE,OAAwB,EAAE,EAAE;IACrF,MAAM,MAAM,GAAG,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC;IACjC,IAAI,CAAC,OAAO,CAAC,sBAAsB,EAAE;QACnC,MAAM,IAAI,KAAK,CAAC,4CAA4C,CAAC,CAAC;KAC/D;IACD,MAAM,OAAO,GAAG,OAAO,CAAC,sBAAsB,CAAC,QAAQ,CAAC,OAAO,CAAC,WAAY,CAAC,CAAC,IAAI,CAAC;IACnF,MAAM,WAAW,GAAG,GAAG,MAAM,IAAI,OAAO,EAAE,CAAC;IAC3C,MAAM,QAAQ,GAAG,IAAA,WAAI,EACnB,SAAS,EACT,IAAI,EACJ,IAAI,EACJ,IAAI,EACJ,IAAI,EACJ,IAAI,EACJ,IAAI,EACJ,MAAM,EACN,KAAK,EACL,mBAAmB,EACnB,KAAK,EACL,mBAAmB,CACpB,CAAC;IACF,IAAI,IAAA,eAAU,EAAC,QAAQ,CAAC,EAAE;QACxB,MAAM,IAAA,6BAAa,EAAC,QAAQ,EAAE,WAAW,GAAG,MAAM,EAAE,OAAO,CAAC,IAAI,EAAE,EAAE,SAAS,EAAE,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC;KACrG;SAAM;QACL,MAAM,IAAA,6BAAa,EAAC,yCAAyC,EAAE,WAAW,GAAG,MAAM,EAAE,OAAO,CAAC,IAAI,EAAE;YACjG,SAAS,EAAE,OAAO,CAAC,SAAS;SAC7B,CAAC,CAAC;KACJ;IACD,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC;AACxB,CAAC,CAAA,CAAC;AA7BW,QAAA,kBAAkB,sBA6B7B;AAEF,kBAAe,0BAAkB,CAAC","sourcesContent":["import { ExecutorContext } from \"@nrwl/devkit\";\nimport { existsSync } from \"fs\";\nimport { join } from \"path\";\nimport { generateHooks } from \"./generateHooks\";\n\n/**\n * This executor generates react hooks for all graphql files.\n *\n * @param _unused unused props from nx\n * @param context The execution context for this executor\n * @returns {Promise<{ success: number; }>} success when finished\n */\nexport const CreateGraphqlHooks = async (_unused: unknown, context: ExecutorContext) => {\n const nxRoot = `${context.root}`;\n if (!context.projectsConfigurations) {\n throw new Error(\"context projectsConfigurations is required\");\n }\n const libRoot = context.projectsConfigurations.projects[context.projectName!].root;\n const fullLibRoot = `${nxRoot}/${libRoot}`;\n const filePath = join(\n __dirname,\n \"..\",\n \"..\",\n \"..\",\n \"..\",\n \"..\",\n \"..\",\n \"libs\",\n \"api\",\n \"public-gql-schema\",\n \"src\",\n \"public-schema.gql\"\n );\n if (existsSync(filePath)) {\n await generateHooks(filePath, fullLibRoot + \"/src\", context.root, { isVerbose: context.isVerbose });\n } else {\n await generateHooks(\"https://iris.trackunit.com/api/graphql/\", fullLibRoot + \"/src\", context.root, {\n isVerbose: context.isVerbose,\n });\n }\n return { success: 1 };\n};\n\nexport default CreateGraphqlHooks;\n"]}
1
+ {"version":3,"file":"executor.js","sourceRoot":"","sources":["../../../../../../../libs/react/graphql-tools/src/executors/createHooks/executor.ts"],"names":[],"mappings":";;;;AACA,2BAAgC;AAChC,+BAA4B;AAC5B,mDAAgD;AAChD,2CAAwC;AAExC;;;;;;GAMG;AACI,MAAM,kBAAkB,GAAG,CAAO,OAAgB,EAAE,OAAwB,EAAE,EAAE;IACrF,MAAM,MAAM,GAAG,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC;IACjC,IAAI,CAAC,OAAO,CAAC,sBAAsB,EAAE;QACnC,MAAM,IAAI,KAAK,CAAC,4CAA4C,CAAC,CAAC;KAC/D;IACD,MAAM,OAAO,GAAG,OAAO,CAAC,sBAAsB,CAAC,QAAQ,CAAC,OAAO,CAAC,WAAY,CAAC,CAAC,IAAI,CAAC;IAEnF,MAAM,WAAW,GAAG,IAAA,WAAI,EAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC1C,MAAM,YAAY,GAAG,IAAA,eAAU,EAAC,IAAA,WAAI,EAAC,WAAW,EAAE,mBAAmB,CAAC,CAAC;QACrE,CAAC,CAAC,IAAA,WAAI,EAAC,WAAW,EAAE,mBAAmB,CAAC;QACxC,CAAC,CAAC,IAAA,WAAI,EAAC,WAAW,EAAE,mBAAmB,CAAC,CAAC;IAE3C,IAAI,CAAC,YAAY,EAAE;QACjB,MAAM,IAAI,KAAK,CAAC,4CAA4C,CAAC,CAAC;KAC/D;IAED,MAAM,eAAe,GAAG,IAAA,WAAI,EAAC,WAAW,EAAE,YAAY,CAAC,CAAC;IACxD,IAAI,CAAC,IAAA,eAAU,EAAC,eAAe,CAAC,EAAE;QAChC,MAAM,IAAI,KAAK,CAAC,gCAAgC,WAAW;;;;;;;;;CAS9D,CAAC,CAAC;KACA;IAED,MAAM,IAAA,6BAAa,EAAC,EAAE,MAAM,EAAE,OAAO,CAAC,IAAI,EAAE,eAAe,EAAE,SAAS,EAAE,OAAO,CAAC,SAAS,EAAE,YAAY,EAAE,CAAC,CAAC;IAC3G,IAAI,OAAO,CAAC,GAAG,CAAC,UAAU,KAAK,MAAM,EAAE;QACrC,MAAM,IAAA,qBAAS,EAAC,IAAA,WAAI,EAAC,WAAW,EAAE,KAAK,EAAE,WAAW,EAAE,aAAa,EAAE,YAAY,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,SAAS,CAAC,CAAC;KAChH;IACD,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC;AACxB,CAAC,CAAA,CAAC;AAnCW,QAAA,kBAAkB,sBAmC7B;AAEF,kBAAe,0BAAkB,CAAC","sourcesContent":["import { ExecutorContext } from \"@nrwl/devkit\";\nimport { existsSync } from \"fs\";\nimport { join } from \"path\";\nimport { generateHooks } from \"./generateHooks\";\nimport { scrubFile } from \"./scrubFile\";\n\n/**\n * This executor generates react hooks for all graphql files.\n *\n * @param _unused unused props from nx\n * @param context The execution context for this executor\n * @returns {Promise<{ success: number; }>} success when finished\n */\nexport const CreateGraphqlHooks = async (_unused: unknown, context: ExecutorContext) => {\n const nxRoot = `${context.root}`;\n if (!context.projectsConfigurations) {\n throw new Error(\"context projectsConfigurations is required\");\n }\n const libRoot = context.projectsConfigurations.projects[context.projectName!].root;\n\n const fullLibRoot = join(nxRoot, libRoot);\n const tsConfigPath = existsSync(join(fullLibRoot, \"tsconfig.lib.json\"))\n ? join(fullLibRoot, \"tsconfig.lib.json\")\n : join(fullLibRoot, \"tsconfig.app.json\");\n\n if (!tsConfigPath) {\n throw new Error(\"context projectsConfigurations is required\");\n }\n\n const codeGenFilePath = join(fullLibRoot, \"codegen.ts\");\n if (!existsSync(codeGenFilePath)) {\n throw new Error(`codegen.ts file not found in ${fullLibRoot} please add this file and run again to generate hooks. The content should be\nimport { type CodegenConfig } from \"@graphql-codegen/cli\";\nimport { getGraphqlCodegenConfig } from \"@trackunit/iris-app-build-utilities\";\n\nconst config: CodegenConfig = {\n ...getGraphqlCodegenConfig(__dirname),\n // You can override codegen default config here\n};\nexport default config;\n`);\n }\n\n await generateHooks({ nxRoot: context.root, codeGenFilePath, isVerbose: context.isVerbose, tsConfigPath });\n if (process.env.SKIP_SCRUB !== \"true\") {\n await scrubFile(join(fullLibRoot, \"src\", \"generated\", \"graphql-api\", \"graphql.ts\"), nxRoot, context.isVerbose);\n }\n return { success: 1 };\n};\n\nexport default CreateGraphqlHooks;\n"]}
@@ -2,57 +2,24 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.generateHooks = void 0;
4
4
  const tslib_1 = require("tslib");
5
- const cli_1 = require("@graphql-codegen/cli");
6
- const scrubFile_1 = require("./scrubFile");
5
+ const child_process_1 = require("child_process");
7
6
  /**
8
7
  * Generates React hooks from your graphql files.
9
8
  *
10
- * @param schemaUrl schema url to use.
11
- * @param srcPath the srcPath to look for options glob.
12
- * @param options the options to use.
13
- * @param options.name the name of the output file.
14
- * @param options.graphqlGlob the options glob allows you to override the default.
15
- * @param options.plugins the options list of plugins to use.
16
- * @param options.overridePluginConfig the options list of overridePluginConfig.
9
+ * @param options.codeGenFilePath the path to the codegen file.
10
+ * @param options.nxRoot the nx root.
11
+ * @param options.tsConfigPath the path to the tsconfig file.
12
+ * @param options.isVerbose if true, will log more information.
17
13
  */
18
- const generateHooks = (schemaUrl, srcPath, nxRoot, options) => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
19
- options = Object.assign({ name: "generated/graphql-api.tsx", graphqlGlob: "*.graphql", plugins: ["typescript", "typescript-operations", "typescript-react-apollo"] }, options);
20
- const codegenOptions = {
21
- generates: {},
22
- };
23
- const outputFile = `${srcPath}/${options.name}`;
24
- codegenOptions.generates[`${srcPath}/${options.name}`] = Object.assign({ schema: schemaUrl, documents: `${srcPath}/**/${options.graphqlGlob}`, config: {
25
- withHooks: true,
26
- withHOC: false,
27
- withComponent: false,
28
- declarationKind: {
29
- // This makes scrubbing a lot easier! marking types as classes (then we remove those)
30
- type: "class",
31
- // This makes scrubbing a lot easier! marking input as interfaces (then we keep these)
32
- input: "interface",
33
- },
34
- // We need to do this later after scrubbing
35
- enumsAsConst: false,
36
- noExport: true,
37
- avoidOptionals: true,
38
- noNamespaces: true,
39
- namingConvention: {
40
- typeNames: "keep",
41
- enumValues: "pascal-case#pascalCase",
42
- },
43
- scalars: {
44
- Date: "Date",
45
- DateTime: "Date",
46
- },
47
- }, plugins: options.plugins }, options.overridePluginConfig);
48
- yield (0, cli_1.generate)(codegenOptions, true)
49
- .then(() => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
50
- yield (0, scrubFile_1.scrubFile)(outputFile, nxRoot, options.isVerbose);
51
- }))
52
- .catch(e => {
14
+ const generateHooks = (options) => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
15
+ const cmd = `./node_modules/.bin/graphql-codegen --config ${options.codeGenFilePath} --require tsconfig-paths/register --debug --verbose --project ${options.tsConfigPath}`;
16
+ if (options.isVerbose) {
53
17
  // eslint-disable-next-line no-console
54
- console.error("❌ There was an error generating GraphQL types", e);
55
- process.exit(1);
18
+ console.log(cmd);
19
+ }
20
+ (0, child_process_1.execSync)(cmd, {
21
+ stdio: options.isVerbose ? "inherit" : "ignore",
22
+ cwd: options.nxRoot,
56
23
  });
57
24
  });
58
25
  exports.generateHooks = generateHooks;
@@ -1 +1 @@
1
- {"version":3,"file":"generateHooks.js","sourceRoot":"","sources":["../../../../../../../libs/react/graphql-tools/src/executors/createHooks/generateHooks.ts"],"names":[],"mappings":";;;;AAAA,8CAA+D;AAC/D,2CAAwC;AAExC;;;;;;;;;;GAUG;AACI,MAAM,aAAa,GAAG,CAC3B,SAAiB,EACjB,OAAe,EACf,MAAc,EACd,OAMC,EACD,EAAE;IACF,OAAO,mBACL,IAAI,EAAE,2BAA2B,EACjC,WAAW,EAAE,WAAW,EACxB,OAAO,EAAE,CAAC,YAAY,EAAE,uBAAuB,EAAE,yBAAyB,CAAC,IACxE,OAAO,CACX,CAAC;IAEF,MAAM,cAAc,GAAkB;QACpC,SAAS,EAAE,EAAE;KACd,CAAC;IACF,MAAM,UAAU,GAAG,GAAG,OAAO,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;IAChD,cAAc,CAAC,SAAS,CAAC,GAAG,OAAO,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC,mBACpD,MAAM,EAAE,SAAS,EACjB,SAAS,EAAE,GAAG,OAAO,OAAO,OAAO,CAAC,WAAW,EAAE,EACjD,MAAM,EAAE;YACN,SAAS,EAAE,IAAI;YACf,OAAO,EAAE,KAAK;YACd,aAAa,EAAE,KAAK;YACpB,eAAe,EAAE;gBACf,qFAAqF;gBACrF,IAAI,EAAE,OAAO;gBACb,sFAAsF;gBACtF,KAAK,EAAE,WAAW;aACnB;YACD,2CAA2C;YAC3C,YAAY,EAAE,KAAK;YACnB,QAAQ,EAAE,IAAI;YACd,cAAc,EAAE,IAAI;YACpB,YAAY,EAAE,IAAI;YAClB,gBAAgB,EAAE;gBAChB,SAAS,EAAE,MAAM;gBACjB,UAAU,EAAE,wBAAwB;aACrC;YACD,OAAO,EAAE;gBACP,IAAI,EAAE,MAAM;gBACZ,QAAQ,EAAE,MAAM;aACjB;SACF,EACD,OAAO,EAAE,OAAO,CAAC,OAAO,IACrB,OAAO,CAAC,oBAAoB,CAChC,CAAC;IAEF,MAAM,IAAA,cAAQ,EAAC,cAAc,EAAE,IAAI,CAAC;SACjC,IAAI,CAAC,GAAS,EAAE;QACf,MAAM,IAAA,qBAAS,EAAC,UAAU,EAAE,MAAM,EAAE,OAAO,CAAC,SAAS,CAAC,CAAC;IACzD,CAAC,CAAA,CAAC;SACD,KAAK,CAAC,CAAC,CAAC,EAAE;QACT,sCAAsC;QACtC,OAAO,CAAC,KAAK,CAAC,+CAA+C,EAAE,CAAC,CAAC,CAAC;QAClE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC,CAAC,CAAC;AACP,CAAC,CAAA,CAAC;AA/DW,QAAA,aAAa,iBA+DxB","sourcesContent":["import { CodegenConfig, generate } from \"@graphql-codegen/cli\";\nimport { scrubFile } from \"./scrubFile\";\n\n/**\n * Generates React hooks from your graphql files.\n *\n * @param schemaUrl schema url to use.\n * @param srcPath the srcPath to look for options glob.\n * @param options the options to use.\n * @param options.name the name of the output file.\n * @param options.graphqlGlob the options glob allows you to override the default.\n * @param options.plugins the options list of plugins to use.\n * @param options.overridePluginConfig the options list of overridePluginConfig.\n */\nexport const generateHooks = async (\n schemaUrl: string,\n srcPath: string,\n nxRoot: string,\n options: {\n isVerbose?: boolean;\n name?: string;\n graphqlGlob?: string;\n plugins?: string[];\n overridePluginConfig?: CodegenConfig;\n }\n) => {\n options = {\n name: \"generated/graphql-api.tsx\",\n graphqlGlob: \"*.graphql\",\n plugins: [\"typescript\", \"typescript-operations\", \"typescript-react-apollo\"],\n ...options,\n };\n\n const codegenOptions: CodegenConfig = {\n generates: {},\n };\n const outputFile = `${srcPath}/${options.name}`;\n codegenOptions.generates[`${srcPath}/${options.name}`] = {\n schema: schemaUrl,\n documents: `${srcPath}/**/${options.graphqlGlob}`,\n config: {\n withHooks: true,\n withHOC: false,\n withComponent: false,\n declarationKind: {\n // This makes scrubbing a lot easier! marking types as classes (then we remove those)\n type: \"class\",\n // This makes scrubbing a lot easier! marking input as interfaces (then we keep these)\n input: \"interface\",\n },\n // We need to do this later after scrubbing\n enumsAsConst: false,\n noExport: true,\n avoidOptionals: true,\n noNamespaces: true,\n namingConvention: {\n typeNames: \"keep\",\n enumValues: \"pascal-case#pascalCase\",\n },\n scalars: {\n Date: \"Date\",\n DateTime: \"Date\",\n },\n },\n plugins: options.plugins,\n ...options.overridePluginConfig,\n };\n\n await generate(codegenOptions, true)\n .then(async () => {\n await scrubFile(outputFile, nxRoot, options.isVerbose);\n })\n .catch(e => {\n // eslint-disable-next-line no-console\n console.error(\"❌ There was an error generating GraphQL types\", e);\n process.exit(1);\n });\n};\n"]}
1
+ {"version":3,"file":"generateHooks.js","sourceRoot":"","sources":["../../../../../../../libs/react/graphql-tools/src/executors/createHooks/generateHooks.ts"],"names":[],"mappings":";;;;AAAA,iDAAyC;AACzC;;;;;;;GAOG;AACI,MAAM,aAAa,GAAG,CAAO,OAKnC,EAAE,EAAE;IACH,MAAM,GAAG,GAAG,gDAAgD,OAAO,CAAC,eAAe,kEAAkE,OAAO,CAAC,YAAY,EAAE,CAAC;IAC5K,IAAI,OAAO,CAAC,SAAS,EAAE;QACrB,sCAAsC;QACtC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;KAClB;IACD,IAAA,wBAAQ,EAAC,GAAG,EAAE;QACZ,KAAK,EAAE,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ;QAC/C,GAAG,EAAE,OAAO,CAAC,MAAM;KACpB,CAAC,CAAC;AACL,CAAC,CAAA,CAAC;AAfW,QAAA,aAAa,iBAexB","sourcesContent":["import { execSync } from \"child_process\";\n/**\n * Generates React hooks from your graphql files.\n *\n * @param options.codeGenFilePath the path to the codegen file.\n * @param options.nxRoot the nx root.\n * @param options.tsConfigPath the path to the tsconfig file.\n * @param options.isVerbose if true, will log more information.\n */\nexport const generateHooks = async (options: {\n codeGenFilePath: string;\n nxRoot: string;\n isVerbose?: boolean;\n tsConfigPath: string;\n}) => {\n const cmd = `./node_modules/.bin/graphql-codegen --config ${options.codeGenFilePath} --require tsconfig-paths/register --debug --verbose --project ${options.tsConfigPath}`;\n if (options.isVerbose) {\n // eslint-disable-next-line no-console\n console.log(cmd);\n }\n execSync(cmd, {\n stdio: options.isVerbose ? \"inherit\" : \"ignore\",\n cwd: options.nxRoot,\n });\n};\n"]}
@@ -47,7 +47,8 @@ const convertEnumToConstObject = (enumDeclaration) => {
47
47
  const value = member.getValue();
48
48
  return `${name}: '${value}'`;
49
49
  });
50
- const constObjectText = `export const ${enumName} = {\n ${properties.join(",\n ")},\n} as const;\nexport type ${enumName} = typeof ${enumName}[keyof typeof ${enumName}];`;
50
+ const lowerCaseFirstLetter = enumName[0].toLowerCase() + enumName.slice(1);
51
+ const constObjectText = `export const ${lowerCaseFirstLetter} = {\n ${properties.join(",\n ")},\n} as const;\nexport type ${enumName} = typeof ${lowerCaseFirstLetter}[keyof typeof ${lowerCaseFirstLetter}];`;
51
52
  // Replace the EnumDeclaration with the const object text
52
53
  enumDeclaration.replaceWithText(constObjectText);
53
54
  };
@@ -65,22 +66,31 @@ const scrubFileContent = (fileContent, nxRoot, isVerbose) => tslib_1.__awaiter(v
65
66
  const generatedFile = project.createSourceFile("tmp.ts", fileContent);
66
67
  generatedFile.insertStatements(0, "/* eslint-disable @typescript-eslint/no-explicit-any */");
67
68
  generatedFile.insertStatements(1, "/* eslint-disable @typescript-eslint/array-type */");
68
- // all return object types are defined as classes, where input types are defined as interfaces
69
- // therefore we can remove all classes.
70
- generatedFile.getClasses().forEach(node => {
71
- node.remove();
69
+ generatedFile.getTypeAliases().forEach(node => {
70
+ if (!node.getName().startsWith("Incremental")) {
71
+ node.setIsExported(false);
72
+ }
73
+ if (node.getName().startsWith("Query") ||
74
+ node.getName().startsWith("Mutation") ||
75
+ // Since they reference each other we remove them here.
76
+ node.getName() === "Site" ||
77
+ node.getName() === "Event" ||
78
+ node.getName() === "Asset") {
79
+ node.remove();
80
+ }
81
+ });
82
+ generatedFile.getEnums().forEach(node => {
83
+ node.setIsExported(false);
72
84
  });
73
85
  let lastWidth = 0;
74
86
  do {
75
87
  lastWidth = generatedFile.getFullWidth();
76
88
  removeUnusedIdentifiers(generatedFile);
77
89
  if (isVerbose) {
90
+ // eslint-disable-next-line no-console
78
91
  console.log("Cleanup", lastWidth, generatedFile.getFullWidth());
79
92
  }
80
93
  } while (lastWidth !== generatedFile.getFullWidth());
81
- generatedFile.getInterfaces().forEach(node => {
82
- node.setIsExported(true);
83
- });
84
94
  generatedFile.getTypeAliases().forEach(node => {
85
95
  node.setIsExported(true);
86
96
  });
@@ -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":["import { 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 constObjectText = `export const ${enumName} = {\\n ${properties.join(\n \",\\n \"\n )},\\n} as const;\\nexport type ${enumName} = typeof ${enumName}[keyof typeof ${enumName}];`;\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 // all return object types are defined as classes, where input types are defined as interfaces\n // therefore we can remove all classes.\n generatedFile.getClasses().forEach(node => {\n node.remove();\n });\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.getInterfaces().forEach(node => {\n node.setIsExported(true);\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 // eslint-disable-next-line no-console\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 scrubbedFileContent = await scrubFileContent(readFileSync(file, { encoding: \"utf-8\" }), 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 // eslint-disable-next-line no-console\n .catch((error: Error) => console.log(error));\n } catch (e) {\n // eslint-disable-next-line no-console\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":["import { 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 // eslint-disable-next-line no-console\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 // eslint-disable-next-line no-console\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 scrubbedFileContent = await scrubFileContent(readFileSync(file, { encoding: \"utf-8\" }), 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 // eslint-disable-next-line no-console\n .catch((error: Error) => console.log(error));\n } catch (e) {\n // eslint-disable-next-line no-console\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"]}