@qualisero/openapi-endpoint 0.2.3

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.
@@ -0,0 +1,90 @@
1
+ import { type AxiosInstance } from 'axios';
2
+ import { UseMutationOptions, type UseQueryOptions } from '@tanstack/vue-query';
3
+ import type { MaybeRefOrGetter } from 'vue';
4
+ import { type AxiosRequestConfig } from 'axios';
5
+ import { EndpointQueryReturn } from '.';
6
+ export type { EndpointQueryReturn } from './openapi-query';
7
+ export type OperationId = string;
8
+ export type Operations<Ops> = object & {
9
+ [K in keyof Ops]: {
10
+ method: HttpMethod;
11
+ };
12
+ };
13
+ export interface OpenApiConfig<Ops extends Operations<Ops>> {
14
+ operations: Ops;
15
+ axios: AxiosInstance;
16
+ }
17
+ export declare enum HttpMethod {
18
+ GET = "GET",
19
+ POST = "POST",
20
+ PUT = "PUT",
21
+ PATCH = "PATCH",
22
+ DELETE = "DELETE",
23
+ HEAD = "HEAD",
24
+ OPTIONS = "OPTIONS",
25
+ TRACE = "TRACE"
26
+ }
27
+ export interface OperationInfo {
28
+ path: string;
29
+ method: HttpMethod;
30
+ }
31
+ export type GetOperation<Ops extends Operations<Ops>, Op extends keyof Ops> = Ops[Op];
32
+ export type GetResponseData<Ops extends Operations<Ops>, Op extends keyof Ops> = GetOperation<Ops, Op> extends {
33
+ responses: {
34
+ 200: {
35
+ content: {
36
+ 'application/json': infer Data;
37
+ };
38
+ };
39
+ };
40
+ } ? RequireReadonly<Data> : unknown;
41
+ export type QueryOptions<Ops extends Operations<Ops>, Op extends keyof Ops> = Omit<UseQueryOptions<GetResponseData<Ops, Op>>, 'enabled'> & {
42
+ enabled?: MaybeRefOrGetter<boolean>;
43
+ onLoad?: (data: GetResponseData<Ops, Op>) => void;
44
+ axiosOptions?: AxiosRequestConfig;
45
+ };
46
+ type MutationOnSuccessOptions<Ops extends Operations<Ops>> = {
47
+ dontInvalidate?: boolean;
48
+ dontUpdateCache?: boolean;
49
+ invalidateOperations?: (keyof Ops)[] | Partial<{
50
+ [K in keyof Ops]: GetPathParameters<Ops, K>;
51
+ }>;
52
+ refetchEndpoints?: EndpointQueryReturn<Ops, keyof Ops>[];
53
+ };
54
+ export type MutationVars<Ops extends Operations<Ops>, Op extends keyof Ops> = MutationOnSuccessOptions<Ops> & {
55
+ data: GetRequestBody<Ops, Op>;
56
+ pathParams?: GetPathParameters<Ops, Op>;
57
+ };
58
+ export type MutationOptions<Ops extends Operations<Ops>, Op extends keyof Ops> = UseMutationOptions<GetResponseData<Ops, Op>, Error, MutationVars<Ops, Op>> & MutationOnSuccessOptions<Ops> & {
59
+ axiosOptions?: AxiosRequestConfig;
60
+ };
61
+ export type GetPathParameters<Ops extends Operations<Ops>, Op extends keyof Ops> = Ops[Op] extends {
62
+ parameters: {
63
+ path: infer PathParams;
64
+ };
65
+ } ? {
66
+ [K in keyof PathParams]: PathParams[K] | undefined;
67
+ } : Record<string, never>;
68
+ type IfEquals<X, Y, A = X, B = never> = (<T>() => T extends X ? 1 : 2) extends <T>() => T extends Y ? 1 : 2 ? A : B;
69
+ type IsReadonly<T, K extends keyof T> = IfEquals<Pick<T, K>, {
70
+ -readonly [Q in K]: T[K];
71
+ }, false, true>;
72
+ type Writable<T> = {
73
+ -readonly [K in keyof T as IsReadonly<T, K> extends false ? K : never]: T[K];
74
+ };
75
+ export type GetRequestBody<Ops extends Operations<Ops>, Op extends keyof Ops> = GetOperation<Ops, Op> extends {
76
+ requestBody: {
77
+ content: {
78
+ 'application/json': infer Body;
79
+ };
80
+ };
81
+ } ? Writable<Body> : never;
82
+ type RequireReadonly<T> = {
83
+ [K in keyof T as IsReadonly<T, K> extends true ? K : never]-?: T[K];
84
+ } & {
85
+ [K in keyof T as IsReadonly<T, K> extends false ? K : never]: T[K];
86
+ };
87
+ export type IsQueryOperation<Ops extends Operations<Ops>, Op extends keyof Ops> = Ops[Op] extends {
88
+ method: HttpMethod.GET;
89
+ } ? true : false;
90
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
package/dist/types.js ADDED
@@ -0,0 +1,19 @@
1
+ export var HttpMethod;
2
+ (function (HttpMethod) {
3
+ HttpMethod["GET"] = "GET";
4
+ HttpMethod["POST"] = "POST";
5
+ HttpMethod["PUT"] = "PUT";
6
+ HttpMethod["PATCH"] = "PATCH";
7
+ HttpMethod["DELETE"] = "DELETE";
8
+ HttpMethod["HEAD"] = "HEAD";
9
+ HttpMethod["OPTIONS"] = "OPTIONS";
10
+ HttpMethod["TRACE"] = "TRACE";
11
+ })(HttpMethod || (HttpMethod = {}));
12
+ // export type IsMutationOperation<Ops extends object, Op extends keyof Ops> =
13
+ // IsQueryOperation<Ops, Op> extends true ? false : true
14
+ // export type IsQueryOperation<Ops extends object, Op extends keyof Ops> = Op extends OperationKey
15
+ // ? (typeof operationInfoDict)[Op]['method'] extends HttpMethod.GET
16
+ // ? true
17
+ // : false
18
+ // : never
19
+ // export type IsMutationOperation<Op extends string> = IsQueryOperation<Op> extends true ? false : true
package/package.json ADDED
@@ -0,0 +1,83 @@
1
+ {
2
+ "name": "@qualisero/openapi-endpoint",
3
+ "version": "0.2.3",
4
+ "repository": {
5
+ "type": "git",
6
+ "url": "https://github.com/qualisero/openapi-endpoint.git"
7
+ },
8
+ "description": "Type-safe OpenAPI integration for Vue Query",
9
+ "main": "./dist/index.js",
10
+ "types": "./dist/index.d.ts",
11
+ "type": "module",
12
+ "exports": {
13
+ ".": {
14
+ "types": "./dist/index.d.ts",
15
+ "import": "./dist/index.js"
16
+ }
17
+ },
18
+ "files": [
19
+ "dist",
20
+ "bin"
21
+ ],
22
+ "bin": {
23
+ "openapi-codegen": "./bin/openapi-codegen.js"
24
+ },
25
+ "scripts": {
26
+ "build": "tsc -p tsconfig.json",
27
+ "types": "tsc --noEmit",
28
+ "test": "vitest",
29
+ "test:run": "vitest run",
30
+ "test:ui": "vitest --ui",
31
+ "test:coverage": "vitest run --coverage",
32
+ "lint": "eslint .",
33
+ "lint:fix": "eslint . --fix",
34
+ "format": "prettier --write .",
35
+ "format:check": "prettier --check .",
36
+ "prepublishOnly": "npm run build && npm run types"
37
+ },
38
+ "keywords": [
39
+ "vue",
40
+ "openapi",
41
+ "rest",
42
+ "api",
43
+ "vue-query",
44
+ "tanstack-query",
45
+ "typescript"
46
+ ],
47
+ "publishConfig": {
48
+ "access": "public",
49
+ "provenance": true
50
+ },
51
+ "peerDependencies": {
52
+ "@tanstack/vue-query": "^5.90.2",
53
+ "axios": "^1.12.2",
54
+ "vue": "^3.5.22"
55
+ },
56
+ "devDependencies": {
57
+ "@eslint/js": "^9.37.0",
58
+ "@types/node": "^24.7.0",
59
+ "@typescript-eslint/eslint-plugin": "^8.46.0",
60
+ "@typescript-eslint/parser": "^8.46.0",
61
+ "@vitest/coverage-v8": "^3.2.4",
62
+ "@vitest/ui": "^3.2.4",
63
+ "@vue/test-utils": "^2.4.6",
64
+ "eslint": "^9.37.0",
65
+ "eslint-plugin-prettier": "^5.5.4",
66
+ "globals": "^16.4.0",
67
+ "jsdom": "^27.0.0",
68
+ "openapi-typescript": "^7.9.1",
69
+ "prettier": "^3.6.2",
70
+ "typescript": "^5.9.2",
71
+ "vitest": "^3.2.4"
72
+ },
73
+ "prettier": {
74
+ "semi": false,
75
+ "singleQuote": true,
76
+ "tabWidth": 2,
77
+ "trailingComma": "all",
78
+ "printWidth": 120,
79
+ "endOfLine": "lf"
80
+ },
81
+ "license": "MIT",
82
+ "author": ""
83
+ }