@orval/fetch 6.30.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 +29 -0
- package/dist/index.d.ts +6 -0
- package/dist/index.js +132 -0
- package/dist/index.js.map +1 -0
- package/package.json +18 -0
package/README.md
ADDED
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
[](https://badge.fury.io/js/orval)
|
|
2
|
+
[](https://opensource.org/licenses/MIT)
|
|
3
|
+
[](https://github.com/anymaniax/orval/actions/workflows/tests.yaml)
|
|
4
|
+
|
|
5
|
+
<p align="center">
|
|
6
|
+
<img src="./logo/orval-logo-horizontal.svg?raw=true" width="500" height="160" alt="orval - Restfull Client Generator" />
|
|
7
|
+
</p>
|
|
8
|
+
<h1 align="center">
|
|
9
|
+
Visit <a href="https://orval.dev" target="_blank">orval.dev</a> for docs, guides, API and beer!
|
|
10
|
+
</h1>
|
|
11
|
+
|
|
12
|
+
### Code Generation
|
|
13
|
+
|
|
14
|
+
`orval` is able to generate client with appropriate type-signatures (TypeScript) from any valid OpenAPI v3 or Swagger v2 specification, either in `yaml` or `json` formats.
|
|
15
|
+
|
|
16
|
+
`Generate`, `valid`, `cache` and `mock` in your React, Vue, Svelte and Angular applications all with your OpenAPI specification.
|
|
17
|
+
|
|
18
|
+
### Samples
|
|
19
|
+
|
|
20
|
+
You can find below some samples
|
|
21
|
+
|
|
22
|
+
- [react app](https://github.com/anymaniax/orval/tree/master/samples/react-app)
|
|
23
|
+
- [react query](https://github.com/anymaniax/orval/tree/master/samples/react-query)
|
|
24
|
+
- [svelte query](https://github.com/anymaniax/orval/tree/master/samples/svelte-query)
|
|
25
|
+
- [vue query](https://github.com/anymaniax/orval/tree/master/samples/vue-query)
|
|
26
|
+
- [react app with swr](https://github.com/anymaniax/orval/tree/master/samples/react-app-with-swr)
|
|
27
|
+
- [nx fastify react](https://github.com/anymaniax/orval/tree/master/samples/nx-fastify-react)
|
|
28
|
+
- [angular app](https://github.com/anymaniax/orval/tree/master/samples/angular-app)
|
|
29
|
+
- [hono](https://github.com/anymaniax/orval/tree/master/samples/hono)
|
package/dist/index.d.ts
ADDED
package/dist/index.js
ADDED
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __export = (target, all) => {
|
|
7
|
+
for (var name in all)
|
|
8
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
9
|
+
};
|
|
10
|
+
var __copyProps = (to, from, except, desc) => {
|
|
11
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
12
|
+
for (let key of __getOwnPropNames(from))
|
|
13
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
14
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
15
|
+
}
|
|
16
|
+
return to;
|
|
17
|
+
};
|
|
18
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
|
+
|
|
20
|
+
// src/index.ts
|
|
21
|
+
var src_exports = {};
|
|
22
|
+
__export(src_exports, {
|
|
23
|
+
builder: () => builder,
|
|
24
|
+
default: () => src_default,
|
|
25
|
+
generateClient: () => generateClient
|
|
26
|
+
});
|
|
27
|
+
module.exports = __toCommonJS(src_exports);
|
|
28
|
+
var import_core = require("@orval/core");
|
|
29
|
+
var generateRequestFunction = ({
|
|
30
|
+
queryParams,
|
|
31
|
+
operationName,
|
|
32
|
+
response,
|
|
33
|
+
body,
|
|
34
|
+
props,
|
|
35
|
+
verb,
|
|
36
|
+
formData,
|
|
37
|
+
formUrlEncoded,
|
|
38
|
+
override
|
|
39
|
+
}, { route }) => {
|
|
40
|
+
var _a, _b;
|
|
41
|
+
const isRequestOptions = (override == null ? void 0 : override.requestOptions) !== false;
|
|
42
|
+
const isFormData = (override == null ? void 0 : override.formData) !== false;
|
|
43
|
+
const isFormUrlEncoded = (override == null ? void 0 : override.formUrlEncoded) !== false;
|
|
44
|
+
const getUrlFnName = (0, import_core.camel)(`get-${operationName}-url`);
|
|
45
|
+
const getUrlFnProps = (0, import_core.toObjectString)(
|
|
46
|
+
props.filter(
|
|
47
|
+
(prop) => prop.type === import_core.GetterPropType.PARAM || prop.type === import_core.GetterPropType.NAMED_PATH_PARAMS || prop.type === import_core.GetterPropType.QUERY_PARAM
|
|
48
|
+
),
|
|
49
|
+
"implementation"
|
|
50
|
+
);
|
|
51
|
+
const getUrlFnImplementation = `export const ${getUrlFnName} = (${getUrlFnProps}) => {
|
|
52
|
+
${queryParams ? `
|
|
53
|
+
const normalizedParams = new URLSearchParams();
|
|
54
|
+
|
|
55
|
+
Object.entries(params || {}).forEach(([key, value]) => {
|
|
56
|
+
if (value === null) {
|
|
57
|
+
normalizedParams.append(key, 'null');
|
|
58
|
+
} else if (value !== undefined) {
|
|
59
|
+
normalizedParams.append(key, value.toString());
|
|
60
|
+
}
|
|
61
|
+
});` : ""}
|
|
62
|
+
|
|
63
|
+
return \`${route}${queryParams ? "?${normalizedParams.toString()}" : ""}\`
|
|
64
|
+
}
|
|
65
|
+
`;
|
|
66
|
+
const getUrlFnProperties = props.filter(
|
|
67
|
+
(prop) => prop.type === import_core.GetterPropType.PARAM || prop.type === import_core.GetterPropType.QUERY_PARAM || prop.type === import_core.GetterPropType.NAMED_PATH_PARAMS
|
|
68
|
+
).map((param) => {
|
|
69
|
+
if (param.type === import_core.GetterPropType.NAMED_PATH_PARAMS) {
|
|
70
|
+
return param.destructured;
|
|
71
|
+
} else {
|
|
72
|
+
return param.name;
|
|
73
|
+
}
|
|
74
|
+
}).join(",");
|
|
75
|
+
const args = `${(0, import_core.toObjectString)(props, "implementation")} ${isRequestOptions ? `options?: RequestInit` : ""}`;
|
|
76
|
+
const retrunType = `Promise<${response.definition.success || "unknown"}>`;
|
|
77
|
+
const globalFetchOptions = (0, import_core.isObject)(override == null ? void 0 : override.requestOptions) ? `${(_b = (_a = (0, import_core.stringify)(override == null ? void 0 : override.requestOptions)) == null ? void 0 : _a.slice(1, -1)) == null ? void 0 : _b.trim()}` : "";
|
|
78
|
+
const fetchMethodOption = `method: '${verb.toUpperCase()}'`;
|
|
79
|
+
const requestBodyParams = (0, import_core.generateBodyOptions)(
|
|
80
|
+
body,
|
|
81
|
+
isFormData,
|
|
82
|
+
isFormUrlEncoded
|
|
83
|
+
);
|
|
84
|
+
const fetchBodyOption = requestBodyParams ? `body: JSON.stringify(${requestBodyParams})` : "";
|
|
85
|
+
const fetchResponseImplementation = `const res = await fetch(
|
|
86
|
+
${getUrlFnName}(${getUrlFnProperties}),
|
|
87
|
+
{${globalFetchOptions ? "\n" : ""} ${globalFetchOptions}
|
|
88
|
+
${isRequestOptions ? "...options," : ""}
|
|
89
|
+
${fetchMethodOption}${fetchBodyOption ? "," : ""}
|
|
90
|
+
${fetchBodyOption}
|
|
91
|
+
}
|
|
92
|
+
)
|
|
93
|
+
|
|
94
|
+
return res.json()
|
|
95
|
+
`;
|
|
96
|
+
const bodyForm = (0, import_core.generateFormDataAndUrlEncodedFunction)({
|
|
97
|
+
formData,
|
|
98
|
+
formUrlEncoded,
|
|
99
|
+
body,
|
|
100
|
+
isFormData,
|
|
101
|
+
isFormUrlEncoded
|
|
102
|
+
});
|
|
103
|
+
const fetchImplementationBody = `${bodyForm ? ` ${bodyForm}
|
|
104
|
+
` : ""} ${fetchResponseImplementation}`;
|
|
105
|
+
const fetchImplementation = `export const ${operationName} = async (${args}): ${retrunType} => {
|
|
106
|
+
${fetchImplementationBody}}`;
|
|
107
|
+
const implementation = `${getUrlFnImplementation}
|
|
108
|
+
${fetchImplementation}
|
|
109
|
+
`;
|
|
110
|
+
return implementation;
|
|
111
|
+
};
|
|
112
|
+
var generateClient = (verbOptions, options) => {
|
|
113
|
+
const imports = (0, import_core.generateVerbImports)(verbOptions);
|
|
114
|
+
const functionImplementation = generateRequestFunction(verbOptions, options);
|
|
115
|
+
return {
|
|
116
|
+
implementation: `${functionImplementation}
|
|
117
|
+
`,
|
|
118
|
+
imports
|
|
119
|
+
};
|
|
120
|
+
};
|
|
121
|
+
var fetchClientBuilder = {
|
|
122
|
+
client: generateClient,
|
|
123
|
+
dependencies: () => []
|
|
124
|
+
};
|
|
125
|
+
var builder = () => () => fetchClientBuilder;
|
|
126
|
+
var src_default = builder;
|
|
127
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
128
|
+
0 && (module.exports = {
|
|
129
|
+
builder,
|
|
130
|
+
generateClient
|
|
131
|
+
});
|
|
132
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/index.ts"],"sourcesContent":["import {\n camel,\n ClientBuilder,\n ClientDependenciesBuilder,\n ClientGeneratorsBuilder,\n generateFormDataAndUrlEncodedFunction,\n generateVerbImports,\n GeneratorDependency,\n GeneratorOptions,\n GeneratorVerbOptions,\n GetterPropType,\n stringify,\n toObjectString,\n generateBodyOptions,\n isObject,\n} from '@orval/core';\n\nconst generateRequestFunction = (\n {\n queryParams,\n operationName,\n response,\n body,\n props,\n verb,\n formData,\n formUrlEncoded,\n override,\n }: GeneratorVerbOptions,\n { route }: GeneratorOptions,\n) => {\n const isRequestOptions = override?.requestOptions !== false;\n const isFormData = override?.formData !== false;\n const isFormUrlEncoded = override?.formUrlEncoded !== false;\n\n const getUrlFnName = camel(`get-${operationName}-url`);\n const getUrlFnProps = toObjectString(\n props.filter(\n (prop) =>\n prop.type === GetterPropType.PARAM ||\n prop.type === GetterPropType.NAMED_PATH_PARAMS ||\n prop.type === GetterPropType.QUERY_PARAM,\n ),\n 'implementation',\n );\n const getUrlFnImplementation = `export const ${getUrlFnName} = (${getUrlFnProps}) => {\n${\n queryParams\n ? `\n const normalizedParams = new URLSearchParams();\n\n Object.entries(params || {}).forEach(([key, value]) => {\n if (value === null) {\n normalizedParams.append(key, 'null');\n } else if (value !== undefined) {\n normalizedParams.append(key, value.toString());\n }\n });`\n : ''\n}\n\n return \\`${route}${queryParams ? '?${normalizedParams.toString()}' : ''}\\`\n}\\n`;\n const getUrlFnProperties = props\n .filter(\n (prop) =>\n prop.type === GetterPropType.PARAM ||\n prop.type === GetterPropType.QUERY_PARAM ||\n prop.type === GetterPropType.NAMED_PATH_PARAMS,\n )\n .map((param) => {\n if (param.type === GetterPropType.NAMED_PATH_PARAMS) {\n return param.destructured;\n } else {\n return param.name;\n }\n })\n .join(',');\n\n const args = `${toObjectString(props, 'implementation')} ${isRequestOptions ? `options?: RequestInit` : ''}`;\n const retrunType = `Promise<${response.definition.success || 'unknown'}>`;\n\n const globalFetchOptions = isObject(override?.requestOptions)\n ? `${stringify(override?.requestOptions)?.slice(1, -1)?.trim()}`\n : '';\n const fetchMethodOption = `method: '${verb.toUpperCase()}'`;\n\n const requestBodyParams = generateBodyOptions(\n body,\n isFormData,\n isFormUrlEncoded,\n );\n const fetchBodyOption = requestBodyParams\n ? `body: JSON.stringify(${requestBodyParams})`\n : '';\n\n const fetchResponseImplementation = `const res = await fetch(\n ${getUrlFnName}(${getUrlFnProperties}),\n {${globalFetchOptions ? '\\n' : ''} ${globalFetchOptions}\n ${isRequestOptions ? '...options,' : ''}\n ${fetchMethodOption}${fetchBodyOption ? ',' : ''}\n ${fetchBodyOption}\n }\n )\n \n return res.json()\n`;\n\n const bodyForm = generateFormDataAndUrlEncodedFunction({\n formData,\n formUrlEncoded,\n body,\n isFormData,\n isFormUrlEncoded,\n });\n\n const fetchImplementationBody =\n `${bodyForm ? ` ${bodyForm}\\n` : ''}` + ` ${fetchResponseImplementation}`;\n const fetchImplementation = `export const ${operationName} = async (${args}): ${retrunType} => {\\n${fetchImplementationBody}}`;\n\n const implementation =\n `${getUrlFnImplementation}\\n` + `${fetchImplementation}\\n`;\n\n return implementation;\n};\n\nexport const generateClient: ClientBuilder = (verbOptions, options) => {\n const imports = generateVerbImports(verbOptions);\n const functionImplementation = generateRequestFunction(verbOptions, options);\n\n return {\n implementation: `${functionImplementation}\\n`,\n imports,\n };\n};\n\nconst fetchClientBuilder: ClientGeneratorsBuilder = {\n client: generateClient,\n dependencies: () => [],\n};\n\nexport const builder = () => () => fetchClientBuilder;\n\nexport default builder;\n"],"mappings":"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","names":[]}
|
package/package.json
ADDED
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@orval/fetch",
|
|
3
|
+
"version": "6.30.0",
|
|
4
|
+
"license": "MIT",
|
|
5
|
+
"main": "./dist/index.js",
|
|
6
|
+
"types": "./dist/index.d.ts",
|
|
7
|
+
"files": [
|
|
8
|
+
"dist"
|
|
9
|
+
],
|
|
10
|
+
"scripts": {
|
|
11
|
+
"build": "tsup ./src/index.ts --target node12 --clean --sourcemap --dts",
|
|
12
|
+
"dev": "tsup ./src/index.ts --target node12 --clean --sourcemap --watch src",
|
|
13
|
+
"lint": "eslint src/**/*.ts"
|
|
14
|
+
},
|
|
15
|
+
"dependencies": {
|
|
16
|
+
"@orval/core": "6.30.0"
|
|
17
|
+
}
|
|
18
|
+
}
|