@7nohe/openapi-react-query-codegen 0.5.0 → 0.5.2

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/README.md CHANGED
@@ -14,6 +14,23 @@
14
14
  $ npm install -D @7nohe/openapi-react-query-codegen
15
15
  ```
16
16
 
17
+ Register the command to the `scripts` property in your package.json file.
18
+
19
+ ```json
20
+ {
21
+ "scripts": {
22
+ "codegen": "openapi-rq -i ./petstore.yaml -c axios"
23
+ }
24
+ }
25
+ ```
26
+
27
+ You can also run the command without installing it in your project using the npx command.
28
+
29
+ ```bash
30
+ $ npx --package @7nohe/openapi-react-query-codegen openapi-rq -i ./petstore.yaml -c axios
31
+ ```
32
+
33
+
17
34
  ## Usage
18
35
 
19
36
  ```
@@ -6,9 +6,9 @@ case `uname` in
6
6
  esac
7
7
 
8
8
  if [ -z "$NODE_PATH" ]; then
9
- export NODE_PATH="/Users/daikiurata/Development/openapi-react-query-codegen/node_modules/.pnpm/glob@10.3.10/node_modules/glob/dist/esm/node_modules:/Users/daikiurata/Development/openapi-react-query-codegen/node_modules/.pnpm/glob@10.3.10/node_modules/glob/dist/node_modules:/Users/daikiurata/Development/openapi-react-query-codegen/node_modules/.pnpm/glob@10.3.10/node_modules/glob/node_modules:/Users/daikiurata/Development/openapi-react-query-codegen/node_modules/.pnpm/glob@10.3.10/node_modules:/Users/daikiurata/Development/openapi-react-query-codegen/node_modules/.pnpm/node_modules"
9
+ export NODE_PATH="/Users/daiki/Development/openapi-react-query-codegen/node_modules/.pnpm/glob@10.3.10/node_modules/glob/dist/esm/node_modules:/Users/daiki/Development/openapi-react-query-codegen/node_modules/.pnpm/glob@10.3.10/node_modules/glob/dist/node_modules:/Users/daiki/Development/openapi-react-query-codegen/node_modules/.pnpm/glob@10.3.10/node_modules/glob/node_modules:/Users/daiki/Development/openapi-react-query-codegen/node_modules/.pnpm/glob@10.3.10/node_modules:/Users/daiki/Development/openapi-react-query-codegen/node_modules/.pnpm/node_modules"
10
10
  else
11
- export NODE_PATH="/Users/daikiurata/Development/openapi-react-query-codegen/node_modules/.pnpm/glob@10.3.10/node_modules/glob/dist/esm/node_modules:/Users/daikiurata/Development/openapi-react-query-codegen/node_modules/.pnpm/glob@10.3.10/node_modules/glob/dist/node_modules:/Users/daikiurata/Development/openapi-react-query-codegen/node_modules/.pnpm/glob@10.3.10/node_modules/glob/node_modules:/Users/daikiurata/Development/openapi-react-query-codegen/node_modules/.pnpm/glob@10.3.10/node_modules:/Users/daikiurata/Development/openapi-react-query-codegen/node_modules/.pnpm/node_modules:$NODE_PATH"
11
+ export NODE_PATH="/Users/daiki/Development/openapi-react-query-codegen/node_modules/.pnpm/glob@10.3.10/node_modules/glob/dist/esm/node_modules:/Users/daiki/Development/openapi-react-query-codegen/node_modules/.pnpm/glob@10.3.10/node_modules/glob/dist/node_modules:/Users/daiki/Development/openapi-react-query-codegen/node_modules/.pnpm/glob@10.3.10/node_modules/glob/node_modules:/Users/daiki/Development/openapi-react-query-codegen/node_modules/.pnpm/glob@10.3.10/node_modules:/Users/daiki/Development/openapi-react-query-codegen/node_modules/.pnpm/node_modules:$NODE_PATH"
12
12
  fi
13
13
  if [ -x "$basedir/node" ]; then
14
14
  exec "$basedir/node" "$basedir/../glob/dist/esm/bin.mjs" "$@"
@@ -6,9 +6,9 @@ case `uname` in
6
6
  esac
7
7
 
8
8
  if [ -z "$NODE_PATH" ]; then
9
- export NODE_PATH="/Users/daikiurata/Development/openapi-react-query-codegen/node_modules/.pnpm/openapi-typescript-codegen@0.25.0/node_modules/openapi-typescript-codegen/bin/node_modules:/Users/daikiurata/Development/openapi-react-query-codegen/node_modules/.pnpm/openapi-typescript-codegen@0.25.0/node_modules/openapi-typescript-codegen/node_modules:/Users/daikiurata/Development/openapi-react-query-codegen/node_modules/.pnpm/openapi-typescript-codegen@0.25.0/node_modules:/Users/daikiurata/Development/openapi-react-query-codegen/node_modules/.pnpm/node_modules"
9
+ export NODE_PATH="/Users/daiki/Development/openapi-react-query-codegen/node_modules/.pnpm/openapi-typescript-codegen@0.25.0/node_modules/openapi-typescript-codegen/bin/node_modules:/Users/daiki/Development/openapi-react-query-codegen/node_modules/.pnpm/openapi-typescript-codegen@0.25.0/node_modules/openapi-typescript-codegen/node_modules:/Users/daiki/Development/openapi-react-query-codegen/node_modules/.pnpm/openapi-typescript-codegen@0.25.0/node_modules:/Users/daiki/Development/openapi-react-query-codegen/node_modules/.pnpm/node_modules"
10
10
  else
11
- export NODE_PATH="/Users/daikiurata/Development/openapi-react-query-codegen/node_modules/.pnpm/openapi-typescript-codegen@0.25.0/node_modules/openapi-typescript-codegen/bin/node_modules:/Users/daikiurata/Development/openapi-react-query-codegen/node_modules/.pnpm/openapi-typescript-codegen@0.25.0/node_modules/openapi-typescript-codegen/node_modules:/Users/daikiurata/Development/openapi-react-query-codegen/node_modules/.pnpm/openapi-typescript-codegen@0.25.0/node_modules:/Users/daikiurata/Development/openapi-react-query-codegen/node_modules/.pnpm/node_modules:$NODE_PATH"
11
+ export NODE_PATH="/Users/daiki/Development/openapi-react-query-codegen/node_modules/.pnpm/openapi-typescript-codegen@0.25.0/node_modules/openapi-typescript-codegen/bin/node_modules:/Users/daiki/Development/openapi-react-query-codegen/node_modules/.pnpm/openapi-typescript-codegen@0.25.0/node_modules/openapi-typescript-codegen/node_modules:/Users/daiki/Development/openapi-react-query-codegen/node_modules/.pnpm/openapi-typescript-codegen@0.25.0/node_modules:/Users/daiki/Development/openapi-react-query-codegen/node_modules/.pnpm/node_modules:$NODE_PATH"
12
12
  fi
13
13
  if [ -x "$basedir/node" ]; then
14
14
  exec "$basedir/node" "$basedir/../openapi-typescript-codegen/bin/index.js" "$@"
@@ -6,9 +6,9 @@ case `uname` in
6
6
  esac
7
7
 
8
8
  if [ -z "$NODE_PATH" ]; then
9
- export NODE_PATH="/Users/daikiurata/Development/openapi-react-query-codegen/node_modules/.pnpm/typescript@5.2.2/node_modules/typescript/bin/node_modules:/Users/daikiurata/Development/openapi-react-query-codegen/node_modules/.pnpm/typescript@5.2.2/node_modules/typescript/node_modules:/Users/daikiurata/Development/openapi-react-query-codegen/node_modules/.pnpm/typescript@5.2.2/node_modules:/Users/daikiurata/Development/openapi-react-query-codegen/node_modules/.pnpm/node_modules"
9
+ export NODE_PATH="/Users/daiki/Development/openapi-react-query-codegen/node_modules/.pnpm/typescript@5.2.2/node_modules/typescript/bin/node_modules:/Users/daiki/Development/openapi-react-query-codegen/node_modules/.pnpm/typescript@5.2.2/node_modules/typescript/node_modules:/Users/daiki/Development/openapi-react-query-codegen/node_modules/.pnpm/typescript@5.2.2/node_modules:/Users/daiki/Development/openapi-react-query-codegen/node_modules/.pnpm/node_modules"
10
10
  else
11
- export NODE_PATH="/Users/daikiurata/Development/openapi-react-query-codegen/node_modules/.pnpm/typescript@5.2.2/node_modules/typescript/bin/node_modules:/Users/daikiurata/Development/openapi-react-query-codegen/node_modules/.pnpm/typescript@5.2.2/node_modules/typescript/node_modules:/Users/daikiurata/Development/openapi-react-query-codegen/node_modules/.pnpm/typescript@5.2.2/node_modules:/Users/daikiurata/Development/openapi-react-query-codegen/node_modules/.pnpm/node_modules:$NODE_PATH"
11
+ export NODE_PATH="/Users/daiki/Development/openapi-react-query-codegen/node_modules/.pnpm/typescript@5.2.2/node_modules/typescript/bin/node_modules:/Users/daiki/Development/openapi-react-query-codegen/node_modules/.pnpm/typescript@5.2.2/node_modules/typescript/node_modules:/Users/daiki/Development/openapi-react-query-codegen/node_modules/.pnpm/typescript@5.2.2/node_modules:/Users/daiki/Development/openapi-react-query-codegen/node_modules/.pnpm/node_modules:$NODE_PATH"
12
12
  fi
13
13
  if [ -x "$basedir/node" ]; then
14
14
  exec "$basedir/node" "$basedir/../typescript/bin/tsc" "$@"
@@ -6,9 +6,9 @@ case `uname` in
6
6
  esac
7
7
 
8
8
  if [ -z "$NODE_PATH" ]; then
9
- export NODE_PATH="/Users/daikiurata/Development/openapi-react-query-codegen/node_modules/.pnpm/typescript@5.2.2/node_modules/typescript/bin/node_modules:/Users/daikiurata/Development/openapi-react-query-codegen/node_modules/.pnpm/typescript@5.2.2/node_modules/typescript/node_modules:/Users/daikiurata/Development/openapi-react-query-codegen/node_modules/.pnpm/typescript@5.2.2/node_modules:/Users/daikiurata/Development/openapi-react-query-codegen/node_modules/.pnpm/node_modules"
9
+ export NODE_PATH="/Users/daiki/Development/openapi-react-query-codegen/node_modules/.pnpm/typescript@5.2.2/node_modules/typescript/bin/node_modules:/Users/daiki/Development/openapi-react-query-codegen/node_modules/.pnpm/typescript@5.2.2/node_modules/typescript/node_modules:/Users/daiki/Development/openapi-react-query-codegen/node_modules/.pnpm/typescript@5.2.2/node_modules:/Users/daiki/Development/openapi-react-query-codegen/node_modules/.pnpm/node_modules"
10
10
  else
11
- export NODE_PATH="/Users/daikiurata/Development/openapi-react-query-codegen/node_modules/.pnpm/typescript@5.2.2/node_modules/typescript/bin/node_modules:/Users/daikiurata/Development/openapi-react-query-codegen/node_modules/.pnpm/typescript@5.2.2/node_modules/typescript/node_modules:/Users/daikiurata/Development/openapi-react-query-codegen/node_modules/.pnpm/typescript@5.2.2/node_modules:/Users/daikiurata/Development/openapi-react-query-codegen/node_modules/.pnpm/node_modules:$NODE_PATH"
11
+ export NODE_PATH="/Users/daiki/Development/openapi-react-query-codegen/node_modules/.pnpm/typescript@5.2.2/node_modules/typescript/bin/node_modules:/Users/daiki/Development/openapi-react-query-codegen/node_modules/.pnpm/typescript@5.2.2/node_modules/typescript/node_modules:/Users/daiki/Development/openapi-react-query-codegen/node_modules/.pnpm/typescript@5.2.2/node_modules:/Users/daiki/Development/openapi-react-query-codegen/node_modules/.pnpm/node_modules:$NODE_PATH"
12
12
  fi
13
13
  if [ -x "$basedir/node" ]; then
14
14
  exec "$basedir/node" "$basedir/../typescript/bin/tsserver" "$@"
package/dist/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@7nohe/openapi-react-query-codegen",
3
- "version": "0.5.0",
3
+ "version": "0.5.2",
4
4
  "description": "OpenAPI React Query Codegen",
5
5
  "bin": {
6
6
  "openapi-rq": "dist/src/cli.js"
@@ -36,7 +36,7 @@
36
36
  "commander": "^11.1.0",
37
37
  "glob": "^10.2.5",
38
38
  "openapi-typescript-codegen": "^0.25.0",
39
- "typescript": "^5.0.4"
39
+ "typescript": "^5.2.2"
40
40
  },
41
41
  "peerDependencies": {
42
42
  "commander": ">= 11 < 12",
@@ -11,9 +11,9 @@ const fs_1 = __importDefault(require("fs"));
11
11
  const createUseQuery_1 = require("./createUseQuery");
12
12
  const createUseMutation_1 = require("./createUseMutation");
13
13
  const createExports = (generatedClientsPath) => {
14
- const services = (0, glob_1.sync)((0, path_1.join)(generatedClientsPath, 'services', '*.ts').replace(/\\/g, '/'));
14
+ const services = (0, glob_1.sync)((0, path_1.join)(generatedClientsPath, "services", "*.ts").replace(/\\/g, "/"));
15
15
  const nodes = services.map((servicePath) => typescript_1.default.createSourceFile(servicePath, // fileName
16
- fs_1.default.readFileSync((0, path_1.join)(process.cwd(), servicePath), "utf8"), typescript_1.default.ScriptTarget.Latest // langugeVersion
16
+ fs_1.default.readFileSync((0, path_1.join)(process.cwd(), servicePath), "utf8"), typescript_1.default.ScriptTarget.Latest // languageVersion
17
17
  ));
18
18
  return [
19
19
  ...nodes
@@ -26,7 +26,6 @@ const createExports = (generatedClientsPath) => {
26
26
  const methods = klass.members.filter((node) => node.kind === typescript_1.default.SyntaxKind.MethodDeclaration);
27
27
  return methods
28
28
  .map((method) => {
29
- const methodName = method.name?.getText(node);
30
29
  const methodBlock = method
31
30
  .getChildren(node)
32
31
  .find((child) => child.kind === typescript_1.default.SyntaxKind.Block);
@@ -36,9 +35,23 @@ const createExports = (generatedClientsPath) => {
36
35
  const httpMethodName = properties
37
36
  .find((p) => p.name?.getText(node) === "method")
38
37
  ?.initializer?.getText(node);
38
+ const getAllChildren = (tsNode) => {
39
+ const childItems = tsNode.getChildren(node);
40
+ if (childItems.length) {
41
+ const allChildren = childItems.map(getAllChildren);
42
+ return [tsNode].concat(allChildren.flat());
43
+ }
44
+ return [tsNode];
45
+ };
46
+ const children = getAllChildren(method);
47
+ const jsDoc = children.filter((c) => c.kind === typescript_1.default.SyntaxKind.JSDoc).map((c) => {
48
+ return c.comment;
49
+ });
50
+ const hasDeprecated = children
51
+ .some((c) => c.kind === typescript_1.default.SyntaxKind.JSDocDeprecatedTag);
39
52
  return httpMethodName === "'GET'"
40
- ? (0, createUseQuery_1.createUseQuery)(node, className, method)
41
- : (0, createUseMutation_1.createUseMutation)(node, className, method);
53
+ ? (0, createUseQuery_1.createUseQuery)(node, className, method, jsDoc, hasDeprecated)
54
+ : (0, createUseMutation_1.createUseMutation)(node, className, method, jsDoc, hasDeprecated);
42
55
  })
43
56
  .flat();
44
57
  })
@@ -9,14 +9,16 @@ const glob_1 = require("glob");
9
9
  const path_1 = require("path");
10
10
  const { join } = path_1.posix;
11
11
  const createImports = (generatedClientsPath) => {
12
- const models = (0, glob_1.sync)(join(generatedClientsPath, 'models', '*.ts').replace(/\\/g, '/'));
13
- const services = (0, glob_1.sync)(join(generatedClientsPath, 'services', '*.ts').replace(/\\/g, '/'));
12
+ const models = (0, glob_1.sync)(join(generatedClientsPath, "models", "*.ts").replace(/\\/g, "/"));
13
+ const services = (0, glob_1.sync)(join(generatedClientsPath, "services", "*.ts").replace(/\\/g, "/"));
14
14
  return [
15
15
  typescript_1.default.factory.createImportDeclaration(undefined, typescript_1.default.factory.createImportClause(false, undefined, typescript_1.default.factory.createNamedImports([
16
16
  typescript_1.default.factory.createImportSpecifier(false, undefined, typescript_1.default.factory.createIdentifier("useQuery")),
17
17
  typescript_1.default.factory.createImportSpecifier(false, undefined, typescript_1.default.factory.createIdentifier("useMutation")),
18
+ typescript_1.default.factory.createImportSpecifier(false, undefined, typescript_1.default.factory.createIdentifier("UseQueryResult")),
18
19
  typescript_1.default.factory.createImportSpecifier(false, undefined, typescript_1.default.factory.createIdentifier("UseQueryOptions")),
19
20
  typescript_1.default.factory.createImportSpecifier(false, undefined, typescript_1.default.factory.createIdentifier("UseMutationOptions")),
21
+ typescript_1.default.factory.createImportSpecifier(false, undefined, typescript_1.default.factory.createIdentifier("UseMutationResult")),
20
22
  ])), typescript_1.default.factory.createStringLiteral("@tanstack/react-query"), undefined),
21
23
  ...models.map((model) => {
22
24
  const modelName = (0, path_1.basename)(model, (0, path_1.extname)(model));
@@ -7,13 +7,19 @@ exports.createSource = void 0;
7
7
  const typescript_1 = __importDefault(require("typescript"));
8
8
  const createImports_1 = require("./createImports");
9
9
  const createExports_1 = require("./createExports");
10
+ const package_json_1 = require("../package.json");
10
11
  const createSourceFile = (outputPath) => {
11
12
  return typescript_1.default.factory.createSourceFile([...(0, createImports_1.createImports)(outputPath), ...(0, createExports_1.createExports)(outputPath)], typescript_1.default.factory.createToken(typescript_1.default.SyntaxKind.EndOfFileToken), typescript_1.default.NodeFlags.None);
12
13
  };
13
14
  const createSource = (outputPath) => {
14
15
  const resultFile = typescript_1.default.createSourceFile("index.ts", "", typescript_1.default.ScriptTarget.Latest, false, typescript_1.default.ScriptKind.TS);
15
- const printer = typescript_1.default.createPrinter({ newLine: typescript_1.default.NewLineKind.LineFeed });
16
- const result = printer.printNode(typescript_1.default.EmitHint.Unspecified, createSourceFile(outputPath), resultFile);
16
+ const printer = typescript_1.default.createPrinter({
17
+ newLine: typescript_1.default.NewLineKind.LineFeed,
18
+ removeComments: false,
19
+ });
20
+ const node = createSourceFile(outputPath);
21
+ const result = `// generated with @7nohe/openapi-react-query-codegen@${package_json_1.version} \n` +
22
+ printer.printNode(typescript_1.default.EmitHint.Unspecified, node, resultFile);
17
23
  return result;
18
24
  };
19
25
  exports.createSource = createSource;
@@ -6,35 +6,61 @@ Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.createUseMutation = void 0;
7
7
  const typescript_1 = __importDefault(require("typescript"));
8
8
  const common_1 = require("./common");
9
- const createUseMutation = (node, className, method) => {
9
+ const util_1 = require("./util");
10
+ const createUseMutation = (node, className, method, jsDoc = [], deprecated = false) => {
10
11
  const methodName = method.name?.getText(node);
11
- return typescript_1.default.factory.createVariableStatement([typescript_1.default.factory.createModifier(typescript_1.default.SyntaxKind.ExportKeyword)], typescript_1.default.factory.createVariableDeclarationList([
12
- typescript_1.default.factory.createVariableDeclaration(typescript_1.default.factory.createIdentifier(`use${className}${(0, common_1.capitalizeFirstLetter)(methodName)}`), undefined, undefined, typescript_1.default.factory.createArrowFunction(undefined, undefined, [
12
+ // Awaited<ReturnType<typeof myClass.myMethod>>
13
+ const awaitedResponseDataType = typescript_1.default.factory.createTypeReferenceNode(typescript_1.default.factory.createIdentifier("Awaited"), [
14
+ typescript_1.default.factory.createTypeReferenceNode(typescript_1.default.factory.createIdentifier("ReturnType"), [
15
+ typescript_1.default.factory.createTypeQueryNode(typescript_1.default.factory.createQualifiedName(typescript_1.default.factory.createIdentifier(className), typescript_1.default.factory.createIdentifier(methodName)), undefined),
16
+ ]),
17
+ ]);
18
+ const TData = typescript_1.default.factory.createIdentifier("TData");
19
+ const TError = typescript_1.default.factory.createIdentifier("TError");
20
+ const TContext = typescript_1.default.factory.createIdentifier("TContext");
21
+ const mutationResult = typescript_1.default.factory.createTypeAliasDeclaration([typescript_1.default.factory.createModifier(typescript_1.default.SyntaxKind.ExportKeyword)], typescript_1.default.factory.createIdentifier(`${className}${methodName}MutationResult`), undefined, awaitedResponseDataType);
22
+ const responseDataType = typescript_1.default.factory.createTypeParameterDeclaration(undefined, TData, undefined, typescript_1.default.factory.createTypeReferenceNode(mutationResult.name));
23
+ const methodParameters = method.parameters.length !== 0
24
+ ? typescript_1.default.factory.createTypeLiteralNode(method.parameters.map((param) => {
25
+ return typescript_1.default.factory.createPropertySignature(undefined, typescript_1.default.factory.createIdentifier(param.name.getText(node)), param.questionToken ?? param.initializer
26
+ ? typescript_1.default.factory.createToken(typescript_1.default.SyntaxKind.QuestionToken)
27
+ : param.questionToken, param.type);
28
+ }))
29
+ : typescript_1.default.factory.createKeywordTypeNode(typescript_1.default.SyntaxKind.VoidKeyword);
30
+ const exportHook = typescript_1.default.factory.createVariableStatement([typescript_1.default.factory.createModifier(typescript_1.default.SyntaxKind.ExportKeyword)], typescript_1.default.factory.createVariableDeclarationList([
31
+ typescript_1.default.factory.createVariableDeclaration(typescript_1.default.factory.createIdentifier(`use${className}${(0, common_1.capitalizeFirstLetter)(methodName)}`), undefined, undefined, typescript_1.default.factory.createArrowFunction(undefined, typescript_1.default.factory.createNodeArray([
32
+ responseDataType,
33
+ typescript_1.default.factory.createTypeParameterDeclaration(undefined, TError, undefined, typescript_1.default.factory.createKeywordTypeNode(typescript_1.default.SyntaxKind.UnknownKeyword)),
34
+ typescript_1.default.factory.createTypeParameterDeclaration(undefined, TContext, undefined, typescript_1.default.factory.createKeywordTypeNode(typescript_1.default.SyntaxKind.UnknownKeyword)),
35
+ ]), [
13
36
  typescript_1.default.factory.createParameterDeclaration(undefined, undefined, typescript_1.default.factory.createIdentifier("options"), typescript_1.default.factory.createToken(typescript_1.default.SyntaxKind.QuestionToken), typescript_1.default.factory.createTypeReferenceNode(typescript_1.default.factory.createIdentifier("Omit"), [
14
37
  typescript_1.default.factory.createTypeReferenceNode(typescript_1.default.factory.createIdentifier("UseMutationOptions"), [
15
- typescript_1.default.factory.createTypeReferenceNode(typescript_1.default.factory.createIdentifier("Awaited"), [
16
- typescript_1.default.factory.createTypeReferenceNode(typescript_1.default.factory.createIdentifier("ReturnType"), [
17
- typescript_1.default.factory.createTypeQueryNode(typescript_1.default.factory.createQualifiedName(typescript_1.default.factory.createIdentifier(className), typescript_1.default.factory.createIdentifier(methodName)), undefined),
18
- ]),
19
- ]),
20
- typescript_1.default.factory.createKeywordTypeNode(typescript_1.default.SyntaxKind.UnknownKeyword),
21
- method.parameters.length !== 0 ? typescript_1.default.factory.createTypeLiteralNode(method.parameters.map((param) => {
22
- return typescript_1.default.factory.createPropertySignature(undefined, typescript_1.default.factory.createIdentifier(param.name.getText(node)), param.questionToken ?? param.initializer ? typescript_1.default.factory.createToken(typescript_1.default.SyntaxKind.QuestionToken) : param.questionToken, param.type);
23
- })) : typescript_1.default.factory.createKeywordTypeNode(typescript_1.default.SyntaxKind.VoidKeyword),
24
- typescript_1.default.factory.createKeywordTypeNode(typescript_1.default.SyntaxKind.UnknownKeyword),
38
+ typescript_1.default.factory.createTypeReferenceNode(TData),
39
+ typescript_1.default.factory.createTypeReferenceNode(TError),
40
+ methodParameters,
41
+ typescript_1.default.factory.createTypeReferenceNode(TContext),
25
42
  ]),
26
43
  typescript_1.default.factory.createLiteralTypeNode(typescript_1.default.factory.createStringLiteral("mutationFn")),
27
44
  ]), undefined),
28
- ], undefined, typescript_1.default.factory.createToken(typescript_1.default.SyntaxKind.EqualsGreaterThanToken), typescript_1.default.factory.createCallExpression(typescript_1.default.factory.createIdentifier("useMutation"), undefined, [
45
+ ], undefined, typescript_1.default.factory.createToken(typescript_1.default.SyntaxKind.EqualsGreaterThanToken), typescript_1.default.factory.createCallExpression(typescript_1.default.factory.createIdentifier("useMutation"), [
46
+ typescript_1.default.factory.createTypeReferenceNode(TData),
47
+ typescript_1.default.factory.createTypeReferenceNode(TError),
48
+ methodParameters,
49
+ typescript_1.default.factory.createTypeReferenceNode(TContext),
50
+ ], [
29
51
  typescript_1.default.factory.createObjectLiteralExpression([
30
- typescript_1.default.factory.createPropertyAssignment(typescript_1.default.factory.createIdentifier("mutationFn"), typescript_1.default.factory.createArrowFunction(undefined, undefined, method.parameters.length !== 0 ? [
31
- typescript_1.default.factory.createParameterDeclaration(undefined, undefined, typescript_1.default.factory.createObjectBindingPattern(method.parameters.map((param) => {
32
- return typescript_1.default.factory.createBindingElement(undefined, undefined, typescript_1.default.factory.createIdentifier(param.name.getText(node)), undefined);
33
- })), undefined, undefined, undefined),
34
- ] : [], undefined, typescript_1.default.factory.createToken(typescript_1.default.SyntaxKind.EqualsGreaterThanToken), typescript_1.default.factory.createCallExpression(typescript_1.default.factory.createPropertyAccessExpression(typescript_1.default.factory.createIdentifier(className), typescript_1.default.factory.createIdentifier(methodName)), undefined, method.parameters.map((params) => typescript_1.default.factory.createIdentifier(params.name.getText(node)))))),
52
+ typescript_1.default.factory.createPropertyAssignment(typescript_1.default.factory.createIdentifier("mutationFn"), typescript_1.default.factory.createArrowFunction(undefined, undefined, method.parameters.length !== 0
53
+ ? [
54
+ typescript_1.default.factory.createParameterDeclaration(undefined, undefined, typescript_1.default.factory.createObjectBindingPattern(method.parameters.map((param) => {
55
+ return typescript_1.default.factory.createBindingElement(undefined, undefined, typescript_1.default.factory.createIdentifier(param.name.getText(node)), undefined);
56
+ })), undefined, undefined, undefined),
57
+ ]
58
+ : [], undefined, typescript_1.default.factory.createToken(typescript_1.default.SyntaxKind.EqualsGreaterThanToken), typescript_1.default.factory.createAsExpression(typescript_1.default.factory.createAsExpression(typescript_1.default.factory.createCallExpression(typescript_1.default.factory.createPropertyAccessExpression(typescript_1.default.factory.createIdentifier(className), typescript_1.default.factory.createIdentifier(methodName)), undefined, method.parameters.map((params) => typescript_1.default.factory.createIdentifier(params.name.getText(node)))), typescript_1.default.factory.createKeywordTypeNode(typescript_1.default.SyntaxKind.UnknownKeyword)), typescript_1.default.factory.createTypeReferenceNode(typescript_1.default.factory.createIdentifier("Promise"), [typescript_1.default.factory.createTypeReferenceNode(TData)])))),
35
59
  typescript_1.default.factory.createSpreadAssignment(typescript_1.default.factory.createIdentifier("options")),
36
60
  ]),
37
61
  ]))),
38
62
  ], typescript_1.default.NodeFlags.Const));
63
+ const hookWithJsDoc = (0, util_1.addJSDocToNode)(exportHook, node, deprecated, jsDoc);
64
+ return [mutationResult, hookWithJsDoc];
39
65
  };
40
66
  exports.createUseMutation = createUseMutation;
@@ -6,62 +6,85 @@ Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.createUseQuery = void 0;
7
7
  const typescript_1 = __importDefault(require("typescript"));
8
8
  const common_1 = require("./common");
9
- const createUseQuery = (node, className, method) => {
9
+ const util_1 = require("./util");
10
+ const createUseQuery = (node, className, method, jsDoc = [], deprecated = false) => {
10
11
  const methodName = method.name?.getText(node);
11
12
  let requestParam = [];
12
13
  if (method.parameters.length !== 0) {
13
- requestParam.push(typescript_1.default.factory.createParameterDeclaration(undefined, undefined, typescript_1.default.factory.createObjectBindingPattern(method.parameters.map((param) => typescript_1.default.factory.createBindingElement(undefined, undefined, typescript_1.default.factory.createIdentifier(param.name.getText(node)), undefined))), undefined, typescript_1.default.factory.createTypeLiteralNode(method.parameters.map((param) => typescript_1.default.factory.createPropertySignature(undefined, typescript_1.default.factory.createIdentifier(param.name.getText(node)), param.questionToken ?? param.initializer ? typescript_1.default.factory.createToken(typescript_1.default.SyntaxKind.QuestionToken) : param.questionToken, param.type)))));
14
+ requestParam.push(typescript_1.default.factory.createParameterDeclaration(undefined, undefined, typescript_1.default.factory.createObjectBindingPattern(method.parameters.map((param) => typescript_1.default.factory.createBindingElement(undefined, undefined, typescript_1.default.factory.createIdentifier(param.name.getText(node)), undefined))), undefined, typescript_1.default.factory.createTypeLiteralNode(method.parameters.map((param) => typescript_1.default.factory.createPropertySignature(undefined, typescript_1.default.factory.createIdentifier(param.name.getText(node)), param.questionToken ?? param.initializer
15
+ ? typescript_1.default.factory.createToken(typescript_1.default.SyntaxKind.QuestionToken)
16
+ : param.questionToken, param.type)))));
14
17
  }
15
18
  const customHookName = `use${className}${(0, common_1.capitalizeFirstLetter)(methodName)}`;
16
19
  const queryKey = `${customHookName}Key`;
17
- const queryKeyGenericType = typescript_1.default.factory.createTypeReferenceNode('TQueryKey', undefined);
18
- const queryKeyConstraint = typescript_1.default.factory.createTypeReferenceNode('Array', [typescript_1.default.factory.createKeywordTypeNode(typescript_1.default.SyntaxKind.UnknownKeyword)]);
19
- return [
20
- typescript_1.default.factory.createVariableStatement([typescript_1.default.factory.createModifier(typescript_1.default.SyntaxKind.ExportKeyword)], typescript_1.default.factory.createVariableDeclarationList([
21
- typescript_1.default.factory.createVariableDeclaration(typescript_1.default.factory.createIdentifier(queryKey), undefined, undefined, typescript_1.default.factory.createStringLiteral(`${className}${(0, common_1.capitalizeFirstLetter)(methodName)}`)),
22
- ], typescript_1.default.NodeFlags.Const)),
23
- typescript_1.default.factory.createVariableStatement([typescript_1.default.factory.createModifier(typescript_1.default.SyntaxKind.ExportKeyword)], typescript_1.default.factory.createVariableDeclarationList([
24
- typescript_1.default.factory.createVariableDeclaration(typescript_1.default.factory.createIdentifier(customHookName), undefined, undefined, typescript_1.default.factory.createArrowFunction(undefined, typescript_1.default.factory.createNodeArray([
25
- typescript_1.default.factory.createTypeParameterDeclaration(undefined, "TQueryKey", queryKeyConstraint, typescript_1.default.factory.createArrayTypeNode(typescript_1.default.factory.createKeywordTypeNode(typescript_1.default.SyntaxKind.UnknownKeyword))),
26
- ]), [
27
- ...requestParam,
28
- typescript_1.default.factory.createParameterDeclaration(undefined, undefined, typescript_1.default.factory.createIdentifier("queryKey"), typescript_1.default.factory.createToken(typescript_1.default.SyntaxKind.QuestionToken), queryKeyGenericType),
29
- typescript_1.default.factory.createParameterDeclaration(undefined, undefined, typescript_1.default.factory.createIdentifier("options"), typescript_1.default.factory.createToken(typescript_1.default.SyntaxKind.QuestionToken), typescript_1.default.factory.createTypeReferenceNode(typescript_1.default.factory.createIdentifier("Omit"), [
30
- typescript_1.default.factory.createTypeReferenceNode(typescript_1.default.factory.createIdentifier("UseQueryOptions"), [
31
- typescript_1.default.factory.createTypeReferenceNode(typescript_1.default.factory.createIdentifier("Awaited"), [
32
- typescript_1.default.factory.createTypeReferenceNode(typescript_1.default.factory.createIdentifier("ReturnType"), [
33
- typescript_1.default.factory.createTypeQueryNode(typescript_1.default.factory.createQualifiedName(typescript_1.default.factory.createIdentifier(className), typescript_1.default.factory.createIdentifier(methodName)), undefined),
34
- ]),
35
- ]),
36
- typescript_1.default.factory.createKeywordTypeNode(typescript_1.default.SyntaxKind.UnknownKeyword),
37
- typescript_1.default.factory.createTypeReferenceNode(typescript_1.default.factory.createIdentifier("Awaited"), [
38
- typescript_1.default.factory.createTypeReferenceNode(typescript_1.default.factory.createIdentifier("ReturnType"), [
39
- typescript_1.default.factory.createTypeQueryNode(typescript_1.default.factory.createQualifiedName(typescript_1.default.factory.createIdentifier(className), typescript_1.default.factory.createIdentifier(methodName)), undefined),
40
- ]),
41
- ]),
42
- typescript_1.default.factory.createArrayTypeNode(typescript_1.default.factory.createKeywordTypeNode(typescript_1.default.SyntaxKind.UnknownKeyword)),
43
- ]),
44
- typescript_1.default.factory.createUnionTypeNode([
45
- typescript_1.default.factory.createLiteralTypeNode(typescript_1.default.factory.createStringLiteral("queryKey")),
46
- typescript_1.default.factory.createLiteralTypeNode(typescript_1.default.factory.createStringLiteral("queryFn")),
47
- typescript_1.default.factory.createLiteralTypeNode(typescript_1.default.factory.createStringLiteral("initialData")),
48
- ]),
49
- ])),
50
- ], undefined, typescript_1.default.factory.createToken(typescript_1.default.SyntaxKind.EqualsGreaterThanToken), typescript_1.default.factory.createCallExpression(typescript_1.default.factory.createIdentifier("useQuery"), undefined, [
51
- typescript_1.default.factory.createObjectLiteralExpression([
52
- typescript_1.default.factory.createPropertyAssignment(typescript_1.default.factory.createIdentifier("queryKey"), typescript_1.default.factory.createArrayLiteralExpression([
53
- typescript_1.default.factory.createIdentifier(queryKey),
54
- typescript_1.default.factory.createSpreadElement(typescript_1.default.factory.createParenthesizedExpression(typescript_1.default.factory.createBinaryExpression(typescript_1.default.factory.createIdentifier("queryKey"), typescript_1.default.factory.createToken(typescript_1.default.SyntaxKind.QuestionQuestionToken), method.parameters.length
55
- ? typescript_1.default.factory.createArrayLiteralExpression([
56
- typescript_1.default.factory.createObjectLiteralExpression(method.parameters.map((param) => typescript_1.default.factory.createShorthandPropertyAssignment(typescript_1.default.factory.createIdentifier(param.name.getText(node))))),
57
- ])
58
- : typescript_1.default.factory.createArrayLiteralExpression([])))),
59
- ], false)),
60
- typescript_1.default.factory.createPropertyAssignment(typescript_1.default.factory.createIdentifier("queryFn"), typescript_1.default.factory.createArrowFunction(undefined, undefined, [], undefined, typescript_1.default.factory.createToken(typescript_1.default.SyntaxKind.EqualsGreaterThanToken), typescript_1.default.factory.createCallExpression(typescript_1.default.factory.createPropertyAccessExpression(typescript_1.default.factory.createIdentifier(className), typescript_1.default.factory.createIdentifier(methodName)), undefined, method.parameters.map((param) => typescript_1.default.factory.createIdentifier(param.name.getText(node)))))),
61
- typescript_1.default.factory.createSpreadAssignment(typescript_1.default.factory.createIdentifier("options")),
20
+ const queryKeyGenericType = typescript_1.default.factory.createTypeReferenceNode("TQueryKey");
21
+ const queryKeyConstraint = typescript_1.default.factory.createTypeReferenceNode("Array", [
22
+ typescript_1.default.factory.createKeywordTypeNode(typescript_1.default.SyntaxKind.UnknownKeyword),
23
+ ]);
24
+ // Awaited<ReturnType<typeof myClass.myMethod>>
25
+ const awaitedResponseDataType = typescript_1.default.factory.createTypeReferenceNode(typescript_1.default.factory.createIdentifier("Awaited"), [
26
+ typescript_1.default.factory.createTypeReferenceNode(typescript_1.default.factory.createIdentifier("ReturnType"), [
27
+ typescript_1.default.factory.createTypeQueryNode(typescript_1.default.factory.createQualifiedName(typescript_1.default.factory.createIdentifier(className), typescript_1.default.factory.createIdentifier(methodName)), undefined),
28
+ ]),
29
+ ]);
30
+ // DefaultResponseDataType
31
+ // export type MyClassMethodDefaultResponse = Awaited<ReturnType<typeof myClass.myMethod>>
32
+ const defaultApiResponse = typescript_1.default.factory.createTypeAliasDeclaration([typescript_1.default.factory.createModifier(typescript_1.default.SyntaxKind.ExportKeyword)], typescript_1.default.factory.createIdentifier(`${(0, common_1.capitalizeFirstLetter)(className)}${(0, common_1.capitalizeFirstLetter)(methodName)}DefaultResponse`), undefined, awaitedResponseDataType);
33
+ const TData = typescript_1.default.factory.createIdentifier("TData");
34
+ const TError = typescript_1.default.factory.createIdentifier("TError");
35
+ const responseDataType = typescript_1.default.factory.createTypeParameterDeclaration(undefined, TData.text, undefined, typescript_1.default.factory.createTypeReferenceNode(defaultApiResponse.name));
36
+ // Return Type
37
+ // export const classNameMethodNameQueryResult<TData = MyClassMethodDefaultResponse, TError = unknown> = UseQueryResult<TData, TError>;
38
+ const returnTypeExport = typescript_1.default.factory.createTypeAliasDeclaration([typescript_1.default.factory.createModifier(typescript_1.default.SyntaxKind.ExportKeyword)], typescript_1.default.factory.createIdentifier(`${(0, common_1.capitalizeFirstLetter)(className)}${(0, common_1.capitalizeFirstLetter)(methodName)}QueryResult`), [
39
+ typescript_1.default.factory.createTypeParameterDeclaration(undefined, TData, undefined, typescript_1.default.factory.createTypeReferenceNode(defaultApiResponse.name)),
40
+ typescript_1.default.factory.createTypeParameterDeclaration(undefined, TError, undefined, typescript_1.default.factory.createKeywordTypeNode(typescript_1.default.SyntaxKind.UnknownKeyword)),
41
+ ], typescript_1.default.factory.createTypeReferenceNode(typescript_1.default.factory.createIdentifier("UseQueryResult"), [
42
+ typescript_1.default.factory.createTypeReferenceNode(TData),
43
+ typescript_1.default.factory.createTypeReferenceNode(TError),
44
+ ]));
45
+ // QueryKey
46
+ const queryKeyExport = typescript_1.default.factory.createVariableStatement([typescript_1.default.factory.createModifier(typescript_1.default.SyntaxKind.ExportKeyword)], typescript_1.default.factory.createVariableDeclarationList([
47
+ typescript_1.default.factory.createVariableDeclaration(typescript_1.default.factory.createIdentifier(queryKey), undefined, undefined, typescript_1.default.factory.createStringLiteral(`${className}${(0, common_1.capitalizeFirstLetter)(methodName)}`)),
48
+ ], typescript_1.default.NodeFlags.Const));
49
+ // Custom hook
50
+ const hookExport = typescript_1.default.factory.createVariableStatement([typescript_1.default.factory.createModifier(typescript_1.default.SyntaxKind.ExportKeyword)], typescript_1.default.factory.createVariableDeclarationList([
51
+ typescript_1.default.factory.createVariableDeclaration(typescript_1.default.factory.createIdentifier(customHookName), undefined, undefined, typescript_1.default.factory.createArrowFunction(undefined, typescript_1.default.factory.createNodeArray([
52
+ responseDataType,
53
+ typescript_1.default.factory.createTypeParameterDeclaration(undefined, TError, undefined, typescript_1.default.factory.createKeywordTypeNode(typescript_1.default.SyntaxKind.UnknownKeyword)),
54
+ typescript_1.default.factory.createTypeParameterDeclaration(undefined, "TQueryKey", queryKeyConstraint, typescript_1.default.factory.createArrayTypeNode(typescript_1.default.factory.createKeywordTypeNode(typescript_1.default.SyntaxKind.UnknownKeyword))),
55
+ ]), [
56
+ ...requestParam,
57
+ typescript_1.default.factory.createParameterDeclaration(undefined, undefined, typescript_1.default.factory.createIdentifier("queryKey"), typescript_1.default.factory.createToken(typescript_1.default.SyntaxKind.QuestionToken), queryKeyGenericType),
58
+ typescript_1.default.factory.createParameterDeclaration(undefined, undefined, typescript_1.default.factory.createIdentifier("options"), typescript_1.default.factory.createToken(typescript_1.default.SyntaxKind.QuestionToken), typescript_1.default.factory.createTypeReferenceNode(typescript_1.default.factory.createIdentifier("Omit"), [
59
+ typescript_1.default.factory.createTypeReferenceNode(typescript_1.default.factory.createIdentifier("UseQueryOptions"), [
60
+ typescript_1.default.factory.createTypeReferenceNode(TData),
61
+ typescript_1.default.factory.createTypeReferenceNode(TError),
62
62
  ]),
63
- ]))),
64
- ], typescript_1.default.NodeFlags.Const)),
65
- ];
63
+ typescript_1.default.factory.createUnionTypeNode([
64
+ typescript_1.default.factory.createLiteralTypeNode(typescript_1.default.factory.createStringLiteral("queryKey")),
65
+ typescript_1.default.factory.createLiteralTypeNode(typescript_1.default.factory.createStringLiteral("queryFn")),
66
+ typescript_1.default.factory.createLiteralTypeNode(typescript_1.default.factory.createStringLiteral("initialData")),
67
+ ]),
68
+ ])),
69
+ ], undefined, typescript_1.default.factory.createToken(typescript_1.default.SyntaxKind.EqualsGreaterThanToken), typescript_1.default.factory.createCallExpression(typescript_1.default.factory.createIdentifier("useQuery"), [
70
+ typescript_1.default.factory.createTypeReferenceNode(TData),
71
+ typescript_1.default.factory.createTypeReferenceNode(TError),
72
+ ], [
73
+ typescript_1.default.factory.createObjectLiteralExpression([
74
+ typescript_1.default.factory.createPropertyAssignment(typescript_1.default.factory.createIdentifier("queryKey"), typescript_1.default.factory.createArrayLiteralExpression([
75
+ typescript_1.default.factory.createIdentifier(queryKey),
76
+ typescript_1.default.factory.createSpreadElement(typescript_1.default.factory.createParenthesizedExpression(typescript_1.default.factory.createBinaryExpression(typescript_1.default.factory.createIdentifier("queryKey"), typescript_1.default.factory.createToken(typescript_1.default.SyntaxKind.QuestionQuestionToken), method.parameters.length
77
+ ? typescript_1.default.factory.createArrayLiteralExpression([
78
+ typescript_1.default.factory.createObjectLiteralExpression(method.parameters.map((param) => typescript_1.default.factory.createShorthandPropertyAssignment(typescript_1.default.factory.createIdentifier(param.name.getText(node))))),
79
+ ])
80
+ : typescript_1.default.factory.createArrayLiteralExpression([])))),
81
+ ], false)),
82
+ typescript_1.default.factory.createPropertyAssignment(typescript_1.default.factory.createIdentifier("queryFn"), typescript_1.default.factory.createArrowFunction(undefined, undefined, [], undefined, typescript_1.default.factory.createToken(typescript_1.default.SyntaxKind.EqualsGreaterThanToken), typescript_1.default.factory.createAsExpression(typescript_1.default.factory.createCallExpression(typescript_1.default.factory.createPropertyAccessExpression(typescript_1.default.factory.createIdentifier(className), typescript_1.default.factory.createIdentifier(methodName)), undefined, method.parameters.map((param) => typescript_1.default.factory.createIdentifier(param.name.getText(node)))), typescript_1.default.factory.createTypeReferenceNode(TData)))),
83
+ typescript_1.default.factory.createSpreadAssignment(typescript_1.default.factory.createIdentifier("options")),
84
+ ]),
85
+ ]))),
86
+ ], typescript_1.default.NodeFlags.Const));
87
+ const hookWithJsDoc = (0, util_1.addJSDocToNode)(hookExport, node, deprecated, jsDoc);
88
+ return [defaultApiResponse, returnTypeExport, queryKeyExport, hookWithJsDoc];
66
89
  };
67
90
  exports.createUseQuery = createUseQuery;
@@ -0,0 +1,35 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.addJSDocToNode = void 0;
7
+ const typescript_1 = __importDefault(require("typescript"));
8
+ function addJSDocToNode(node, sourceFile, deprecated, jsDoc = []) {
9
+ const deprecatedString = deprecated ? "@deprecated" : "";
10
+ const jsDocString = [deprecatedString]
11
+ .concat(jsDoc.map((comment) => {
12
+ if (typeof comment === "string") {
13
+ return comment;
14
+ }
15
+ if (Array.isArray(comment)) {
16
+ return comment.map((c) => c.getText(sourceFile)).join("\n");
17
+ }
18
+ return "";
19
+ }))
20
+ // remove empty lines
21
+ .filter(Boolean)
22
+ // trim
23
+ .map((comment) => comment.trim())
24
+ // add * to each line
25
+ .map((comment) => `* ${comment}`)
26
+ // join lines
27
+ .join("\n")
28
+ // replace new lines with \n *
29
+ .replace(/\n/g, "\n * ");
30
+ const nodeWithJSDoc = jsDocString
31
+ ? typescript_1.default.addSyntheticLeadingComment(node, typescript_1.default.SyntaxKind.MultiLineCommentTrivia, `*\n ${jsDocString}\n `, true)
32
+ : node;
33
+ return nodeWithJSDoc;
34
+ }
35
+ exports.addJSDocToNode = addJSDocToNode;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@7nohe/openapi-react-query-codegen",
3
- "version": "0.5.0",
3
+ "version": "0.5.2",
4
4
  "description": "OpenAPI React Query Codegen",
5
5
  "bin": {
6
6
  "openapi-rq": "dist/src/cli.js"
@@ -30,7 +30,7 @@
30
30
  "commander": "^11.1.0",
31
31
  "glob": "^10.2.5",
32
32
  "openapi-typescript-codegen": "^0.25.0",
33
- "typescript": "^5.0.4"
33
+ "typescript": "^5.2.2"
34
34
  },
35
35
  "peerDependencies": {
36
36
  "commander": ">= 11 < 12",