@7nohe/openapi-react-query-codegen 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md ADDED
@@ -0,0 +1,97 @@
1
+ # OpenAPI React Query Codegen
2
+
3
+ > Node.js library that generates [React Query (also called TanStack Query)](https://tanstack.com/query) hooks based on an OpenAPI specification file.
4
+
5
+ ## Features
6
+
7
+ - Supports generation of custom react hooks that use React Query's `useQuery` and `useMutation` hooks
8
+ - Supports the option to use pure TypeScript clients generated by [OpenAPI Typescript Codegen](https://github.com/ferdikoomen/openapi-typescript-codegen)
9
+
10
+ ## Install
11
+
12
+ ```
13
+ $ npm install -D @7nohe/openapi-react-query-codegen
14
+ ```
15
+
16
+ ## Usage
17
+
18
+ ```
19
+ $ openapi-rq --help
20
+
21
+ Usage: openapi-rq [options]
22
+
23
+ Generate React Query code based on OpenAPI
24
+
25
+ Options:
26
+ -V, --version output the version number
27
+ -p, --path <path> Path to OpenAPI file
28
+ -o, --output-dir [directory] Directory to output the generated package (default: "openapi")
29
+ -h, --help display help for command
30
+ ```
31
+
32
+ ## Example Usage
33
+
34
+ ### Command
35
+
36
+ ```
37
+ $ openapi-rq -p ./petstore.yaml
38
+ ```
39
+
40
+ ### Output directory structure
41
+
42
+ ```
43
+ - openapi
44
+ - queries
45
+ - index.ts <- custom react hooks
46
+ - requests <- output code generated by OpenAPI Typescript Codegen
47
+ ```
48
+
49
+ ### In your app
50
+
51
+ ```tsx
52
+ // App.tsx
53
+ import {
54
+ usePetServiceFindPetsByStatus,
55
+ } from "../openapi/queries";
56
+ function App() {
57
+ const { data } = usePetServiceFindPetsByStatus({ status: ["available"] });
58
+
59
+ return (
60
+ <div className="App">
61
+ <h1>Pet List</h1>
62
+ <ul>
63
+ {data?.map((pet) => (
64
+ <li key={pet.id}>{pet.name}</li>
65
+ ))}
66
+ </ul>
67
+ </div>
68
+ );
69
+ }
70
+
71
+ export default App;
72
+ ```
73
+
74
+ You can also use pure TS clients.
75
+
76
+ ```tsx
77
+ import { useQuery } from "@tanstack/react-query";
78
+ import { PetService } from '../openapi/requests/services/PetService';
79
+ function App() {
80
+ const { data } = useQuery(['MyKey'], () => {
81
+ // Do something here
82
+
83
+ return PetService.findPetsByStatus(['available']);
84
+ });
85
+
86
+ return (
87
+ <div className="App">
88
+ {/* .... */}
89
+ </div>
90
+ );
91
+ }
92
+
93
+ export default App;
94
+ ```
95
+
96
+ ## License
97
+ MIT
@@ -0,0 +1,17 @@
1
+ #!/bin/sh
2
+ basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
3
+
4
+ case `uname` in
5
+ *CYGWIN*) basedir=`cygpath -w "$basedir"`;;
6
+ esac
7
+
8
+ if [ -z "$NODE_PATH" ]; then
9
+ export NODE_PATH="/Users/daiki/Documents/openapi-react-query-codegen/node_modules/.pnpm/node_modules"
10
+ else
11
+ export NODE_PATH="$NODE_PATH:/Users/daiki/Documents/openapi-react-query-codegen/node_modules/.pnpm/node_modules"
12
+ fi
13
+ if [ -x "$basedir/node" ]; then
14
+ exec "$basedir/node" "$basedir/../../../node_modules/.pnpm/openapi-typescript-codegen@0.23.0/node_modules/openapi-typescript-codegen/bin/index.js" "$@"
15
+ else
16
+ exec node "$basedir/../../../node_modules/.pnpm/openapi-typescript-codegen@0.23.0/node_modules/openapi-typescript-codegen/bin/index.js" "$@"
17
+ fi
@@ -0,0 +1,17 @@
1
+ #!/bin/sh
2
+ basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
3
+
4
+ case `uname` in
5
+ *CYGWIN*) basedir=`cygpath -w "$basedir"`;;
6
+ esac
7
+
8
+ if [ -z "$NODE_PATH" ]; then
9
+ export NODE_PATH="/Users/daiki/Documents/openapi-react-query-codegen/node_modules/.pnpm/node_modules"
10
+ else
11
+ export NODE_PATH="$NODE_PATH:/Users/daiki/Documents/openapi-react-query-codegen/node_modules/.pnpm/node_modules"
12
+ fi
13
+ if [ -x "$basedir/node" ]; then
14
+ exec "$basedir/node" "$basedir/../../../node_modules/.pnpm/typescript@4.7.4/node_modules/typescript/bin/tsc" "$@"
15
+ else
16
+ exec node "$basedir/../../../node_modules/.pnpm/typescript@4.7.4/node_modules/typescript/bin/tsc" "$@"
17
+ fi
@@ -0,0 +1,17 @@
1
+ #!/bin/sh
2
+ basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
3
+
4
+ case `uname` in
5
+ *CYGWIN*) basedir=`cygpath -w "$basedir"`;;
6
+ esac
7
+
8
+ if [ -z "$NODE_PATH" ]; then
9
+ export NODE_PATH="/Users/daiki/Documents/openapi-react-query-codegen/node_modules/.pnpm/node_modules"
10
+ else
11
+ export NODE_PATH="$NODE_PATH:/Users/daiki/Documents/openapi-react-query-codegen/node_modules/.pnpm/node_modules"
12
+ fi
13
+ if [ -x "$basedir/node" ]; then
14
+ exec "$basedir/node" "$basedir/../../../node_modules/.pnpm/typescript@4.7.4/node_modules/typescript/bin/tsserver" "$@"
15
+ else
16
+ exec node "$basedir/../../../node_modules/.pnpm/typescript@4.7.4/node_modules/typescript/bin/tsserver" "$@"
17
+ fi
@@ -0,0 +1,45 @@
1
+ {
2
+ "name": "@7nohe/openapi-react-query-codegen",
3
+ "version": "0.1.0",
4
+ "description": "OpenAPI React Query Codegen",
5
+ "bin": {
6
+ "openapi-rq": "src/cli.js"
7
+ },
8
+ "scripts": {
9
+ "build": "tsc -p tsconfig.json",
10
+ "preview": "npm run build && npm -C examples/react-app run generate:api",
11
+ "prepublishOnly": "npm run build",
12
+ "release": "npx git-ensure -a && npx bumpp --commit --tag --push"
13
+ },
14
+ "repository": {
15
+ "type": "git",
16
+ "url": "https://github.com/7nohe/openapi-react-query-codegen.git"
17
+ },
18
+ "homepage": "https://github.com/7nohe/openapi-react-query-codegen",
19
+ "bugs": "https://github.com/7nohe/openapi-react-query-codegen/issues",
20
+ "files": [
21
+ "dist"
22
+ ],
23
+ "keywords": [
24
+ "codegen",
25
+ "react-query",
26
+ "react",
27
+ "openapi",
28
+ "swagger",
29
+ "typescript",
30
+ "openapi-typescript-codegen"
31
+ ],
32
+ "author": "Daiki Urata (@7nohe)",
33
+ "license": "MIT",
34
+ "dependencies": {
35
+ "commander": "^9.4.0"
36
+ },
37
+ "devDependencies": {
38
+ "@types/glob": "^7.2.0",
39
+ "@types/node": "^18.0.6",
40
+ "glob": "^8.0.3",
41
+ "openapi-types": "^12.0.0",
42
+ "openapi-typescript-codegen": "^0.23.0",
43
+ "typescript": "^4.7.4"
44
+ }
45
+ }
@@ -0,0 +1,20 @@
1
+ #!/usr/bin/env node
2
+ "use strict";
3
+ var __importDefault = (this && this.__importDefault) || function (mod) {
4
+ return (mod && mod.__esModule) ? mod : { "default": mod };
5
+ };
6
+ exports.__esModule = true;
7
+ var generate_1 = require("./generate");
8
+ var commander_1 = require("commander");
9
+ var package_json_1 = __importDefault(require("../package.json"));
10
+ var program = new commander_1.Command();
11
+ program
12
+ .name('openapi-rq')
13
+ .version(package_json_1["default"].version)
14
+ .description("Generate React Query code based on OpenAPI")
15
+ .requiredOption("-p, --path <path>", "Path to OpenAPI file")
16
+ .option("-o, --output-dir [directory]", "Directory to output the generated package", "openapi")
17
+ .parse();
18
+ var options = program.opts();
19
+ console.log("Generating React Query code using OpenApi file ".concat(options.path));
20
+ (0, generate_1.generate)(options);
@@ -0,0 +1,11 @@
1
+ "use strict";
2
+ exports.__esModule = true;
3
+ exports.lowercaseFirstLetter = exports.capitalizeFirstLetter = void 0;
4
+ var capitalizeFirstLetter = function (str) {
5
+ return str.charAt(0).toUpperCase() + str.slice(1);
6
+ };
7
+ exports.capitalizeFirstLetter = capitalizeFirstLetter;
8
+ var lowercaseFirstLetter = function (str) {
9
+ return str.charAt(0).toLowerCase() + str.slice(1);
10
+ };
11
+ exports.lowercaseFirstLetter = lowercaseFirstLetter;
@@ -0,0 +1,74 @@
1
+ "use strict";
2
+ var __read = (this && this.__read) || function (o, n) {
3
+ var m = typeof Symbol === "function" && o[Symbol.iterator];
4
+ if (!m) return o;
5
+ var i = m.call(o), r, ar = [], e;
6
+ try {
7
+ while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
8
+ }
9
+ catch (error) { e = { error: error }; }
10
+ finally {
11
+ try {
12
+ if (r && !r.done && (m = i["return"])) m.call(i);
13
+ }
14
+ finally { if (e) throw e.error; }
15
+ }
16
+ return ar;
17
+ };
18
+ var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
19
+ if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
20
+ if (ar || !(i in from)) {
21
+ if (!ar) ar = Array.prototype.slice.call(from, 0, i);
22
+ ar[i] = from[i];
23
+ }
24
+ }
25
+ return to.concat(ar || Array.prototype.slice.call(from));
26
+ };
27
+ var __importDefault = (this && this.__importDefault) || function (mod) {
28
+ return (mod && mod.__esModule) ? mod : { "default": mod };
29
+ };
30
+ exports.__esModule = true;
31
+ exports.createExports = void 0;
32
+ var typescript_1 = __importDefault(require("typescript"));
33
+ var glob_1 = __importDefault(require("glob"));
34
+ var path_1 = require("path");
35
+ var fs_1 = __importDefault(require("fs"));
36
+ var createUseQuery_1 = require("./createUseQuery");
37
+ var createUseMutation_1 = require("./createUseMutation");
38
+ var createExports = function (generatedClientsPath) {
39
+ var services = glob_1["default"].sync("".concat(generatedClientsPath, "/services/*.ts"));
40
+ var nodes = services.map(function (servicePath) {
41
+ return typescript_1["default"].createSourceFile(servicePath, // fileName
42
+ fs_1["default"].readFileSync((0, path_1.join)(process.cwd(), servicePath), "utf8"), typescript_1["default"].ScriptTarget.Latest // langugeVersion
43
+ );
44
+ });
45
+ return __spreadArray([], __read(nodes
46
+ .map(function (node) {
47
+ var _a;
48
+ var klass = node
49
+ .getChildren()[0]
50
+ .getChildren()
51
+ .find(function (child) { return child.kind === typescript_1["default"].SyntaxKind.ClassDeclaration; });
52
+ var className = (_a = klass.name) === null || _a === void 0 ? void 0 : _a.getText(node);
53
+ var methods = klass.members.filter(function (node) { return node.kind === typescript_1["default"].SyntaxKind.MethodDeclaration; });
54
+ return methods
55
+ .map(function (method) {
56
+ var _a, _b, _c;
57
+ var methodName = (_a = method.name) === null || _a === void 0 ? void 0 : _a.getText(node);
58
+ var methodBlock = method
59
+ .getChildren(node)
60
+ .find(function (child) { return child.kind === typescript_1["default"].SyntaxKind.Block; });
61
+ var returnStatement = methodBlock.statements.find(function (s) { return s.kind === typescript_1["default"].SyntaxKind.ReturnStatement; });
62
+ var callExpression = returnStatement.expression;
63
+ var properties = callExpression.arguments[1].properties;
64
+ var httpMethodName = (_c = (_b = properties
65
+ .find(function (p) { var _a; return ((_a = p.name) === null || _a === void 0 ? void 0 : _a.getText(node)) === "method"; })) === null || _b === void 0 ? void 0 : _b.initializer) === null || _c === void 0 ? void 0 : _c.getText(node);
66
+ return httpMethodName === "'GET'"
67
+ ? (0, createUseQuery_1.createUseQuery)(node, className, method)
68
+ : (0, createUseMutation_1.createUseMutation)(node, className, method);
69
+ })
70
+ .flat();
71
+ })
72
+ .flat()), false);
73
+ };
74
+ exports.createExports = createExports;
@@ -0,0 +1,57 @@
1
+ "use strict";
2
+ var __read = (this && this.__read) || function (o, n) {
3
+ var m = typeof Symbol === "function" && o[Symbol.iterator];
4
+ if (!m) return o;
5
+ var i = m.call(o), r, ar = [], e;
6
+ try {
7
+ while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
8
+ }
9
+ catch (error) { e = { error: error }; }
10
+ finally {
11
+ try {
12
+ if (r && !r.done && (m = i["return"])) m.call(i);
13
+ }
14
+ finally { if (e) throw e.error; }
15
+ }
16
+ return ar;
17
+ };
18
+ var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
19
+ if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
20
+ if (ar || !(i in from)) {
21
+ if (!ar) ar = Array.prototype.slice.call(from, 0, i);
22
+ ar[i] = from[i];
23
+ }
24
+ }
25
+ return to.concat(ar || Array.prototype.slice.call(from));
26
+ };
27
+ var __importDefault = (this && this.__importDefault) || function (mod) {
28
+ return (mod && mod.__esModule) ? mod : { "default": mod };
29
+ };
30
+ exports.__esModule = true;
31
+ exports.createImports = void 0;
32
+ var typescript_1 = __importDefault(require("typescript"));
33
+ var glob_1 = __importDefault(require("glob"));
34
+ var path_1 = require("path");
35
+ var createImports = function (generatedClientsPath) {
36
+ var models = glob_1["default"].sync("".concat(generatedClientsPath, "/models/*.ts"));
37
+ var services = glob_1["default"].sync("".concat(generatedClientsPath, "/services/*.ts"));
38
+ return __spreadArray(__spreadArray([
39
+ typescript_1["default"].factory.createImportDeclaration(undefined, undefined, typescript_1["default"].factory.createImportClause(false, undefined, typescript_1["default"].factory.createNamedImports([
40
+ typescript_1["default"].factory.createImportSpecifier(false, undefined, typescript_1["default"].factory.createIdentifier("useQuery")),
41
+ typescript_1["default"].factory.createImportSpecifier(false, undefined, typescript_1["default"].factory.createIdentifier("useMutation")),
42
+ typescript_1["default"].factory.createImportSpecifier(false, undefined, typescript_1["default"].factory.createIdentifier("UseQueryOptions")),
43
+ typescript_1["default"].factory.createImportSpecifier(false, undefined, typescript_1["default"].factory.createIdentifier("UseMutationOptions")),
44
+ ])), typescript_1["default"].factory.createStringLiteral("@tanstack/react-query"), undefined)
45
+ ], __read(models.map(function (model) {
46
+ var modelName = model.split("/").pop().split(".")[0];
47
+ return typescript_1["default"].factory.createImportDeclaration(undefined, undefined, typescript_1["default"].factory.createImportClause(false, undefined, typescript_1["default"].factory.createNamedImports([
48
+ typescript_1["default"].factory.createImportSpecifier(false, undefined, typescript_1["default"].factory.createIdentifier(modelName)),
49
+ ])), typescript_1["default"].factory.createStringLiteral((0, path_1.join)("../requests/models/", modelName)), undefined);
50
+ })), false), __read(services.map(function (service) {
51
+ var serviceName = service.split("/").pop().split(".")[0];
52
+ return typescript_1["default"].factory.createImportDeclaration(undefined, undefined, typescript_1["default"].factory.createImportClause(false, undefined, typescript_1["default"].factory.createNamedImports([
53
+ typescript_1["default"].factory.createImportSpecifier(false, undefined, typescript_1["default"].factory.createIdentifier(serviceName)),
54
+ ])), typescript_1["default"].factory.createStringLiteral((0, path_1.join)("../requests/services", serviceName)), undefined);
55
+ })), false);
56
+ };
57
+ exports.createImports = createImports;
@@ -0,0 +1,44 @@
1
+ "use strict";
2
+ var __read = (this && this.__read) || function (o, n) {
3
+ var m = typeof Symbol === "function" && o[Symbol.iterator];
4
+ if (!m) return o;
5
+ var i = m.call(o), r, ar = [], e;
6
+ try {
7
+ while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
8
+ }
9
+ catch (error) { e = { error: error }; }
10
+ finally {
11
+ try {
12
+ if (r && !r.done && (m = i["return"])) m.call(i);
13
+ }
14
+ finally { if (e) throw e.error; }
15
+ }
16
+ return ar;
17
+ };
18
+ var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
19
+ if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
20
+ if (ar || !(i in from)) {
21
+ if (!ar) ar = Array.prototype.slice.call(from, 0, i);
22
+ ar[i] = from[i];
23
+ }
24
+ }
25
+ return to.concat(ar || Array.prototype.slice.call(from));
26
+ };
27
+ var __importDefault = (this && this.__importDefault) || function (mod) {
28
+ return (mod && mod.__esModule) ? mod : { "default": mod };
29
+ };
30
+ exports.__esModule = true;
31
+ exports.createSource = void 0;
32
+ var typescript_1 = __importDefault(require("typescript"));
33
+ var createImports_1 = require("./createImports");
34
+ var createExports_1 = require("./createExports");
35
+ var createSourceFile = function (outputPath) {
36
+ return typescript_1["default"].factory.createSourceFile(__spreadArray(__spreadArray([], __read((0, createImports_1.createImports)(outputPath)), false), __read((0, createExports_1.createExports)(outputPath)), false), typescript_1["default"].factory.createToken(typescript_1["default"].SyntaxKind.EndOfFileToken), typescript_1["default"].NodeFlags.None);
37
+ };
38
+ var createSource = function (outputPath) {
39
+ var resultFile = typescript_1["default"].createSourceFile("index.ts", "", typescript_1["default"].ScriptTarget.Latest, false, typescript_1["default"].ScriptKind.TS);
40
+ var printer = typescript_1["default"].createPrinter({ newLine: typescript_1["default"].NewLineKind.LineFeed });
41
+ var result = printer.printNode(typescript_1["default"].EmitHint.Unspecified, createSourceFile(outputPath), resultFile);
42
+ return result;
43
+ };
44
+ exports.createSource = createSource;
@@ -0,0 +1,41 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ exports.__esModule = true;
6
+ exports.createUseMutation = void 0;
7
+ var typescript_1 = __importDefault(require("typescript"));
8
+ var common_1 = require("./common");
9
+ var createUseMutation = function (node, className, method) {
10
+ var _a;
11
+ var methodName = (_a = method.name) === null || _a === void 0 ? void 0 : _a.getText(node);
12
+ return typescript_1["default"].factory.createVariableStatement([typescript_1["default"].factory.createModifier(typescript_1["default"].SyntaxKind.ExportKeyword)], typescript_1["default"].factory.createVariableDeclarationList([
13
+ typescript_1["default"].factory.createVariableDeclaration(typescript_1["default"].factory.createIdentifier("use".concat(className).concat((0, common_1.capitalizeFirstLetter)(methodName))), undefined, undefined, typescript_1["default"].factory.createArrowFunction(undefined, undefined, [
14
+ typescript_1["default"].factory.createParameterDeclaration(undefined, 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"), [
15
+ typescript_1["default"].factory.createTypeReferenceNode(typescript_1["default"].factory.createIdentifier("UseMutationOptions"), [
16
+ typescript_1["default"].factory.createTypeReferenceNode(typescript_1["default"].factory.createIdentifier("Awaited"), [
17
+ typescript_1["default"].factory.createTypeReferenceNode(typescript_1["default"].factory.createIdentifier("ReturnType"), [
18
+ typescript_1["default"].factory.createTypeQueryNode(typescript_1["default"].factory.createQualifiedName(typescript_1["default"].factory.createIdentifier(className), typescript_1["default"].factory.createIdentifier(methodName)), undefined),
19
+ ]),
20
+ ]),
21
+ typescript_1["default"].factory.createKeywordTypeNode(typescript_1["default"].SyntaxKind.UnknownKeyword),
22
+ method.parameters.length !== 0 ? typescript_1["default"].factory.createTypeLiteralNode(method.parameters.map(function (param) {
23
+ return typescript_1["default"].factory.createPropertySignature(undefined, typescript_1["default"].factory.createIdentifier(param.name.getText(node)), undefined, param.type);
24
+ })) : typescript_1["default"].factory.createKeywordTypeNode(typescript_1["default"].SyntaxKind.VoidKeyword),
25
+ typescript_1["default"].factory.createKeywordTypeNode(typescript_1["default"].SyntaxKind.UnknownKeyword),
26
+ ]),
27
+ typescript_1["default"].factory.createLiteralTypeNode(typescript_1["default"].factory.createStringLiteral("mutationFn")),
28
+ ]), undefined),
29
+ ], undefined, typescript_1["default"].factory.createToken(typescript_1["default"].SyntaxKind.EqualsGreaterThanToken), typescript_1["default"].factory.createCallExpression(typescript_1["default"].factory.createIdentifier("useMutation"), undefined, [
30
+ typescript_1["default"].factory.createArrowFunction(undefined, undefined, method.parameters.length !== 0 ? [
31
+ typescript_1["default"].factory.createParameterDeclaration(undefined, undefined, undefined, typescript_1["default"].factory.createObjectBindingPattern(method.parameters.map(function (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(function (params) {
35
+ return typescript_1["default"].factory.createIdentifier(params.name.getText(node));
36
+ }))),
37
+ typescript_1["default"].factory.createIdentifier("options"),
38
+ ]))),
39
+ ], typescript_1["default"].NodeFlags.Const));
40
+ };
41
+ exports.createUseMutation = createUseMutation;
@@ -0,0 +1,81 @@
1
+ "use strict";
2
+ var __read = (this && this.__read) || function (o, n) {
3
+ var m = typeof Symbol === "function" && o[Symbol.iterator];
4
+ if (!m) return o;
5
+ var i = m.call(o), r, ar = [], e;
6
+ try {
7
+ while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
8
+ }
9
+ catch (error) { e = { error: error }; }
10
+ finally {
11
+ try {
12
+ if (r && !r.done && (m = i["return"])) m.call(i);
13
+ }
14
+ finally { if (e) throw e.error; }
15
+ }
16
+ return ar;
17
+ };
18
+ var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
19
+ if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
20
+ if (ar || !(i in from)) {
21
+ if (!ar) ar = Array.prototype.slice.call(from, 0, i);
22
+ ar[i] = from[i];
23
+ }
24
+ }
25
+ return to.concat(ar || Array.prototype.slice.call(from));
26
+ };
27
+ var __importDefault = (this && this.__importDefault) || function (mod) {
28
+ return (mod && mod.__esModule) ? mod : { "default": mod };
29
+ };
30
+ exports.__esModule = true;
31
+ exports.createUseQuery = void 0;
32
+ var typescript_1 = __importDefault(require("typescript"));
33
+ var common_1 = require("./common");
34
+ var createUseQuery = function (node, className, method) {
35
+ var _a;
36
+ var methodName = (_a = method.name) === null || _a === void 0 ? void 0 : _a.getText(node);
37
+ var requestParam = [];
38
+ if (method.parameters.length !== 0) {
39
+ requestParam.push(typescript_1["default"].factory.createParameterDeclaration(undefined, undefined, undefined, typescript_1["default"].factory.createObjectBindingPattern(method.parameters.map(function (param) {
40
+ return typescript_1["default"].factory.createBindingElement(undefined, undefined, typescript_1["default"].factory.createIdentifier(param.name.getText(node)), undefined);
41
+ })), undefined, typescript_1["default"].factory.createTypeLiteralNode(method.parameters.map(function (param) {
42
+ return typescript_1["default"].factory.createPropertySignature(undefined, typescript_1["default"].factory.createIdentifier(param.name.getText(node)), undefined, param.type);
43
+ })), undefined));
44
+ }
45
+ return typescript_1["default"].factory.createVariableStatement([typescript_1["default"].factory.createModifier(typescript_1["default"].SyntaxKind.ExportKeyword)], typescript_1["default"].factory.createVariableDeclarationList([
46
+ typescript_1["default"].factory.createVariableDeclaration(typescript_1["default"].factory.createIdentifier("use".concat(className).concat((0, common_1.capitalizeFirstLetter)(methodName))), undefined, undefined, typescript_1["default"].factory.createArrowFunction(undefined, undefined, __spreadArray(__spreadArray([], __read(requestParam), false), [
47
+ typescript_1["default"].factory.createParameterDeclaration(undefined, undefined, undefined, typescript_1["default"].factory.createIdentifier("queryKey"), undefined, typescript_1["default"].factory.createArrayTypeNode(typescript_1["default"].factory.createKeywordTypeNode(typescript_1["default"].SyntaxKind.StringKeyword)), typescript_1["default"].factory.createArrayLiteralExpression([], false)),
48
+ typescript_1["default"].factory.createParameterDeclaration(undefined, 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"), [
49
+ typescript_1["default"].factory.createTypeReferenceNode(typescript_1["default"].factory.createIdentifier("UseQueryOptions"), [
50
+ typescript_1["default"].factory.createTypeReferenceNode(typescript_1["default"].factory.createIdentifier("Awaited"), [
51
+ typescript_1["default"].factory.createTypeReferenceNode(typescript_1["default"].factory.createIdentifier("ReturnType"), [
52
+ typescript_1["default"].factory.createTypeQueryNode(typescript_1["default"].factory.createQualifiedName(typescript_1["default"].factory.createIdentifier(className), typescript_1["default"].factory.createIdentifier(methodName)), undefined),
53
+ ]),
54
+ ]),
55
+ typescript_1["default"].factory.createKeywordTypeNode(typescript_1["default"].SyntaxKind.UnknownKeyword),
56
+ typescript_1["default"].factory.createTypeReferenceNode(typescript_1["default"].factory.createIdentifier("Awaited"), [
57
+ typescript_1["default"].factory.createTypeReferenceNode(typescript_1["default"].factory.createIdentifier("ReturnType"), [
58
+ typescript_1["default"].factory.createTypeQueryNode(typescript_1["default"].factory.createQualifiedName(typescript_1["default"].factory.createIdentifier(className), typescript_1["default"].factory.createIdentifier(methodName)), undefined),
59
+ ]),
60
+ ]),
61
+ typescript_1["default"].factory.createArrayTypeNode(typescript_1["default"].factory.createKeywordTypeNode(typescript_1["default"].SyntaxKind.StringKeyword)),
62
+ ]),
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
+ ]), undefined),
69
+ ], false), undefined, typescript_1["default"].factory.createToken(typescript_1["default"].SyntaxKind.EqualsGreaterThanToken), typescript_1["default"].factory.createCallExpression(typescript_1["default"].factory.createIdentifier("useQuery"), undefined, [
70
+ typescript_1["default"].factory.createArrayLiteralExpression([
71
+ typescript_1["default"].factory.createStringLiteral("".concat(className).concat((0, common_1.capitalizeFirstLetter)(methodName))),
72
+ typescript_1["default"].factory.createSpreadElement(typescript_1["default"].factory.createIdentifier("queryKey"))
73
+ ], false),
74
+ 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(function (param) {
75
+ return typescript_1["default"].factory.createIdentifier(param.name.getText(node));
76
+ }))),
77
+ typescript_1["default"].factory.createIdentifier("options"),
78
+ ]))),
79
+ ], typescript_1["default"].NodeFlags.Const));
80
+ };
81
+ exports.createUseQuery = createUseQuery;
@@ -0,0 +1,67 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ var __generator = (this && this.__generator) || function (thisArg, body) {
12
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
13
+ return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
14
+ function verb(n) { return function (v) { return step([n, v]); }; }
15
+ function step(op) {
16
+ if (f) throw new TypeError("Generator is already executing.");
17
+ while (_) try {
18
+ if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
19
+ if (y = 0, t) op = [op[0] & 2, t.value];
20
+ switch (op[0]) {
21
+ case 0: case 1: t = op; break;
22
+ case 4: _.label++; return { value: op[1], done: false };
23
+ case 5: _.label++; y = op[1]; op = [0]; continue;
24
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
25
+ default:
26
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
27
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
28
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
29
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
30
+ if (t[2]) _.ops.pop();
31
+ _.trys.pop(); continue;
32
+ }
33
+ op = body.call(thisArg, _);
34
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
35
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
36
+ }
37
+ };
38
+ var __importDefault = (this && this.__importDefault) || function (mod) {
39
+ return (mod && mod.__esModule) ? mod : { "default": mod };
40
+ };
41
+ exports.__esModule = true;
42
+ exports.generate = void 0;
43
+ var openapi_typescript_codegen_1 = require("openapi-typescript-codegen");
44
+ var print_1 = require("./print");
45
+ var path_1 = __importDefault(require("path"));
46
+ var createSource_1 = require("./createSource");
47
+ function generate(options) {
48
+ return __awaiter(this, void 0, void 0, function () {
49
+ var openApiOutputPath, source;
50
+ return __generator(this, function (_a) {
51
+ switch (_a.label) {
52
+ case 0:
53
+ openApiOutputPath = path_1["default"].join(options.outputDir, "requests");
54
+ return [4 /*yield*/, (0, openapi_typescript_codegen_1.generate)({
55
+ input: options.path,
56
+ output: openApiOutputPath
57
+ })];
58
+ case 1:
59
+ _a.sent();
60
+ source = (0, createSource_1.createSource)(openApiOutputPath);
61
+ (0, print_1.print)(source, options);
62
+ return [2 /*return*/];
63
+ }
64
+ });
65
+ });
66
+ }
67
+ exports.generate = generate;
@@ -0,0 +1,22 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ exports.__esModule = true;
6
+ exports.print = void 0;
7
+ var fs_1 = __importDefault(require("fs"));
8
+ var path_1 = __importDefault(require("path"));
9
+ function printGeneratedTS(result, options) {
10
+ var dir = path_1["default"].join(options.outputDir, "queries");
11
+ if (!fs_1["default"].existsSync(dir)) {
12
+ fs_1["default"].mkdirSync(dir, { recursive: true });
13
+ }
14
+ fs_1["default"].writeFileSync(path_1["default"].join(dir, 'index.ts'), result);
15
+ }
16
+ function print(result, options) {
17
+ if (!fs_1["default"].existsSync(options.outputDir)) {
18
+ fs_1["default"].mkdirSync(options.outputDir);
19
+ }
20
+ printGeneratedTS(result, options);
21
+ }
22
+ exports.print = print;
package/package.json ADDED
@@ -0,0 +1,44 @@
1
+ {
2
+ "name": "@7nohe/openapi-react-query-codegen",
3
+ "version": "0.1.0",
4
+ "description": "OpenAPI React Query Codegen",
5
+ "bin": {
6
+ "openapi-rq": "src/cli.js"
7
+ },
8
+ "repository": {
9
+ "type": "git",
10
+ "url": "https://github.com/7nohe/openapi-react-query-codegen.git"
11
+ },
12
+ "homepage": "https://github.com/7nohe/openapi-react-query-codegen",
13
+ "bugs": "https://github.com/7nohe/openapi-react-query-codegen/issues",
14
+ "files": [
15
+ "dist"
16
+ ],
17
+ "keywords": [
18
+ "codegen",
19
+ "react-query",
20
+ "react",
21
+ "openapi",
22
+ "swagger",
23
+ "typescript",
24
+ "openapi-typescript-codegen"
25
+ ],
26
+ "author": "Daiki Urata (@7nohe)",
27
+ "license": "MIT",
28
+ "dependencies": {
29
+ "commander": "^9.4.0"
30
+ },
31
+ "devDependencies": {
32
+ "@types/glob": "^7.2.0",
33
+ "@types/node": "^18.0.6",
34
+ "glob": "^8.0.3",
35
+ "openapi-types": "^12.0.0",
36
+ "openapi-typescript-codegen": "^0.23.0",
37
+ "typescript": "^4.7.4"
38
+ },
39
+ "scripts": {
40
+ "build": "tsc -p tsconfig.json",
41
+ "preview": "npm run build && npm -C examples/react-app run generate:api",
42
+ "release": "npx git-ensure -a && npx bumpp --commit --tag --push"
43
+ }
44
+ }